Learning material

BPMN 2.0 Reference

Participants

Pool
Participant
Lane
Lane

Pool

Container for a process. A participant in an interaction. Pools exchange data only via message flows. Can be collapsed to hide details.

Order fulfilmentSalesWarehouseShippingOrder placedConfirmorderPack orderDeliver orderOrder delivered
Open in BP1 Modeler →
One pool, one process: the order moves from Sales to Warehouse to Shipping — the pool coordinates the work
CustomerOnline storeProductneededPlace orderParcel deliveredUnpack goodsOrdercompleteOrder receivedPick and packShip parcelOrder shippedOrderParcel
Open in BP1 Modeler →
Collaboration: the customer and the store are separate pools — they interact only through messages

Lane

A band inside a pool that shows who performs the tasks (a job title, role, department, or IT system).

Customer supportSupport agentEngineerNew ticketClassifyticketQuestion or bug?AnswerquestionFix bugTicket closedQuestionBug
Open in BP1 Modeler →
Lanes split one process by role: the agent classifies the ticket, a bug goes to the Engineer lane

Activities

Task types

Abstract
Task (None)
Manual
Manual
User
User Task
Send
Send Task
Receive
Receive Task
Script
Script Task
Service
Service Task
Business Rule
Business Rule

Abstract (None Task)

Type is not specified. Used in early modelling when the execution method is not yet decided, or when it is irrelevant for the diagram's goal. Essentially a placeholder that is later refined into a concrete type.

User Task

Performed by a human via a software interface: a CRM form, a screen in a web app, an item in a task manager. The key difference from a manual task is that the person works inside the system that tracks the task's status.

Examples: approve a request in the system, fill in a form, review a document in a self-service portal.

Manual Task

Performed by a human without involvement of the BPM engine. The system cannot automatically detect when this work starts or ends.

Examples: physically sign a document, call a client on the phone, hold an in-person meeting, deliver a parcel by courier.

Service Task

Executed automatically by a program or a service. No human is involved. The most common task type in executable processes.

Examples: an HTTP request to an API, a database write, a microservice call, running a calculation.

Send Task

Sends a message to a specific external participant (another process or system) and finishes immediately, without waiting for a reply. A fire-and-forget pattern.

Examples: send an e-mail to a client, publish an event to a message queue, send a notification via webhook.

Receive Task

Waits for an inbound message from an external participant. The process pauses at this task until the message arrives.

A special variant is the instantiated Receive: if such a task is the first step in a process, receiving the message itself spawns a new process instance (an alternative to a message start event).

Examples: waiting for a counterparty's reply, waiting for a callback from a payment provider, waiting for a delivery confirmation.

Script Task

Runs an embedded script (code) defined directly inside the process model. Unlike a service task, the code does not call any external system — it runs inside the BPM engine.

Examples: convert a data format, compute a deadline, build a string for an e-mail, check a condition.

Business Rule Task

Invokes a decision engine (e.g. a DMN table). Inputs are fed into a rule set, and a decision is returned.

Examples: determine a discount by customer tier, calculate an insurance premium, check a request against a policy, classify an inquiry.
TaskManual taskUser taskReceive taskSend taskScript taskService taskBusiness ruletask
Open in BP1 Modeler →
Task types: the shape is the same, only the icon in the corner tells how the work is done

Task markers

Small icons in the centre of the bottom of a task rectangle. They indicate the task's behaviour — not its type.

