Event

Timer Start Event

timer firesFirst Task

Starts a new process instance when a timer fires. The engine schedules the job when the process definition is deployed and reschedules automatically for cycles.

Properties

PropertyTypeRequiredDescription
IDstringyesUnique identifier
NamestringnoDisplay label
Timer Typeduration | date | cycleyesHow the timer behaves
Timer ExpressionstringyesISO 8601 expression (see below)

Timer Expressions

Duration — fire once, after a delay from deployment

ExpressionMeaning
PT30M30 minutes
PT2H2 hours
P1D1 day
P1DT4H30M1 day, 4 hours, 30 minutes

Format: P prefix, then [n]Y[n]M[n]D for calendar parts, then T[n]H[n]M[n]S for time parts. Only include units you need.

Date — fire once at an absolute point in time

ExpressionMeaning
2026-06-01T09:00:00Z1 Jun 2026 at 09:00 UTC
2026-06-01T09:00:00+05:301 Jun 2026 at 09:00 IST

Always include a timezone offset or Z (UTC). Omitting it is ambiguous.

Cycle — fire repeatedly, creating a new instance each time

ExpressionMeaning
R/PT1HEvery hour, forever
R/P1DEvery day, forever
R3/PT30MEvery 30 minutes, exactly 3 times
R5/P1DT8HEvery 1 day 8 hours, 5 times

Format: R[n]/<duration>. Omit n to repeat forever.

XML Example

<!-- Cycle: run daily forever -->
<bpmn:startEvent id="timer_start" name="Daily Batch">
  <bpmn:timerEventDefinition>
    <bpmn:timeCycle>R/P1D</bpmn:timeCycle>
  </bpmn:timerEventDefinition>
  <bpmn:outgoing>flow_to_process</bpmn:outgoing>
</bpmn:startEvent>
<!-- Duration: run once after 1 hour -->
<bpmn:startEvent id="timer_start" name="Delayed Start">
  <bpmn:timerEventDefinition>
    <bpmn:timeDuration>PT1H</bpmn:timeDuration>
  </bpmn:timerEventDefinition>
  <bpmn:outgoing>flow_to_process</bpmn:outgoing>
</bpmn:startEvent>

Notes

Timer start events do not require an API call to trigger — the engine fires them on schedule automatically. To manually start an instance at any time, use a plain Start Event with POST /api/v1/instances.