Process Model versus Process Instance
Explanation
Section titled “Explanation”A process model is the drawing of a business process. Once deployed to a process engine and versioned, it is called a process definition. You use it to start instances.
A process instance is one execution of that definition. Each instance has its own unique key.
A token shows where an instance currently is. You can picture execution as tokens running through the model. A token marks the current point of execution. When the token reaches the end of the process, it is consumed and the instance ends.
Gateways decide which path a token takes. Gateways are the diamond-shaped elements that split the flow (see the article BPMN Gateway):
- An exclusive gateway picks one outgoing sequence flow based on data.
- A parallel gateway creates new tokens by activating several sequence flows at once.
So one instance can hold several tokens at the same time.
Correlation links an incoming message to the right running instance. The message carries an attribute that is matched against a variable of the instance. A correlation key is required when you publish a message. A payment, for example, must reach the right waiting instance.
Example
Section titled “Example”A company models a “handle complaint” process once and deploys it. Monday’s complaint from customer A starts instance 1. Tuesday’s complaint from customer B starts instance 2. Each instance has its own key and its own token.
In instance 1, an exclusive gateway sends the token to “refund”. In instance 2, the same gateway sends it to “replace item”. The model is the same, but each instance takes a different path.
Later, a message “customer replied” arrives. Its correlation attribute, such as a complaint number, tells the engine which waiting instance should receive it.
Diagram source
<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" targetNamespace="http://example.org/bpmn"> <process id="complaint" isExecutable="false"> <startEvent id="start" name="Complaint received"> <outgoing>f1</outgoing> </startEvent> <exclusiveGateway id="xor" name="Refund or replace?"> <incoming>f1</incoming> <outgoing>f2</outgoing> <outgoing>f3</outgoing> </exclusiveGateway> <task id="refund" name="Refund"> <incoming>f2</incoming> <outgoing>f4</outgoing> </task> <task id="replace" name="Replace item"> <incoming>f3</incoming> <outgoing>f5</outgoing> </task> <exclusiveGateway id="xorJoin"> <incoming>f4</incoming> <incoming>f5</incoming> <outgoing>f6</outgoing> </exclusiveGateway> <parallelGateway id="andSplit"> <incoming>f6</incoming> <outgoing>f7</outgoing> <outgoing>f8</outgoing> </parallelGateway> <task id="notify" name="Notify customer"> <incoming>f7</incoming> <outgoing>f9</outgoing> </task> <task id="log" name="Update records"> <incoming>f8</incoming> <outgoing>f10</outgoing> </task> <parallelGateway id="andJoin"> <incoming>f9</incoming> <incoming>f10</incoming> <outgoing>f11</outgoing> </parallelGateway> <endEvent id="end" name="Complaint closed"> <incoming>f11</incoming> </endEvent> <sequenceFlow id="f1" sourceRef="start" targetRef="xor" /> <sequenceFlow id="f2" sourceRef="xor" targetRef="refund" /> <sequenceFlow id="f3" sourceRef="xor" targetRef="replace" /> <sequenceFlow id="f4" sourceRef="refund" targetRef="xorJoin" /> <sequenceFlow id="f5" sourceRef="replace" targetRef="xorJoin" /> <sequenceFlow id="f6" sourceRef="xorJoin" targetRef="andSplit" /> <sequenceFlow id="f7" sourceRef="andSplit" targetRef="notify" /> <sequenceFlow id="f8" sourceRef="andSplit" targetRef="log" /> <sequenceFlow id="f9" sourceRef="notify" targetRef="andJoin" /> <sequenceFlow id="f10" sourceRef="log" targetRef="andJoin" /> <sequenceFlow id="f11" sourceRef="andJoin" targetRef="end" /> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_complaint"> <bpmndi:BPMNPlane id="BPMNPlane_complaint" bpmnElement="complaint"> <bpmndi:BPMNShape id="BPMNShape_start" bpmnElement="start"> <dc:Bounds x="80" y="102" width="36" height="36" /> <bpmndi:BPMNLabel> <dc:Bounds x="62" y="143" width="72" height="28" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_xor" bpmnElement="xor" isMarkerVisible="true"> <dc:Bounds x="216" y="95" width="50" height="50" /> <bpmndi:BPMNLabel> <dc:Bounds x="208" y="62" width="66" height="28" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_refund" bpmnElement="refund"> <dc:Bounds x="366" y="80" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_replace" bpmnElement="replace"> <dc:Bounds x="366" y="240" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_xorJoin" bpmnElement="xorJoin" isMarkerVisible="true"> <dc:Bounds x="566" y="95" width="50" height="50" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_andSplit" bpmnElement="andSplit" isMarkerVisible="true"> <dc:Bounds x="716" y="95" width="50" height="50" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_notify" bpmnElement="notify"> <dc:Bounds x="866" y="80" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_log" bpmnElement="log"> <dc:Bounds x="866" y="240" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_andJoin" bpmnElement="andJoin" isMarkerVisible="true"> <dc:Bounds x="1066" y="95" width="50" height="50" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_end" bpmnElement="end"> <dc:Bounds x="1216" y="102" width="36" height="36" /> <bpmndi:BPMNLabel> <dc:Bounds x="1198" y="143" width="72" height="28" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="BPMNEdge_f1" bpmnElement="f1"> <di:waypoint x="116" y="120" /> <di:waypoint x="216" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f2" bpmnElement="f2"> <di:waypoint x="266" y="120" /> <di:waypoint x="366" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f4" bpmnElement="f4"> <di:waypoint x="466" y="120" /> <di:waypoint x="566" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f6" bpmnElement="f6"> <di:waypoint x="616" y="120" /> <di:waypoint x="716" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f7" bpmnElement="f7"> <di:waypoint x="766" y="120" /> <di:waypoint x="866" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f9" bpmnElement="f9"> <di:waypoint x="966" y="120" /> <di:waypoint x="1066" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f11" bpmnElement="f11"> <di:waypoint x="1116" y="120" /> <di:waypoint x="1216" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f3" bpmnElement="f3"> <di:waypoint x="241" y="145" /> <di:waypoint x="241" y="280" /> <di:waypoint x="366" y="280" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f8" bpmnElement="f8"> <di:waypoint x="741" y="145" /> <di:waypoint x="741" y="280" /> <di:waypoint x="866" y="280" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f5" bpmnElement="f5"> <di:waypoint x="466" y="280" /> <di:waypoint x="591" y="280" /> <di:waypoint x="591" y="145" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="BPMNEdge_f10" bpmnElement="f10"> <di:waypoint x="966" y="280" /> <di:waypoint x="1091" y="280" /> <di:waypoint x="1091" y="145" /> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></definitions>Checks
Section titled “Checks”- The document states that a model is deployed as a versioned process definition from which instances are started.
- Each message a process waits for names the attribute used to correlate it to the right waiting instance.
- Parallel gateways are used where several paths must run at once, and exclusive gateways where data selects one path.
Related
Section titled “Related”- BPMN Gateway
- BPMN Event
- BPMN Collaboration Diagram
- Correlation Identifier
- BPMN Core Elements
- Runtime View
- Data Exchange between BPMN Processes
- BPM Life Cycle
Sources
Section titled “Sources”- Glossary | Camunda 8 Docs — docs.camunda.io, accessed 2026-11-09
- BPMN primer | Camunda 8 Docs — docs.camunda.io, accessed 2026-11-08
- Routing events to processes | Camunda 8 Docs — docs.camunda.io, accessed 2026-11-09