# Errors

Every error the Assyro public data API returns: the JSON envelope, the HTTP status, and whether a retry can help.

Source: https://www.assyro.com/docs/errors

> **Note:** Preview: `api.assyro.com` is not serving production data yet. Requests and responses on this page follow the published contract and may change before launch.

Every error has the same shape. `code` is stable and safe to branch on; `message` is for people; `retryable` says whether sending the same request again can succeed; `requestId` (a UUID) identifies the request if you contact us.

### Error envelope

JSON:

```json
{
  "version": 1,
  "error": {
    "code": "rate_limited",
    "message": "Public data requests are temporarily limited",
    "retryable": true,
    "requestId": "3f6b1c2e-8a4d-4e5f-9b7a-1c2d3e4f5a6b"
  }
}
```

## Codes

**Error codes**

| Code | Status | Retryable | Meaning |
|---|---|---|---|
| `invalid_request` | 400 | No | The body is not a valid request: malformed JSON, an unknown field, a missing field, or a credential sent to the anonymous endpoint. |
| `unknown_operation` | 400 | No | The `operation` names no known operation. |
| `unsupported_filter` | 400 | No | A filter value the operation does not support. |
| `invalid_cursor` | 400 | No | The cursor is not one this operation issued, or the filters changed. |
| `record_not_found` | 404 | No | No record has that identifier. |
| `cursor_expired` | 409 | No | The cursor is too old; start the list again. |
| `request_too_large` | 413 | No | The body is over 64 KiB. |
| `rate_limited` | 429 | Yes | Too many requests; wait and retry. |
| `invalid_origin_response` | 502 | No | The source returned a response that failed validation. |
| `corpus_unavailable` | 503 | Yes | The database behind this operation is unavailable or not yet served. |
| `origin_not_configured` | 503 | No | The service behind this operation is not configured. |
| `origin_timeout` | 504 | Yes | The source did not answer in time. |