Loop
Loop
Multi-inst. ∥
Parallel MI
Multi-inst. ≡
Sequential MI
Compensation
Compensation
Ad-hoc ~
Ad-hoc
Subprocess +
Subprocess
MarkerMeaningExample
↻ LoopThe task repeats while a condition holds (one instance, several iterations)Revise a document → submit → if rejected, repeat
∥ Parallel multi-instanceN instances start at the same time — one per item in the collectionSend the notification to every approver at the same time
≡ Sequential multi-instanceSame N instances, but one after anotherInterview each candidate in turn
⏪ CompensationA rollback task: runs only when compensation is triggered, to undo an action that has already completed“Cancel booking” after “Book hotel” has already completed
~ Ad-hocTasks inside the subprocess run in any order, can be repeated or skipped; start and end events are not allowed insideFree choice of steps during a client consultation
+ SubprocessA composite activity with a hidden internal sequence; flows cannot cross its boundary“Order processing” hides 10 internal steps
Contract draftedNegotiatetermsSign contractContract signedUntil both parties agree
Open in BP1 Modeler →
Loop: one task repeats — “Negotiate terms” runs again until both parties agree
PurchaserequestedRequestquoteChoosesupplierSupplier chosenFor each supplier
Open in BP1 Modeler →
Parallel multi-instance (three bars): “Request quote” runs once per supplier at the same time; the process goes on when all quotes are in
Trip requestedBook hotelBook flightFlight booked?Trip bookedTrip cancelledUndo requestedCancel hotelbookingYesNo
Open in BP1 Modeler →
Compensation: “Cancel hotel booking” runs only if the trip is cancelled after the hotel was booked — it is linked by a compensation boundary event, not by a flow

Subprocess

A composite activity marked with “+”. Contains its own sequence of steps. Flows cannot cross its boundary. Intermediate events attach to the boundary.

Order receivedPay orderCharge cardSend receiptShip orderOrder shipped
Open in BP1 Modeler →
A subprocess wraps its own steps: expanded, “Pay order” shows them with its own start and end; collapsed, “Ship order” hides them behind the + marker

Call Activity

Thick border. References a global subprocess (e.g. “Procurement”) that is reused across different processes.

Difference from an embedded subprocess: in an embedded subprocess data is accessible directly (shared scope with the parent). A Call Activity is a separate process — its inputs and outputs require explicit data mapping: what we pass in on the call, what we read back on return.
SalesLeasingOrder placedCheck creditConfirmorderOrder confirmedLease requestedCheck creditSign leaseLease signed
Open in BP1 Modeler →
Call activity (thick border): “Sales” and “Leasing” call the same global process “Check credit”

Ad-hoc subprocess

Marker “~”. Activities inside may run in any order, repeat, or be skipped. Start/end events are not allowed inside.

Offer acceptedPrepare first dayOrder laptopCreateaccountsIssue badgeAssignmentorWorkplace ready
Open in BP1 Modeler →
Ad-hoc subprocess (~): the tasks have no flows — they are done in any order, repeated or skipped

Event subprocess

Dashed border inside a process. Triggered by a start event while the parent is active. Interrupting — cancels the parent. Non-interrupting — runs in parallel.

Online storeOrder receivedPack orderShip orderOrder shippedChange addressAddress changedUpdateaddressAddress updated
Open in BP1 Modeler →
Event subprocess (dotted border): no incoming flow — the message “Address changed” starts it while the order is in progress; the dashed start does not interrupt the main flow

Gateways

Control branching and merging. A gateway does no work itself — it only routes the flow; the task before it prepares the decision.

Exclusive XOR
Either/Or
Parallel AND
And/And
Inclusive OR
One or more
Event-based
Event-based
Complex
Complex
None
None

Exclusive (XOR) Gateway

The most common gateway. When splitting, it activates exactly one outgoing path — the one whose condition holds first. If no condition is met, the process fails with an error (so it is good practice to always define a “default” branch). When merging, it lets every arriving token through immediately, without waiting for the others.

Analogy: a fork in the road where you drive in only one direction.

Examples: “Is the order paid? → Yes / No”, “Is the amount > 10,000? → Yes / No”.
Tip: phrase the question before the gateway and put the answer options on the outgoing arrows.
Order paidChoosedeliveryDelivery method?Hand over tocourierPrepare forpickupSend by postOrderdispatchedCourierPickupPost
Open in BP1 Modeler →
XOR gateway: exactly one branch is taken; the merging XOR passes the order on without waiting

Parallel (AND) Gateway

When splitting, it activates all outgoing paths at once, unconditionally — no checks. When merging, it waits for tokens on all incoming paths and only when all have arrived does it pass a single token onwards.

Analogy: a manager hands out tasks to five employees and waits until all five are done.

Examples: shipping the goods and issuing the invoice in parallel; different departments reviewing documents at the same time.
Antipattern: do not merge branches with AND if they were split by XOR or if only one of them is ever taken. AND will wait forever for tokens on all inputs — the process deadlocks. Merge after an XOR with an XOR (or an empty diamond).
Order paidShip goodsIssue invoiceOrder completed
Open in BP1 Modeler →
AND gateway: shipping and invoicing start together; the merging AND waits for both

