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

# Errors and rate limits

> Status codes the Export API returns, the error body shape, and the request budget.

## Error shape

Every failure returns a JSON body with a single `error` field:

```json theme={null}
{ "error": "Missing required parameter: brandId" }
```

## Status codes

| Code | Meaning | What to do |
| - | - | - |
| `200` | Success | — |
| `400` | A parameter is missing or malformed | Check `brandId` is present and that dates parse as `YYYY-MM-DD` |
| `401` | The key is missing, unknown, revoked, expired, or is not an export key | Confirm you are sending `X-API-Key` and that the key is an export key, not an MCP key |
| `404` | The brand is not in this key's organization | Re-read `/brands` with this key — the id may belong to another organization |
| `429` | Rate limit exceeded | Back off and retry |
| `500` | Something failed on our side | Retry with backoff; if it persists, contact support |

<Note>
  A brand outside your organization returns `404` rather than `403`. Whether an id exists somewhere else in 3RD is not something a key is entitled to learn, so the two cases are deliberately indistinguishable.
</Note>

## Rate limit

**100 requests per minute.** At 1,000 rows per page that is up to 100,000 rows a minute, which is far more than a daily sync needs.

The budget is counted per calling host, not per API key, so several integrations running from the same server share it.

On `429`, back off and retry. Exponential backoff starting around a second, with jitter, is enough — the window is one minute, so a retry after the window resets always succeeds.

## Writing a resilient sync

* **Retry `429` and `5xx`; do not retry `400`, `401`, or `404`.** Those mean the request itself is wrong and will fail identically forever.
* **Do not treat a short result as an error.** A brand with no data for a period returns `200` with an empty `data` array.
* **Watch for `null`.** `brand_mentioned` on `/citations` is `null` when the page was never scraped, or blocks our crawler. That is not the same as `false`, and charting it as `false` overstates the negative case.
* **Log `meta.plan` and `meta.fromDate`.** When a sync suddenly returns fewer days than yesterday, a plan change is the usual cause.

## Related

* [Authentication](/api-reference/authentication)
* [Pagination and history](/api-reference/pagination)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.