Automation events
POST /events records an external event for an active contact in the workspace. It requires events:write and Idempotency-Key.
curl "$SENDIRO_API_BASE/v1/workspaces/$SENDIRO_WORKSPACE_ID/events" \
-H "Authorization: Bearer $SENDIRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: purchase-unique-source-event" \
--data '{"contactId":"CONTACT_ID","eventName":"purchase.completed","occurredAt":"2026-10-18T15:30:00Z"}'
Define name and time
eventName accepts 1–128 ASCII letters, numbers, hyphens, dots and underscores. Use a stable name and configure the same name in the automation’s external trigger.
occurredAt is a UTC instant ending in Z, with at most microsecond precision. The receipt includes id, workspaceId, contactId, kind: "custom_event", eventName, occurredAt and acceptedAt.
Arbitrary payloads and external variables for action personalization are unsupported. If profile data changed, update it through contacts before recording the event. Recording an event does not subscribe a contact or authorize a send.
Understand when work starts
An active automation needs a matching trigger, enabled enrollment, capacity and a compatible reentry policy. When multiple triggers match in that automation, the first in their order determines the journey origin.
Event waits use acceptance time: the event must be accepted strictly after the wait was registered and before its deadline. An old occurredAt does not make a late accepted event timely.
Avoid duplicate events
Reuse the same idempotency key for the same event in your system. A different key represents another operation and can produce another event. The receipt confirms recording; it does not confirm journey completion or a sent message.
Automation administration and journey lookup require a human session and are unavailable to keys. Email webhooks report message outcomes and use a separate event catalog.