Inclusive (OR) Gateway

A hybrid of XOR and AND. When splitting, it activates one or more paths depending on the conditions — each condition is evaluated independently. When merging, it waits only for tokens on the paths that were actually activated (not for all of them, as AND does).

Analogy: a buffet — you take one dish, two, or all, but never zero.

Examples: the client chose delivery and/or pickup and/or gift wrapping — execute the selected options and wait for all of them to complete.
Caution: OR gateways are harder to analyse. In branchy diagrams the synchronisation rules can be non-obvious. Not every engine supports them correctly.
Order paidOrder contains?Ship parcelSenddownload linkOrder fulfilledPhysical goodsDigital goods
Open in BP1 Modeler →
OR gateway: physical goods, digital goods or both — one or both branches run, and the merging OR waits only for those taken

Event-based Gateway

Fundamentally different from the others: it routes not by data, but by whichever event arrives first. After the gateway you place intermediate waiting events (timer, message, conditional, signal). As soon as one fires, the others are cancelled.

Analogy: you send a job offer and wait: if the candidate replies, you go on; if a week passes in silence, you move to the next candidate.

Examples: waiting for payment with a timer (not paid in 3 days → cancel the order); waiting for the client's reply or for a deadline.
Order placedSend invoicePayment receivedShip orderOrder shipped3 daysCancel orderOrder cancelled
Open in BP1 Modeler →
Event-based gateway: whichever comes first wins — payment ships the order, 3 days without it cancel it

Complex Gateway

Used when the branching logic cannot be expressed by standard gateways. The merge condition is defined by an expression (for example, “continue when 3 out of 5 branches have completed” or “when the first reply has arrived and 10 minutes have passed”).

In practice: rarely used and not every BPM engine supports it. If a combination of XOR / AND / OR is enough, prefer that.

None (Default Exclusive)

A diamond with no marker. Semantically equivalent to an exclusive (XOR) gateway — the BPMN standard allows omitting the cross. Some methodologists consider this bad practice because it hurts readability: it is unclear whether the author forgot the marker or deliberately chose XOR.

Events

Key concepts

An event is something that happens (a fact), as opposed to a task (an active action). Drawn as circles.

Start
Thin circle
Intermediate
Double circle
End
Thick circle

Catching (unfilled marker) — waiting. Throwing (filled) — throwing. Boundary events: interrupting (solid) and non-interrupting (dashed).

Event summary table

“—” = not defined by the standard.

TypeStartIntermediateEnd
NormalEvent sub.Non-int.CatchBoundaryBound. non-int.Throw
None—————
✉ Message
⏱ Timer——
⚡ Error—————
▲ Signal
📋 Conditional——
↗ Escalation——
⬤ Terminate———————
⏪ Compensation————
✖ Cancel——————
➡ Link——————
⬠ Multiple
➕ Parallel mult.——

Message

Exchange with a specific recipient: email, call, HTTP, push. Available in every position.

Online storeCourier serviceOrder paidPack parcelPickup requestedRequest receivedDeliver parcelParcel deliveredPickup request
Open in BP1 Modeler →
Message: the store’s message end event sends a pickup request, and the courier’s message start event begins a new process

Timer

Date/time, interval, countdown (deadline). Catching only.

Every Monday,9:00PrepareweeklyreportApprovereportReportapproved1 dayRemindapproverReminder sent2 daysEscalate tomanagerReportescalated
Open in BP1 Modeler →
Timers: a start on schedule, a non-interrupting reminder after 1 day and an interrupting deadline after 2 days

Error

A serious failure. Catching — only on a boundary. Throwing — only at the end.

Order placedCharge cardShip orderOrder shippedPayment declinedCancel orderOrder cancelled
Open in BP1 Modeler →
Error: if charging the card fails, the boundary error interrupts the task and the order goes to cancellation

Conditional

Waiting for an external condition (“stock falls below the minimum”). Catching only.

Order receivedConfirmorderItem in stockShip orderOrder shipped
Open in BP1 Modeler →
Conditional: after confirmation the process waits until the item is in stock, then ships the order

Signal

Broadcast (vs. an addressed message). Any subscriber reacts.

