> ## Documentation Index
> Fetch the complete documentation index at: https://developers.getbreezyapp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors and rate limits

> Handle validation failures, throttling, and retries without losing fetched pages.

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.

| Status | Client action                                                                                  |
| ------ | ---------------------------------------------------------------------------------------------- |
| 400    | Correct invalid input or restart with the original query if the cursor is invalid.             |
| 401    | Supply a valid key. Expired keys or inactive/mismatched linked identities cannot authenticate. |
| 404    | The detail resource is unavailable within this company.                                        |
| 405    | Use GET; write methods are unsupported.                                                        |
| 429    | Wait the `Retry-After` seconds, then retry the same request with backoff.                      |
| 500    | Retry with bounded backoff; share `request_id` with support if it persists.                    |

## 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](/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.
