Ошибка 422 Unprocessable Content
Что означает HTTP 422 Unprocessable Content, как отличить его от 400, 409 и 415 и как диагностировать семантические ошибки JSON, валидацию полей и бизнес-ограничения API.

HTTP 422 Unprocessable Content означает: сервер понимает тип содержимого запроса, синтаксис содержимого корректен, но выполнить содержащиеся в нём инструкции не может.
Типичный пример — валидный JSON, который успешно парсится, но содержит недопустимое значение: дата окончания раньше даты начала, обязательное поле пустое, идентификатор не соответствует бизнес-правилу или комбинация параметров невозможна.
Главная ошибка при диагностике 422 — искать проблему в сети или JSON-синтаксисе, когда запрос уже дошёл до уровня семантической проверки.
Что означает HTTP 422
{
"start_at": "2026-08-26",
"end_at": "2026-08-20"
}
JSON синтаксически корректен, но правило:
end_at >= start_at
нарушено.
JSON parse → OK
semantic validation → FAIL
→ 422

RFC 9110 описывает 422 именно как случай, когда тип содержимого понятен, синтаксис корректен, но сервер не может обработать инструкции.
400, 409, 415 и 422
| Код | Практический смысл |
|---|---|
400 Bad Request | запрос некорректен в общем смысле, например сломан JSON |
409 Conflict | запрос конфликтует с текущим состоянием ресурса |
415 Unsupported Media Type | сервер не поддерживает указанный media type |
422 Unprocessable Content | синтаксис понятен, но значения или инструкции семантически неприемлемы |
Границы в конкретном API определяет контракт. Важнее последовательность: одинаковая ошибка должна стабильно моделироваться одинаковым кодом и machine-readable reason.
Основные причины 422
Ошибка валидации поля
{
"email": "not-an-email"
}
Нарушение диапазона
{
"quantity": -10
}
Несогласованные поля
{
"min": 100,
"max": 50
}
Невозможная комбинация параметров
Каждое поле отдельно допустимо, но их сочетание нарушает правило домена.
Ссылка на объект, который нельзя использовать в этом контексте
Например, идентификатор существует, но ресурс находится в состоянии, где операция запрещена. В некоторых API это будет 422, в других — 409. Нужно смотреть контракт.
Шаг 1. Сохраните полный HTTP-ответ
curl -i -H 'Content-Type: application/json' --data-binary @request.json https://api.example.com/v1/orders
Полезный ответ API:
{
"error": "validation_failed",
"fields": {
"end_at": "must_not_be_before_start_at"
}
}
Клиенту нужен стабильный machine-readable код. Детальная внутренняя информация при этом не должна раскрывать секреты или структуру БД.
Шаг 2. Убедитесь, что JSON действительно корректен
jq . request.json
Если jq не может разобрать файл, сначала исправьте синтаксис. Такой сценарий ближе к 400, а не к 422.
Шаг 3. Проверьте Content-Type
Content-Type: application/json
Если endpoint ожидает JSON, а клиент отправляет другой media type, более точной ошибкой может быть 415.
Шаг 4. Сократите запрос до минимального
Начните с минимально допустимого payload и добавляйте поля постепенно:
минимальный valid request → success
+ поле A → success
+ поле B → 422

Так можно быстро локализовать конкретное значение или комбинацию.
Шаг 5. Сверьте схему и бизнес-правила
Проверьте:
- required fields;
- типы;
- enum values;
- min/max;
- формат дат;
- timezone;
- взаимозависимые поля;
- состояние связанного ресурса;
- ограничения текущего пользователя.
Не пытайтесь исправить 422 случайным удалением полей: сначала поймите, какое правило нарушено.
Шаг 6. Проверьте client/server version
После релиза frontend может отправлять новое enum value, которое старый backend ещё не понимает.
При rolling deployment возможен неприятный симптом:
backend A → принимает значение
backend B → 422
Тогда одна и та же операция ведёт себя нестабильно.
Шаг 7. Сопоставьте request ID и логи
В логах полезно иметь:
request_id
endpoint
validation_error_code
field
actor
version
Не логируйте пароль, токен или полный чувствительный body только ради расследования.
422 в формах
Для пользовательской формы 422 полезен, если frontend может привязать server-side validation error к конкретному полю.
Например:
{
"errors": [
{
"field": "email",
"code": "already_used"
}
]
}
Но already_used иногда логичнее моделировать 409 — это зависит от контракта ресурса.
422 после изменения бизнес-правила
Если после deployment резко выросло число 422:
- сравните версии клиента и сервера;
- проверьте migrations/reference data;
- проверьте enum;
- проверьте timezone/date parsing;
- проверьте feature flags;
- сравните конкретные validation error codes до и после релиза.
Рост 422 может означать как дефект, так и корректное отклонение новых неправильных данных.
Как проверить исправление
Нужны минимум два сценария:
валидный payload → 200/201/204
невалидный payload → 422 с ожидаемым error code

