# Ошибки

Ошибки уровня приложения возвращаются как **RFC 7807 Problem Details** с
`Content-Type: application/problem+json`:

```json
{
  "type": "about:blank",
  "title": "Case ID not found",
  "status": 404,
  "detail": "No case exists for the given ID.",
  "instance": "/api/v1/upload-service/job-status/7c2f1e4a-…"
}
```

| Поле | Описание |
| --- | --- |
| `type` | URI, идентифицирующий тип проблемы, или `about:blank`. |
| `title` | Краткое, понятное человеку резюме. |
| `status` | HTTP-код статуса, повторённый в теле. |
| `detail` | Понятное человеку объяснение для данного случая. |
| `instance` | Путь запроса, который вызвал ошибку. |

Некоторые проблемы добавляют дополнительные поля. Например, `413` несёт настроенные лимиты:

```json
{
  "type": "https://accessful.de/problems/upload/payload-too-large",
  "title": "Payload Too Large",
  "status": 413,
  "detail": "Maximum upload size exceeded.",
  "maxFileSize": "200MB",
  "maxRequestSize": "815MB",
  "maxFileCount": "1000",
  "limitExceeded": "per-file"
}
```

## Распространённые коды статуса

| Статус | Когда |
| --- | --- |
| `400 Bad Request` | Некорректный ввод — недопустимый URL вебхука, файл не в формате PDF или некорректное тело запроса. |
| `401 Unauthorized` | Отсутствующий, неверный или отозванный API-ключ. |
| `403 Forbidden` | Действительный ключ без прав на действие. |
| `404 Not Found` | Неизвестный или некорректный `caseId`, либо результат пока недоступен. |
| `409 Conflict` | Запрос конфликтует с текущим состоянием. |
| `413 Payload Too Large` | Файл или запрос превышает [лимиты размера](https://docs.accessful.de/ru/limits/). |
| `500 Internal Server Error` | Непредвиденная ошибка сервера — можно безопасно повторить позже. |

:::note
**401** возникает на gateway (отсутствующий или неверный ключ), прежде чем запрос достигнет
приложения — оно не несёт тело Problem Details; полагайтесь на код статуса. **403** и все остальные ошибки приложения используют тело
Problem Details выше.
:::

:::note[Квота — это не `429`]
Исчерпанная квота по договору **не** возвращает HTTP-ошибку. Загрузки принимаются с `200`,
после чего задача завершается в [статусе](https://docs.accessful.de/ru/reference/api/) `quota_exceeded`. См.
[Лимиты](https://docs.accessful.de/ru/limits/).
:::