У перевозчиков независимые сбои
В одном расчёте Почта России может ответить, ПЭК вернуть тариф, а другая служба превысить таймаут. Ожидать успешного ответа от всех служб как единственного корректного исхода — значит скрывать уже полученные варианты доставки.
Доставометр обращается к службам параллельно и возвращает доступные тарифы вместе с причинами недоступности остальных.
rates и unavailable решают разные задачи
rates — то, что можно показать пользователю как предварительное предложение. unavailable — диагностика по конкретным службам. Непустой unavailable не делает непустой rates ошибочным.
Не показывайте техническое сообщение покупателю
На checkout достаточно «Тариф этой службы временно недоступен». Внутри интеграции сохраните код причины и request_id. Не выдавайте внутренние детали перевозчика в клиентском интерфейсе.
Когда списывается запрос
Частичный успех с доступным тарифом стоит один запрос. Если все службы завершились технической ошибкой, резерв возвращается. Если корректный расчёт выполнен, но тарифов для направления нет, запрос списывается: служба обработала параметры и дала содержательный пустой результат.
Повторяйте только нужное
Ошибку 422 нужно исправлять, а не повторять с задержкой. Для 429 следуйте Retry-After. После сетевого сбоя используйте прежний Idempotency-Key и то же тело: это одна операция, а не новый расчёт.
Не сортируйте неизвестный срок как ноль
Если дни неизвестны, сортируйте такие варианты отдельно либо только по цене. Нулевой срок создаёт ложное обещание мгновенной доставки.
Коды ошибок и правила повторов описаны в документации. Публичная страница статуса помогает оценить последние проверки служб, но не заменяет обработку конкретного ответа.