Если оба запроса после исправления проходят, validation могла быть случайно отключена.
422 и автоматический мониторинг
Нельзя считать любой 422 признаком падения API. Если монитор отправляет заведомо невалидные данные, 422 может быть правильным expected result.
Для проверки работоспособности выбирайте безопасный валидный запрос и проверяйте HTTP status, latency, JSON и бизнес-критерий.
UpWatch можно использовать для регулярной проверки API endpoint, если request и ожидаемый результат соответствуют реальному контракту.
Типичные ошибки
- путать 422 со сломанным JSON;
- исправлять сеть при семантической ошибке;
- отдавать только текст без machine-readable reason;
- возвращать 200 с
{"error": ...}вместо нормального контракта; - отключать validation ради устранения 422;
- считать каждый 422 инцидентом инфраструктуры.
Практический чек-лист
- Подтвердить HTTP 422.
- Сохранить response body.
- Проверить JSON-синтаксис.
- Проверить Content-Type.
- Найти machine-readable reason.
- Сократить payload.
- Сверить схему.
- Проверить бизнес-правила.
- Сравнить версии клиента/backend.
- Сопоставить request ID и logs.
- Проверить valid и invalid сценарии после исправления.
- Не отключать полезную validation.
Источники и спецификации
Частые вопросы
Что означает HTTP 422 Unprocessable Content?
Сервер понимает тип содержимого и его синтаксис корректен, но не может обработать содержащиеся в запросе инструкции из-за семантической ошибки.
Чем 422 отличается от 400?
400 подходит для некорректного запроса в общем смысле. При 422 содержимое уже корректно разобрано, но значения или инструкции неприемлемы.
Чем 422 отличается от 409?
409 описывает конфликт с текущим состоянием ресурса. 422 относится к содержимому запроса, которое синтаксически корректно, но не может быть обработано.
Может ли валидный JSON получить 422?
Да. Это один из типичных сценариев: JSON корректен синтаксически, но нарушает validation или бизнес-правило.
Нужно ли считать любой 422 инцидентом API?
Нет. 422 может быть штатным ответом на невалидные данные. Для мониторинга нужно учитывать контракт конкретного endpoint.
Связанные материалы

Ошибка 400 Bad Request: почему сервер отклоняет запрос
Что означает HTTP 400 Bad Request, какие ошибки запроса вызывают этот код и как по шагам проверить URL, заголовки, cookies, JSON, proxy и логи сервера.

Ошибка 409 Conflict: причины и способы обработки
Что означает HTTP 409 Conflict, почему запрос конфликтует с текущим состоянием ресурса и как диагностировать версии, конкурентные изменения, уникальность и повтор запроса.

Ошибка 413 Payload Too Large
Что означает HTTP 413 Payload Too Large, где ограничивается размер запроса и как диагностировать лимиты CDN, reverse proxy, веб-сервера и приложения без опасного увеличения настроек.

Как проверить API через curl
Практическое руководство по проверке API через curl: GET, POST, JSON, headers, Bearer Token, Basic Auth, HTTP-код, redirect, timeout, TLS и время ответа.

Как мониторить API endpoint
Как выбрать API endpoint для мониторинга и задать критерии успеха: HTTP-код, timeout, JSON, авторизация, безопасный запрос, частота проверки и диагностика сбоев.