Documentation / Delivery activity & troubleshooting
OPERATE

Delivery activity & troubleshooting

Understand what each state means and choose the right recovery action.

Follow a message

GET /v1/notifications/:id adds the durable event timeline. Lists support status, category, channel=email or channel=whatsapp, limit, and cursor filters. Omit channel for both. Match your application request to the returned message ID and request ID.

Field / scopeDescriptionRequirement / access
queued / sendingAccepted work waiting or being submittedIn progress
sentProvider accepted the messageNot proof of inbox delivery
deliveredProvider reported deliveryDestination server accepted
bounced / complainedProvider feedback indicates a recipient issueInvestigate suppression
failed / suppressed / cancelledMessage did not proceed normallyInspect its timeline
unknownSubmission outcome is ambiguousDo not blindly resend

Safely retry application requests

After a timeout accepting a request, retry the identical payload and idempotency key. After a known rejection, fix its cause. For an unknown provider outcome, investigate the timeline and provider feedback; a new key can create a duplicate email.

Read aggregate metrics

GET /v1/overview with metrics:read accepts UTC ISO from/to timestamps, an inclusive start and exclusive end. Metrics are send cohorts grouped by notification creation time; delivery may arrive later. The dashboard shows activity and allowance usage separately.

Common integration errors

401: missing, revoked, or invalid key. 403: scope, tenant, approval, or role restriction. 400: invalid fields, missing variables, or unverified sender. 409: conflicting idempotency or resource state. 429: rate limit. 5xx: temporary service problem; use bounded backoff and preserve your idempotency key.

Building something interesting?We’d love to help