Skip to main content
Errors use error.code, a readable message, request_id, and field-level details when applicable. No stack traces or provider payloads are part of an error. The default rate budget is 60 requests per minute per company, shared across keys and server instances. A throttled request returns 429 with Retry-After; retain already fetched pages and retry the same cursor after that interval.

Retry without duplicating records

For 429, wait at least Retry-After seconds. For a transient 500 or network failure, use bounded exponential backoff and retry the same request. Keep already fetched pages and upsert records by their documented identities. If retries are exhausted, record the unfinished query and cursor so you can resume it. A financial result outside the supported integer range also returns 500. Repeating that unchanged query cannot recover it: narrow the scope where possible or contact support with the request ID. See Job profitability.

Diagnose a rejected query

A 400 is not a retry signal. Check required dates, supported filters, repeated scalar parameters, and whether your cursor belongs to this company, endpoint, and filter set. Restart without a cursor if you intentionally change the query. A 404 does not distinguish an unknown ID from a record outside your company.