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

# Errors

> Every error has the same shape. Branch on code.

Every error has the same shape. Branch on `code`; the `message` is for humans.

```json error theme={null}
{ "error": { "code": "image_too_small", "message": "This image is too small to check reliably (200×300). Try a copy at least 256 px on its shorter side." } }
```

| code | HTTP | When |
| - | - | - |
| `bad_request` | 400 | Malformed body, no image field, invalid base64, a store value other than true/false, or a batch outside 1–8 images. |
| `url_fetch_failed` | 400 | `image_url` couldn't be fetched: not http(s), a non-standard port, a private address, a non-200 response, or too many redirects. |
| `unauthorized` | 401 | Missing, invalid or revoked API key. |
| `plan_required` | 403 | The key's plan has no API access, or the endpoint needs a higher plan (batch is API Growth and above). |
| `image_too_large` | 413 | Image over 20 MB, or a batch over 25 MB in total. |
| `unsupported_format` | 415 | HEIC/HEIF, a file that isn't an image, or one the detector couldn't decode. |
| `image_too_small` | 422 | Shorter side under 256 px. Refused rather than judged; not metered. |
| `image_too_compressed` | 422 | JPEG quality below about 50. Refused rather than judged; not metered. |
| `content_refused` | 422 | The image can't be checked. Not metered. Don't retry the same image. |
| `quota_exceeded` | 429 | This month's allowance is used up (or a batch needs more checks than are left). Resets on the 1st (UTC); upgrade for more. |
| `rate_limited` | 429 | More than 10 requests per second on one key (burst of 10). |
| `model_warming` | 503 | The detector is starting up after a quiet spell. Retry after `retry_after_s` (also sent as `Retry-After`). Not metered. |
| `safety_check_unavailable` | 503 | A pre-check couldn't run, so the image wasn't checked. Retry after `retry_after_s` (also sent as `Retry-After`). Not metered. |
| `upstream_error` | 502 | The detector failed. Safe to retry with backoff. Not metered. |
| `internal` | 500 | Unexpected error on our side. Not metered. |

See [Limits and retries](/limits) for which errors to retry.


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