BPEL is an XML language for describing business process behavior based on Web services. The BPEL notation includes flow control, variables, concurrent execution, input and output, transaction scoping/compensation, and error handling.

A BPEL process describes a business process. Processes often invoke Web services to perform functional tasks. A process can be either abstract or executable. Abstract processes are similar to library APIs: they describe what the process can do and its inputs and outputs but do not describe how anything gets done. Abstract processes are useful for describing a business process to another party that wants to use the process. Executable processes do the "heavy lifting" - they contain all of the execution steps that represent a cohesive unit of work.

A process consists of activities connected by links. (A process sometimes only contains one activity but that is usually a container for more activities.) The path taken through the activities and their links is determined by many things, including the values of variables and the evaluation of expressions.

The starting points are called start activities; their createInstance attributes are set to "yes". When a start activity is triggered, a new business process instance is created. From then on, the instance is identified by data called correlation sets. These data uniquely identify a process, but they may change over time. For example, the correlation set for a process may begin as a purchase order number retrieved from a customer order. Later, when an invoice is generated, the correlation set may be the invoice number.

BPEL is layered on top of other Web technologies such as WSDL 1.1, XML Schema 1.0, XPath 1.0, and WS Addressing.

BPEL is a programming abstraction that allows developers to compose multiple discrete Web Services into an end-to-end process flow. It has built-in support for asynchronous interactions, flow control and compensating business transactions. It
integrates with XPath, XSLT and XQuery for XML data manipulation。