Send events
Delivery & retries
What a 200 means, when to retry, and how duplicates and late events are handled.
How delivery works#
- Asynchronous. A
200means the event was queued. Profiles and metrics update a few seconds later. An event that fails validation afterwards, such as one with an unregistered name, is set aside and does not appear on any profile. - Safe to retry. Retry on timeouts and
5xx. Each event is processed once: by itsid, or by the event type's business key (such asorder_id) when one is configured. - Event time wins. Late events are placed by
occured_at. A delayed old event never overwrites a newer "latest" value or reorders recent lists. - Business-key dedup. With
dedup_key_paths: ["properties.order_id"], twopurchaseevents for the same order count once, even with different ids. Configure it when you register the event type.
Status codes#
| Status | Meaning | What to do |
|---|---|---|
200 | Queued | Nothing to do. |
400 | Invalid JSON, missing x-tenant-id, or a body that isn't UTF-8 | Fix the request. Don't retry it as is. |
401 | Missing or wrong token on /events/authenticated | Check $COLLECTOR_TOKEN. |
500 / 502 / 503 | Temporary failure | Retry with backoff. Duplicates are harmless. |