Операции · 2026-09-01 · HippoAPI Documentation Team

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

Классифицируйте сбои API, собирайте полезные данные и повторяйте только временные запросы, которые можно безопасно повторить.

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

В ответах, отличных от 2xx, используется объект ошибки с удобочитаемым сообщением и может включать тип, код или идентификатор запроса. Рассматривайте статус HTTP как первый сигнал классификации и сохраняйте идентификатор запроса, если он присутствует.

{
  "error": {
    "message": "Error description (request id: ...)",
    "type": "new_api_error",
    "code": ""
  }
}

Коды состояния и действия

StatusЗначениеДействие приложения
400Неверный запрос, модель, поле или неподдерживаемый параметр.Исправьте запрос. Не повторяйте одно и то же тело без изменений.
401Ключ API отсутствует, имеет неверный формат, срок действия истек, отключен или недействителен.Исправьте или поверните ключ. Не повторяйте попытку автоматически.
403Учетная запись, ключ, IP-адрес, группа или модель не разрешены.Просмотрите элементы управления доступом и доступность модели.
402Баланса или квоты недостаточно.Прежде чем отправлять дополнительные запросы, проверьте кошелек и квоту ключей.
404Конечная точка или ресурс модели не найдены.Проверьте базовый URL-адрес, путь к конечной точке и точный идентификатор модели.
429Текущая частота запросов или параллелизм слишком высоки.Откажитесь от джиттера и уменьшите параллелизм.
5xxСбой платформы или вышестоящего поставщика.Повторите безопасные запросы со строгим лимитом попыток; сохраните идентификатор запроса.

Используйте ограниченную экспоненциальную отсрочку

Повторять только ошибки, которые могут быть временными: сбои подключения, HTTP 429 и выбранные ответы 5xx. Добавьте случайное дрожание, чтобы многие рабочие процессы не повторяли попытку одновременно. Установите максимальное количество попыток и общий срок.

const delaysMs = [500, 1000, 2000]

for (let attempt = 0; attempt <= delaysMs.length; attempt++) {
  try {
    return await callHippoAPI()
  } catch (error) {
    const status = error?.status
    const retryable = status === 429 || (status >= 500 && status < 600)
    if (!retryable || attempt === delaysMs.length) throw error
    const jitter = Math.floor(Math.random() * 250)
    await new Promise((resolve) => setTimeout(resolve, delaysMs[attempt] + jitter))
  }
}

Регистрируйте доказательства без регистрации секретов

Не регистрируйте заголовки Authorization, полные ключи API или полные запросы, содержащие личные, конфиденциальные или регулируемые данные. Отредактируйте их перед отправкой ошибок в инструменты наблюдения.

  • Временная метка UTC и идентификатор трассировки приложения.
  • Идентификатор запроса HippoAPI, если он присутствует.
  • Метод HTTP и путь к конечной точке.
  • Идентификатор модели, код состояния, продолжительность и повторная попытка.
  • Отредактированная сводка ошибок.

Прежде чем обращаться в службу поддержки

Воспроизведите проблему с наименьшим безопасным запросом, убедитесь, что модель отображается в GET/v1/models, и проверьте журналы использования. Затем предоставьте метку времени, конечную точку, модель, статус HTTP, идентификатор запроса и отредактированную сводку запроса на адрес [email protected].

Не указывайте свой ключ API. Если вы уже поделились или раскрыли его, отзовите его, прежде чем продолжить расследование.