Head officeStoreDefect confirmedPreparerecallProduct recalledProduct recalledRemove fromshelvesShelves cleared
Open in BP1 Modeler →
Signal: the head office broadcasts “Product recalled”; every store listening for it starts its own process — no message flow needed

Terminate

Immediately stops the entire process instance. End only.

Ticket openedFind cause(45 min)Cause foundTry quick fix(30 min)Fix tried
Open in BP1 Modeler →
Without Terminate: each parallel branch reaches its own end; the instance finishes only after the longer one, at 45 minutes

What if continuing task 2 after task 3 finishes no longer makes sense? Then the pattern below is used:

Ticket openedFind cause(45 min)Cause foundTry quick fix(30 min)Fix triedSolved?Ticket solvedNoYes
Open in BP1 Modeler →
With Terminate: if the quick fix solves the ticket, the Terminate end stops the whole instance at once, including the still-running “Find cause”
Order paidPack orderShippingShippingShip orderOrder shipped
Open in BP1 Modeler →
Link: the throwing “Shipping” link ends one row and the catching one continues on the next — instead of a long crossing arrow

Compensation

Reverses a previously completed action. The compensating task is linked via an association.

Order placedCharge cardIn stock?Order confirmedOrder cancelledCharge reversedRefundpaymentYesNo
Open in BP1 Modeler →
Compensation: the compensation end event triggers the boundary event of the completed “Charge card”, and its handler refunds the payment

Escalation

Sent from a subprocess to its parent — not an error. Can be non-interrupting.

Order packedDeliver orderDrive tocustomerParcel handed over2 hoursDelivery lateOrder deliveredDelivery lateNotifycustomerCustomer notified
Open in BP1 Modeler →
Escalation: the delivery subprocess throws “Delivery late”; the non-interrupting boundary catches it and notifies the customer while delivery goes on

Cancel

Only in the context of transactions. End — rollback. Boundary — catch.

Data, artefacts, flows

Data Object
Data Object
Data Store
Data Store
Data Input
Data Input
Data Output
Data Output
Annotation
Text Annotation
Group
Group
Flow
Sequence Flow
Message flow
Message Flow
Conditional
Conditional Flow
Default
Default Flow
Transaction
Transaction

Data Object

A “sheet of paper” with a folded corner. Represents information that is created, consumed or passed between tasks within a process instance. It only exists while the instance is alive.

Examples: a customer request, a draft contract, a report that is assembled along the way.

Data Store

A cylinder. Persistent storage that outlives the process instance: a database, a registry, a file store. Tasks read from and write to it.

Examples: CRM, ERP, order database, document archive.

Data Input / Data Output

Parameters of a process or subprocess on its boundary. Input — what is supplied from the outside; output — what is returned. Arrow with an open/filled triangle.

Examples: the “Procurement” subprocess takes a list of items as input and returns an invoice as output.

Text Annotation

A comment attached to any element via a dashed line. Does not affect execution — it only exists to clarify things for the diagram's reader.

Group

A dashed rounded rectangle. A visual grouping of elements (e.g. “all logistics tasks”). It has no execution semantics; flows may freely cross its boundary.

Sequence Flow

A solid arrow with a filled head. Defines the order of execution inside a single pool. Cannot cross pool boundaries.

A conditional flow (with a small diamond at the source) — fires only if its condition is true. Used on outgoing arrows from a task without a gateway.

A default flow (with a tick at the source) — the fallback path of an XOR/OR gateway or a conditional split, taken if no other condition holds.

Message Flow

A dashed arrow with an open head. Connects different pools — a message exchanged between independent participants. Not used inside a single pool.

Examples: the customer sends an order to the online store; the bank sends a payment confirmation.

Transaction

A subprocess with a double border. ACID semantics: either every inner action commits successfully, or the entire transaction rolls back via a Cancel event (with compensations). Used for consistency in distributed operations.

Examples: booking a “flight + hotel + car” package — if any step fails, the whole booking is cancelled.

Ready to put BPMN to work?

Talk to our team — we’ll map your process and show BP1.ai running BPMN on your own data.

Contact Sales
All diagrams are drawn in BP1 Modeler, a free BPMN 2.0 editor — open any of them to edit. Compiled by BP1.AI.