Trigger Notification
The tenant front door: record one triggered event per recipient and accept (202). The request does no per-channel work — channel resolution, rendering and delivery happen asynchronously in the fan-out worker, so one channel's (or one recipient's) failure can't roll back another. Each recipient's event_id correlates its accepted event for status.
An archived account can't send: reject up front (403) rather than record events that fan-out would only skip. (A None tenant — a tenant_id that authenticated but has no row — is a data-integrity impossibility, not an archived account, so it's deliberately allowed through rather than 403'd.)
The archived check runs before the idempotency replay deliberately: an archived account gets the same 403 whether or not it happens to be resending a token, rather than one answer for a fresh trigger and another for a retry.
Request
- Base URL: https://api.elaan.io (the document declares no server; this is the origin it was published from)
- URL: https://api.elaan.io/v1/notifications
- Auth: none declared
Headers
Optional dedupe token for this request. Send the same token again and the original event ids come back without sending anything a second time — for callers driven by an at-least-once source (a queue, a webhook, a retried job), where a redelivery is routine. Reusing a token for a different payload is a 409. Scoped to your account, at most 255 characters.
Request body
Example request
{
"notification_type_key": "order_shipped",
"external_ids": [
"crm-12345",
"crm-67890"
],
"branding_key": "acme",
"variables": {
"invoice_number": "INV-1042",
"lines": [
{
"amount": "$40.00",
"description": "Widget",
"qty": 2
},
{
"amount": "$80.00",
"description": "Gadget",
"qty": 1
}
],
"total": "$120.00"
},
"secret_variables": {
"code": "550913"
}
}Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.