Search docs
Find a page, section or endpoint

Send events

Delivery & retries

What a 200 means, when to retry, and how duplicates and late events are handled.

How delivery works#

  • Asynchronous. A 200 means 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 its id, or by the event type's business key (such as order_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"], two purchase events for the same order count once, even with different ids. Configure it when you register the event type.

Status codes#

StatusMeaningWhat to do
200QueuedNothing 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.

Next#