Skip to main content

Two kinds of failure

A batch can fail as a whole, or one event inside it can fail on its own. These need different handling.

Exception types

Every exception inherits from ReconifyError, so one except ReconifyError catches all of them. Catch a subclass when the response needs a different action.
Every exception carries status_code, title, detail, code, validation_errors, request_id, response_headers, and response_metadata.
Exceptions never include your API key or the request body. Log request_id and include it in support requests.

Which status to act on

Each status implies one action:

Rejected events inside a batch

The batch endpoint returns 202 when at least one event is accepted or duplicated, and 422 when every event is rejected. Always read results.
item.index matches the position in the list you sent. Use it to locate the producer-side record without writing the event or customer reference to logs.

Automatic retries

Retry behavior is configured on the client:
Retries apply to 429 and 503 responses and to transport errors. A Retry-After header overrides the computed backoff, capped at max_delay. By default only GET, HEAD, and OPTIONS are retried, so event ingestion is not retried automatically. Turn on retry_unsafe_methods only when every event in the batch has a stable id. Reconify then returns duplicate for events it already stored instead of recording them twice.
An event without id receives a generated ID on every attempt. Retrying a batch that contains such events records them more than once.

Next

Put this together in Send events with Python.