> Docs index: https://convertextrato.com/llms.txt

# Errors


## Format

Errors use standard HTTP status codes. The body holds a stable `code` and a human-readable `message`:

```json
{
  "error": {
    "code": "PERMISSION_DENIED",
    "message": "This API key lacks the jobs:write permission."
  }
}
```

Branch on `code`, not on `message`. Messages can change.

## Codes

| Status | Code                       | Meaning                                                                                  |
| ------ | -------------------------- | ---------------------------------------------------------------------------------------- |
| 400    | `INVALID_BODY`             | The body is not `multipart/form-data`.                                                   |
| 400    | `INVALID_MODE`             | `mode` is not `smart` or `simple`.                                                       |
| 400    | `NO_FILES_PROVIDED`        | The request has no `files` field.                                                        |
| 400    | `INVALID_FILE_TYPE`        | A file is not a PDF, JPEG, PNG or WebP.                                                  |
| 400    | `FILE_SIZE_EXCEEDED`       | A file is larger than 10 MB.                                                             |
| 400    | `FILE_PAGE_LIMIT_EXCEEDED` | A file has more pages than the plan allows per file.                                     |
| 400    | `INVALID_LIMIT`            | `limit` is not an integer from 1 to 100.                                                 |
| 400    | `INVALID_CURSOR`           | `cursor` is not a value returned by the API.                                             |
| 401    | `INVALID_API_KEY`          | The API key is missing, invalid, revoked or expired.                                     |
| 402    | `PLAN_REQUIRED`            | The account owner's plan does not include API access.                                    |
| 402    | `QUOTA_EXCEEDED`           | The Job has more pages than remain in this month's plan.                                 |
| 403    | `PERMISSION_DENIED`        | The API key lacks the permission the endpoint needs.                                     |
| 404    | `JOB_NOT_FOUND`            | No Job with this id exists for your account.                                             |
| 404    | `STATEMENT_FILE_NOT_FOUND` | The Job has no Statement File with this id.                                              |
| 404    | `NOT_FOUND`                | No endpoint at this path under `/v1/jobs/`. Other unknown paths return a plain-text 404. |
| 409    | `DUPLICATE_FILE`           | This file was already converted with this account. List Jobs to find it.                 |
| 409    | `JOB_IN_PROGRESS`          | The Job is still running and cannot be deleted yet.                                      |
| 429    | `RATE_LIMITED`             | Too many requests. Wait for the seconds in `Retry-After`.                                |

## Retries

Retry `429` after `Retry-After` seconds, and `5xx` with exponential backoff. Do not retry other `4xx` errors without changing the request.
