Skip to main content
The REST API uses PocketBase-style JSON errors. An error response includes the HTTP status in both the response status code and the status field.

Error response format

Validation details are keyed by request field and contain their own code and message values:
Do not build program logic around the exact English wording. Use the HTTP status and structured validation keys where present.

HTTP status codes

400 Bad Request

Returned when a validated parameter is outside its accepted values, including:
  • dates that are not RFC 3339, such as 2026-03-01 without a time and timezone;
  • unsupported platform, status, or taker_side values;
  • numeric limits below 1 or above 1,000.
Some malformed values are currently handled more permissively:
  • a nonnumeric limit falls back to the default value of 100;
  • a malformed pagination cursor is ignored and the first page is returned;
  • market_id is passed to the database without route-level UUID validation.
These behaviors may become stricter in a future version. Send values matching the published OpenAPI schema rather than relying on the fallback.

401 Unauthorized

Returned when API-key authentication fails.
Common causes:
  • missing Authorization header;
  • a scheme other than the case-sensitive Bearer scheme;
  • a token that does not contain API_KEY_ID:API_KEY_SECRET;
  • an invalid, revoked, or inactive API key.
Correct format:

403 Forbidden

Returned when the authenticated account cannot access the requested resource.

500 Internal Server Error

Returned when a request could not be completed because of an internal or upstream database failure.
Retry transient 5xx failures with bounded exponential backoff. If failures persist, contact support with the request parameters and UTC timestamp.

REST limits versus ClickHouse quotas

No fixed REST requests-per-second or requests-per-hour quota is currently part of the public REST contract. Operational protections can still reject abusive or unusually concurrent traffic. Direct ClickHouse credentials use separate traffic and resource limits. See SQL access tiers. A ClickHouse quota error is not a REST 429 response and does not use the JSON format on this page.

Cursor pagination

Pagination uses cursor; there is no offset parameter. A cursor is emitted whenever the current page contains exactly limit rows. The API does not fetch an extra row to prove another page exists, so a full final page can produce a cursor whose next request returns an empty data array. Continue until data is empty or next_cursor is absent: