Ошибки API: HTTP-коды

Справочник HTTP-кодов ошибок API — значения, причины, решения. Форматы ответов для OMNI API, Broadcasts API и Recipients API

Коротко: API возвращает HTTP-коды. Каждый код показывает, что произошло. Формат тела ошибки отличается для разных API — смотрите таблицы ниже.

Кому подходит

  • Роль: Разработчик, Интегратор
  • Уровень: Опытный

Симптом

API возвращает код, отличный от ожидаемого, и вы не понимаете, что произошло.

Два формата ответа с ошибкой

Формат ошибки зависит от API. Не ищите поле error в ответах Broadcasts API и Recipients API — там его нет.

Используется в эндпоинтах /api/v1/messages, /api/v1/omnimessages, /api/v1/senders, /api/v1/channels, /api/v1/balance, /api/v1/edrs, /api/v1/templates, /api/v1/wa_templates.

ПолеТипЧто означает
errorbooleantrue — запрос завершился ошибкой
data.messagestringТекст ошибки
data.requestIdstringID запроса для обращения в поддержку

Пример:

{
  "error": true,
  "data": {
    "message": "something went wrong",
    "requestId": "af8c5065-5849-455b-ae1a-6a0b9f4b7209"
  }
}

Быстрый справочник кодов

Набор кодов зависит от эндпоинта. Полный список для каждого метода — в Swagger UI вашего сервиса.

КодЗначениеКатегория
200OKУспех
202AcceptedУспех
204No ContentУспех
400Bad RequestОшибка клиента
401UnauthorizedОшибка авторизации
403ForbiddenОшибка прав
404Not FoundРесурс не найден
409ConflictКонфликт данных
422Unprocessable EntityНевалидные данные
429Too Many RequestsПревышен лимит
500Internal Server ErrorОшибка сервера
502Bad GatewayОшибка шлюза
503Service UnavailableСервис недоступен

Описание кодов и решения

200 OK — запрос обработан успешно. Тело содержит результат.

202 Accepted — запрос принят. Используется в OMNI API: сообщение поставлено в очередь на отправку.

Статус доставки можно получить двумя способами:

  • Push — платформа сама отправит статус на ваш вебхук, когда сообщение изменит состояние.
  • Pull — вы запрашиваете статусы самостоятельно через эндпоинт GET /edrs.

О способах получения статусов для вашего сервиса:

204 No Content — запрос выполнен, но тело пустое. Используется при удалении — шаблоны рассылок, атрибуты, получатели.

Что значит: неверные параметры запроса.

Решение:

  1. Проверьте формат JSON — нет ли лишних запятых или кавычек.
  2. Проверьте обязательные поля: contact, channel, senderId, phoneNumber, type.
  3. Проверьте типы значений — числа не в кавычках, строки в кавычках.
  4. Проверьте формат номера телефона — с кодом страны, без «+».

Частые сообщения:

  • Phone number can't be null or empty
  • Recipient type can't be null
  • Selected filter's attributes don't exist.

Обработка ошибок API →

Что значит: неверный или отсутствующий API-ключ.

Решение:

  1. Проверьте, что заголовок X-API-Key передан в запросе.
  2. Проверьте, что ключ активен и не удалён.
  3. Проверьте, что ключ от нужного сервиса — ключ от OTP не работает на Multi API.
  4. Если старый ключ удалён — создайте новый.

Ошибка 401 и 403 →

Что значит: у ключа нет нужного права (scope).

Решение:

  1. Откройте настройки ключа в разделе API Подключения.
  2. Проверьте список scopes.
  3. Добавьте нужный scope: omni-api, statistics, recipients, broadcasts, dids, crm.
  4. Сохраните изменения.

Ошибка 401 и 403 →

Что значит: неверный URL или несуществующий ID.

Решение:

  1. Проверьте базовый URL вашего сервиса — web.otpcod.ru, web.multiapi.ru, web.mydialogi.ru.
  2. Проверьте ID ресурса: шаблона, получателя, рассылки.
  3. Проверьте метод запроса (GET, POST, PUT, DELETE).

Что значит: конфликт данных — например, попытка создать дубликат.

Решение:

  1. Проверьте, не создан ли уже такой ресурс.
  2. Используйте уникальные идентификаторы.
  3. Если конфликт по email — используйте номер телефона (он уникален).

Что значит: данные не прошли валидацию.

Решение:

  1. Проверьте формат email.
  2. Проверьте формат номера телефона.
  3. Проверьте длину полей — не превышены ли лимиты.
  4. Проверьте, что значения соответствуют допустимым — например, type только ENRICH, NOT_IMPORT или OVERWRITE.

Что значит: превышен лимит запросов.

Решение:

  1. Уменьшите частоту запросов.
  2. Используйте очереди.
  3. Обратитесь в поддержку, если лимит критично низкий.

Ошибка 429 →

Что значит: ошибка на стороне сервера.

Решение:

  1. Повторите запрос через 30 секунд.
  2. Сохраните requestId (OMNI API) или execId (Broadcasts и Recipients).
  3. Если ошибка повторяется — обратитесь в поддержку с этими идентификаторами.

Что значит: ошибка шлюза между сервисами.

Решение:

  1. Повторите запрос через 10–30 секунд.
  2. Если повторяется — обратитесь в поддержку.

Что значит: сервис временно недоступен — идут технические работы или перегрузка.

Решение:

  1. Подождите 1–2 минуты.
  2. Повторите запрос.
  3. Если не помогает — обратитесь в поддержку.

Как узнать requestId или execId

Сохраняйте эти идентификаторы при любой ошибке — они помогут поддержке быстрее найти проблему.

APIПолеГде в ответе
OMNI APIrequestIdВ data объекта ответа
Broadcasts APIexecIdВ корне объекта ответа
Recipients APIexecIdВ корне объекта ответа

Пример для OMNI API:

{
  "error": true,
  "data": {
    "message": "something went wrong",
    "requestId": "af8c5065-5849-455b-ae1a-6a0b9f4b7209"
  }
}

См. также

Обработка ошибок API

Форматы ошибок для каждого API

Ошибка 401 и 403

Что делать при ошибках авторизации

Ошибка 429

Что делать при превышении лимита

Контакты поддержки

Куда обращаться по сервисам

Нужна помощь?