Ошибки 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.
| Поле | Тип | Что означает |
|---|---|---|
error | boolean | true — запрос завершился ошибкой |
data.message | string | Текст ошибки |
data.requestId | string | ID запроса для обращения в поддержку |
Пример:
{
"error": true,
"data": {
"message": "something went wrong",
"requestId": "af8c5065-5849-455b-ae1a-6a0b9f4b7209"
}
}Быстрый справочник кодов
Набор кодов зависит от эндпоинта. Полный список для каждого метода — в Swagger UI вашего сервиса.
| Код | Значение | Категория |
|---|---|---|
| 200 | OK | Успех |
| 202 | Accepted | Успех |
| 204 | No Content | Успех |
| 400 | Bad Request | Ошибка клиента |
| 401 | Unauthorized | Ошибка авторизации |
| 403 | Forbidden | Ошибка прав |
| 404 | Not Found | Ресурс не найден |
| 409 | Conflict | Конфликт данных |
| 422 | Unprocessable Entity | Невалидные данные |
| 429 | Too Many Requests | Превышен лимит |
| 500 | Internal Server Error | Ошибка сервера |
| 502 | Bad Gateway | Ошибка шлюза |
| 503 | Service Unavailable | Сервис недоступен |
Описание кодов и решения
200 OK — запрос обработан успешно. Тело содержит результат.
202 Accepted — запрос принят. Используется в OMNI API: сообщение поставлено в очередь на отправку.
Статус доставки можно получить двумя способами:
- Push — платформа сама отправит статус на ваш вебхук, когда сообщение изменит состояние.
- Pull — вы запрашиваете статусы самостоятельно через эндпоинт
GET /edrs.
О способах получения статусов для вашего сервиса:
204 No Content — запрос выполнен, но тело пустое. Используется при удалении — шаблоны рассылок, атрибуты, получатели.
Что значит: неверные параметры запроса.
Решение:
- Проверьте формат JSON — нет ли лишних запятых или кавычек.
- Проверьте обязательные поля:
contact,channel,senderId,phoneNumber,type. - Проверьте типы значений — числа не в кавычках, строки в кавычках.
- Проверьте формат номера телефона — с кодом страны, без «+».
Частые сообщения:
Phone number can't be null or emptyRecipient type can't be nullSelected filter's attributes don't exist.
Что значит: неверный или отсутствующий API-ключ.
Решение:
- Проверьте, что заголовок
X-API-Keyпередан в запросе. - Проверьте, что ключ активен и не удалён.
- Проверьте, что ключ от нужного сервиса — ключ от OTP не работает на Multi API.
- Если старый ключ удалён — создайте новый.
Что значит: у ключа нет нужного права (scope).
Решение:
- Откройте настройки ключа в разделе API Подключения.
- Проверьте список scopes.
- Добавьте нужный scope:
omni-api,statistics,recipients,broadcasts,dids,crm. - Сохраните изменения.
Что значит: неверный URL или несуществующий ID.
Решение:
- Проверьте базовый URL вашего сервиса —
web.otpcod.ru,web.multiapi.ru,web.mydialogi.ru. - Проверьте ID ресурса: шаблона, получателя, рассылки.
- Проверьте метод запроса (GET, POST, PUT, DELETE).
Что значит: конфликт данных — например, попытка создать дубликат.
Решение:
- Проверьте, не создан ли уже такой ресурс.
- Используйте уникальные идентификаторы.
- Если конфликт по email — используйте номер телефона (он уникален).
Что значит: данные не прошли валидацию.
Решение:
- Проверьте формат email.
- Проверьте формат номера телефона.
- Проверьте длину полей — не превышены ли лимиты.
- Проверьте, что значения соответствуют допустимым — например,
typeтолькоENRICH,NOT_IMPORTилиOVERWRITE.
Что значит: превышен лимит запросов.
Решение:
- Уменьшите частоту запросов.
- Используйте очереди.
- Обратитесь в поддержку, если лимит критично низкий.
Что значит: ошибка на стороне сервера.
Решение:
- Повторите запрос через 30 секунд.
- Сохраните
requestId(OMNI API) илиexecId(Broadcasts и Recipients). - Если ошибка повторяется — обратитесь в поддержку с этими идентификаторами.
Что значит: ошибка шлюза между сервисами.
Решение:
- Повторите запрос через 10–30 секунд.
- Если повторяется — обратитесь в поддержку.
Что значит: сервис временно недоступен — идут технические работы или перегрузка.
Решение:
- Подождите 1–2 минуты.
- Повторите запрос.
- Если не помогает — обратитесь в поддержку.
Как узнать requestId или execId
Сохраняйте эти идентификаторы при любой ошибке — они помогут поддержке быстрее найти проблему.
| API | Поле | Где в ответе |
|---|---|---|
| OMNI API | requestId | В data объекта ответа |
| Broadcasts API | execId | В корне объекта ответа |
| Recipients API | execId | В корне объекта ответа |
Пример для OMNI API:
{
"error": true,
"data": {
"message": "something went wrong",
"requestId": "af8c5065-5849-455b-ae1a-6a0b9f4b7209"
}
}
См. также
Нужна помощь?
- OTP-коды: support@otpcod.ru
- Multi API: support@multiapi.ru
- Мой диалог: support@mydialogi.ru