Trigger event
Trigger a Novu workflow by sending an event with workflowId, subscriberId, and payload. Returns a transactionId for tracking.
POST request with the workflow identifier, target subscriber(s), and optional payload. The response includes a transactionId you can use to trace the run in the Activity Feed, cancel the event, or look up related messages.
Idempotency and billing
If you retry a trigger request, use an idempotency key to avoid duplicate workflow runs and duplicate billing.| Mechanism | Where it applies | Effect on billing |
|---|---|---|
Idempotency-Key header | API layer, before the request is queued | After the first request completes, duplicates return the cached response and count as one workflow run |
transactionId in the request body | During trigger processing | Does not provide the same API-level protection as an idempotency key |
Idempotency-Key on multiple POST /v1/events/trigger requests, Novu halts duplicates at the API layer. Once the first request completes, later requests return the cached response and never reach the worker queue, so only one trigger counts toward billing. While the first request is still processing, duplicates receive a 409 Conflict response.
The optional transactionId field is useful for tracing and cancellation, but it is not a substitute for idempotency. Novu checks transactionId uniqueness during processing rather than at the API boundary, so concurrent or retried requests with the same transactionId are not deduplicated the same way. For safe retries and atomic deduplication, send an Idempotency-Key header on every trigger request.
Authorizations
API key authentication. Allowed headers-- "Authorization: ApiKey <novu_secret_key>".
Headers
A header for idempotency purposes
Body
The trigger identifier of the workflow you wish to send. This identifier can be found on the workflow page.
"workflow_identifier"
The recipients list of people who will receive the notification. Maximum number of recipients can be 100.
The payload object is used to pass additional custom information that could be used to render the workflow, or perform routing rules based on it. This data will also be available when fetching the notifications feed from the API to display certain parts of the UI.
{
"comment_id": "string",
"post": { "text": "string" }
}This could be used to override provider specific configurations
A unique identifier for deduplication. If the same transactionId is sent again, the trigger is ignored. Useful to prevent duplicate notifications. The retention period depends on your billing tier.
It is used to display the Avatar of the provided actor's subscriber id or actor object. If a new actor object is provided, we will create a new subscriber in our system
It is used to specify a tenant context during trigger event. Existing tenants will be updated with the provided details.
Response
Created
Indicates whether the trigger was acknowledged or not
Status of the trigger
error, trigger_not_active, no_workflow_active_steps_defined, no_workflow_steps_defined, processed, no_tenant_found, invalid_recipients In case of an error, this field will contain the error message(s)
The returned transaction ID of the trigger
Link to the activity feed for this trigger event