Перейти к содержимому

Статус и поддержка

Почти каждый заявленный сбой — одно из пяти, и у каждого различимая сигнатура:

СимптомВероятная причинаКуда смотреть
401 unauthorized на вызове, который вчера работалКлюч сменён, отключён или заголовок отсутствует на одном из путей кодаАутентификация
402 insufficient_balanceБаланс ниже резерва для этой отправкиАккаунт и баланс
Один запрос возвращает 200, но ничего не списаноВся комбинация не удалась; HTTP-статус — не результатБиллинг и возвраты
Один и тот же запрос успешен и неуспешен попеременноОграничение скорости или Idempotency-Key, переиспользуемый для разных полезных нагрузокЛимиты запросов, Идемпотентность
Пакетная задача висит в processing, и last_progress_at перестаёт двигатьсяЗадача действительно зависла, а не просто медленнаяСтатус задачи

Случай с last_progress_at стоит сказать прямо: сигнал сбоя — не прошедшее время, а остановившаяся метка времени. Задача на 500,000 строк может законно выполняться долго. Задача, у которой last_progress_at не двигается, — это задача для эскалации.

Каждое поле ниже возвращается API, а значит, приложить их ничего не стоит и экономит один обмен:

ПриложитьОткуда берётся
request_idКаждый ответ realtime, включая сбои, вернувшие тело
task_idКаждая пакетная отправка и каждый ответ о статусе задачи
api_key_idGET /v1/api-key — идентифицирует ключ, не раскрывая его
Точный HTTP-статус и тело ответаВаши собственные логи; в особенности поле code
Метка времени UTC с секундамиВаши собственные логи
Отправленный вами запрос со скрытым ключомВаш собственный код

Никогда не вставляйте API-ключ в обращение в поддержку. api_key_id идентифицирует ключ, а сам ключ даёт доступ к вашему балансу.

Уведомления уровня аккаунта — плановое обслуживание, деградация ёмкости — появляются в консоли, где также находятся баланс и записи. Теми же условиями API делится с вашей интеграцией напрямую, в виде кодов ошибок, а не прозы:

КодЧто это значит для работающей интеграции
detection_capacity_unavailableСейчас нет ёмкости. Отступите и повторите; ничего не списано.
realtime_route_unavailableНет доступного маршрута realtime. Отступите и повторите.
realtime_rate_limiter_unavailableСам лимитер недоступен, поэтому допуск нельзя решить. Повторите позже.
realtime_fact_cache_unavailableЗависимость realtime недоступна. Повторите позже.

Это 503, и все они в группе «подождать и повторить» — полную группировку, включая то, какие сбои безопасно повторять с тем же Idempotency-Key, см. в Кодах ошибок.

Два операционных факта проверяемы извне, и их стоит знать до того, как вы заведёте инцидент:

  • API обслуживается через Cloudflare, поэтому сетевой путь и терминирование TLS обеспечивает Cloudflare, а не один исходный хост.
  • Каждый ответ несёт X-RateLimit-Remaining, поэтому клиент, логирующий заголовки ответа, может отличить «ограничен собственным лимитом» от «сервис недоступен», никого не спрашивая. Группы general и detection также несут X-RateLimit-Limit в каждом ответе; realtime — нет, потому что тратит token bucket, а не фиксированный потолок в минуту.
  • Коды ошибок — группы повторов, самая быстрая таблица для триажа
  • Безопасность — обращение с ключом, смена ключа и что никогда не отправлять