Формат ошибки
Любая ошибка — статус HTTP и один и тот же конверт:code— машиночитаемый код. Ветвитесь по нему, а не по статусу и не по тексту.message— текст для логов на языке изAccept-Language. Клиенту его не показывайте: формулировки меняются.fields— поле и причина уVALIDATION_ERROR; у остальных ошибокnull.
code трактуйте как обычный отказ: список кодов пополняется без смены версии.
Исключение — запрос на несуществующий путь или неподдерживаемый метод: он отвечает 404 или 405 с телом {"detail": …} без конверта. Это ошибка в адресе запроса, а не ответ API, — сверьте путь и метод со списком эндпоинтов.
Коды
«—» в последней колонке — повтор того же запроса ничего не изменит.
Что безопасно повторять
GET— всегда.POST /payments— с тем жеIdempotency-Key: второй счёт не выставится.POST …/trialпосле503— пробный период не выдан, повтор безопасен.POST …/rotate-linkпосле503— ссылка не сменилась, пауза в час не началась.
Лимиты
Retry-After — пауза в секундах. Лимиты защищают от зациклившегося скрипта; если для вашего объёма их мало — напишите менеджеру.
Версии
Версия — в пути:/api/partner/v1. Внутри версии добавляются новые поля в ответах, новые необязательные поля в запросах, новые коды ошибок и новые типы событий — код интеграции не должен на них ломаться: незнакомое поле пропускайте, незнакомый код ошибки трактуйте как обычный отказ, на незнакомое событие отвечайте 2xx. Удаление и переименование — только в новой версии пути (/v2).
