v97

latestOpenAPI 3.1.0raw.githubusercontent.com2026-08-04231129815.9 KB
Subscribers

Trigger event for subscriber

Triggers an event for a subscriber. Creates the subscriber if they don't exist and applies the workspace default lists setting. Creates the event definition if it doesn't exist. When the workspace has double opt-in enabled, a brand-new subscriber is created pending confirmation, the confirmation email is queued, and matching sequences wait at their trigger until the subscriber confirms.

post/subscribers/events

Request body

emailstring email

Required when creating a new subscriber. Optional when externalId identifies an existing subscriber.

externalIdstring

Customer-owned app/customer/user ID

firstNamestring

First name to set if creating the subscriber.

lastNamestring

Last name to set if creating the subscriber.

eventstring required
propertiesobject

Event properties/metadata

customAttributesobject

Optional attributes to set on the subscriber if created

occurredAtstring date-time

When the event actually happened. Defaults to now. More than an hour in the past records it as history - stored with the real timestamp and counted by segments, but running no sequences, sync rules, waiting steps, goal conversions or webhooks, and the response carries historical=true. Older than the 5-year event retention window is rejected with 400.

eventIdstring

Caller-owned event ID. Re-sending the same ID for a historical event writes nothing new, so an interrupted import is safe to re-run.

Example request

{
  "email": "user@example.com",
  "externalId": "user_123",
  "firstName": "John",
  "lastName": "Doe",
  "event": "purchase.completed",
  "properties": {
    "amount": 9900,
    "currency": "USD",
    "productId": "prod_123"
  },
  "occurredAt": "2024-11-02T10:00:00Z",
  "eventId": "inv_9182"
}

Response

Event triggered successfully

successboolean
sideEffectFailuresstring[]

Present when the event was recorded but one or more side-effect stages (e.g. apply-sync-rules, trigger-event-automations) failed. Retry-sensitive callers should treat these as partial failures.

Example response

{
  "success": true,
  "sideEffectFailures": [
    "apply-sync-rules"
  ]
}