Необходимые cookie-файлы нужны для работы сайта. Аналитические cookie (Яндекс Метрика) — только с вашего согласия. Политика cookie-файлов

Тема оформления
Инструкции

Обработка ошибок и повторов

Как читать ошибки в формате problem+json, какие коды стоит повторять и как использовать Idempotency-Key.

Формат ошибки

Любая ошибка API возвращается как application/problem+json (RFC 9457), полностью — ниже весь набор полей, а не только самые полезные:

JSON
{
  "type": "https://docs.typizer.ru/errors/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "detail": "schema: total is required",
  "code": "invalid_request",
  "param": "schema",
  "request_id": "req_…",
  "doc_url": "https://docs.typizer.ru/errors/invalid_request"
}
  • code — машиночитаемый код (см. таблицу ниже и «Коды ошибок»);
  • type и doc_url — одна и та же ссылка на страницу этого кода, https://docs.typizer.ru/errors/<code>; открывайте её прямо из кода, если нужно разобраться в причине;
  • title/status — короткое название и HTTP-статус (по-английски, как того требует RFC 9457); detail — человекочитаемое описание конкретного случая (может быть на английском же, если не задано точнее);
  • param, если есть, — какое поле запроса виновато;
  • request_id — приложите его в обращение в поддержку (support@typizer.ru), если ошибка кажется внутренней.

Что стоит повторять

КодПовторять?
rate_limitedда — после Retry-After, см. «Лимиты»
upstream_unavailableда — внешний сервис недоступен, обычно временно
internal_errorда — внутренняя ошибка, не связанная с вашим запросом
idempotency_conflict из-за ещё не завершённого исходного запросада — чуть позже, с тем же Idempotency-Key (см. ниже)
conflict при экспорте пакета, пока он ещё обрабатываетсяда — после завершения пакета
остальные случаи (invalid_request, invalid_schema, unauthorized, forbidden, not_found, insufficient_balance, idempotency_conflict из-за другого тела запроса…)нет — повтор того же запроса даст ту же ошибку, сначала исправьте причину (для idempotency_conflict — используйте новый Idempotency-Key)

Полная таблица со статусами HTTP — «Коды ошибок». При сетевой ошибке без ответа (таймаут, обрыв соединения) безопасно повторить запрос с тем же Idempotency-Key — см. ниже.

Idempotency-Key: безопасные повторы

Заголовок Idempotency-Key — ваш собственный идентификатор запроса (1–255 печатных ASCII-символов, например uuid4), который делает повтор безопасным:

  • повтор с тем же ключом и тем же телом запроса в течение 24 часов возвращает результат первого запроса (с заголовком Idempotent-Replayed: true), ничего не создавая и не тарифицируя повторно;
  • тот же ключ, тем же телом, но исходный запрос ещё обрабатывается — тоже 409 idempotency_conflict, но временно: повторите чуть позже с тем же ключом, когда исходный запрос завершится, ответ станет обычным повтором-replay;
  • тот же ключ с другим телом запроса — тоже 409 idempotency_conflict, но уже не временно: заведите новый ключ для этого, другого запроса, повтор с тем же ключом ошибку не исправит;
  • если резервирование страниц под запрос не удалось (402 или иная ошибка до создания ресурса), ключ освобождается — его можно использовать повторно для следующей попытки того же запроса;
  • на демонстрационных прогонах (POST /v1/demo/runs) и согласиях (consents) заголовок принимается, но игнорируется — там нет риска двойного списания.

Отправляйте Idempotency-Key на:

  • POST /v1/extract;
  • POST /v1/typizers/{id}/runs;
  • POST /v1/batches;
  • POST /v1/runs/{id}/retry.

В MCP у инструмента extract то же назначение выполняет аргумент idempotency_key — подробнее в справочнике MCP.

Примечание:

Генерируйте новый Idempotency-Key на каждый новый, логически отдельный запрос — не используйте один и тот же ключ для разных документов. Примеры в этой документации берут его случайным при каждом вызове (randomUUID()/uuid.uuid4()/uuidgen) — см. «Первый вызов API».

Плановые работы

Во время объявленного или идущего технического обслуживания (и 24 часа до его начала) ответы /v1/* и /mcp несут заголовок Typizer-Maintenance: <mnt_id>; starts=<ISO-время>; ends=<ISO-время>. GET /v1/status отдаёт список текущих и ещё не завершённых запланированных событий — это не история прошедших работ, а то, что идёт или только предстоит. Публичная страница состояния сервиса появится на status.typizer.ru позже; Typizer-Maintenance и GET /v1/status доступны уже сейчас и не требуют авторизации.

Что дальше