Skip to main content
Errors come from two places. The gateway decides authentication, access, billing, rate limiting and routing, and answers with one envelope. If the request gets past the gateway, the API you called may reject it in its own format. Key on the status code and the machine-readable code, never on the message text, which is prose and may be reworded.

Gateway errors

Two patterns worth recognising immediately:
  • 401 unauthenticated on every route almost always means the key is missing from the request, not that it is wrong.
  • 502 on everything means the gateway could not reach its authentication service. It fails closed by design. Retry with backoff.

Market Data errors

Server-side failures keep their status (500, 502, 503, 504) but come back in the gateway envelope as service_unavailable; the underlying error is not forwarded. Retry with backoff, and contact Eventory if it persists.

Live Availability errors

An unexpected error during the scrape returns 500, and an unreachable service 503. Both come back in the gateway envelope as service_unavailable, not with detail.

Watchlist errors

Validation errors carry error; a body that is not valid JSON is rejected earlier and carries detail.
The Watchlist API has no machine-readable code field — unlike Market Data and the gateway, the message string is all you get. The messages below are listed verbatim for that reason. They are still prose: match on the status code first, and treat a message match as a hint rather than a contract.

400 — validation

When event carries several comma-separated ids, the whole request is rejected if any of them fails the format check, and nothing is created. A non-integer {id} in the path is rejected before it reaches the Watchlist service and comes back as a 422 with a detail array, not one of the messages above. A POST or PATCH body that is not valid JSON is rejected with { "detail": "request body is not valid JSON" }; a valid JSON body that is not an object gets { "detail": "request body must be a JSON object" }.

403

A key without watchlist access gets the gateway’s 403 forbidden in the gateway envelope on every watchlist path, GET /watchlist/health included.

404

An unsupported method on a watchlist path is answered by the gateway as 404 not_found in the gateway envelope, not by this API.

500, 502, 504

Server-side failures are answered with the gateway envelope ({ "error": { "code": "service_unavailable", … } }); the underlying message is deliberately not forwarded. Retry once with backoff. If a 500 persists on a request that should clearly succeed, report it — it is not something a client can fix.

Account errors

Server-side failures, such as billing being unreachable or a misconfigured plan (502), come back in the gateway envelope as service_unavailable. Retry with backoff, and contact Eventory if it persists.

Stream errors

The WebSocket returns HTTP errors before the upgrade completes. After the upgrade, the server closes the socket with close code 1011 when its own feed of notifications ends: reconnect with backoff. See Connecting to the stream.

Retry policy

Paid requests are billed when the gateway forwards them, so each one is billed once whatever the API answers: a 4xx, a 5xx or a timeout included. A retry loop on a bad request spends credits for nothing, and every retry is billed.
Last modified on October 31, 2026