Boundary Event

Boundary Signal Event

bottom port — attach to host taskright port — path when signal fires
Service Tasknormalon signalHandler

Attached to a task — fires when a signal with the matching name is broadcast via the API. Unlike message events, signals are broadcast to all subscribers simultaneously; there is no correlation key.

Properties

PropertyTypeRequiredDescription
IDstringyesUnique element identifier
NamestringnoDisplay label
Attached Toelement IDyesThe task this boundary event is attached to
Signal NamestringyesMust match the signal_name in the broadcast call
InterruptingbooleanyesSee behavior below

Interrupting vs Non-Interrupting

ModeBehavior
Interrupting (default)Cancels the host task when the signal fires, then follows the boundary path
Non-interruptingSpawns a parallel path; the host task continues running

XML Example

<bpmn:userTask id="process_order" name="Process Order">
  <bpmn:incoming>flow_to_process</bpmn:incoming>
  <bpmn:outgoing>flow_to_ship</bpmn:outgoing>
</bpmn:userTask>

<!-- Non-interrupting: handle emergency alongside normal processing -->
<bpmn:boundaryEvent id="emergency_signal" attachedToRef="process_order"
  cancelActivity="false">
  <bpmn:signalEventDefinition signalRef="sig_emergency"/>
  <bpmn:outgoing>flow_to_alert</bpmn:outgoing>
</bpmn:boundaryEvent>

<bpmn:signal id="sig_emergency" name="EmergencyShutdown"/>

<bpmn:serviceTask id="alert_team" name="Alert Team">
  <bpmn:incoming>flow_to_alert</bpmn:incoming>
  <bpmn:outgoing>flow_alerted</bpmn:outgoing>
</bpmn:serviceTask>

API Integration

Broadcast a signal to all waiting instances:

POST /api/v1/signals/broadcast
Content-Type: application/json

{
  "org_id": "your-org-id",
  "signal_name": "EmergencyShutdown",
  "variables": [
    { "name": "reason", "value": "planned maintenance" }
  ]
}

Every instance with a boundary signal event or signal catch event subscribed to EmergencyShutdown will be activated simultaneously. Variables in the payload are merged into each receiving instance.