REST API v1 · Разработчикам

Ошибки и коды ошибок

Ошибки всегда приходят в JSON: стабильный машиночитаемый код error и понятное человеку сообщение message. Ориентируйтесь на error и HTTP-статус — текст сообщений предназначен для людей и может меняться.

Документация для разработчиков
На этой странице

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

У всех ответов с ошибкой одна форма: { "error": CODE, "message": "…" }. Некоторые коды добавляют поля, которые помогают отреагировать: например, issues (что именно неверно), required (недостающее право), balance, feature или retryAfter.

Ответ · 400
HTTP/1.1 400 Bad Request

{
  "error": "INVALID_REQUEST",
  "message": "Invalid body",
  "issues": [{ "path": "body.amount", "message": "Number must be greater than or equal to 1" }]
}
Ответ · 409
HTTP/1.1 409 Conflict

{ "error": "INSUFFICIENT_FUNDS", "message": "The member does not have enough to remove this amount", "balance": 40 }

В issues каждый path начинается с части запроса, к которой он относится: params., query., body. или header..

Все коды ошибок

У каждого эндпоинта в справочнике API перечислены коды, которые он может вернуть. Полный список:

Коды ошибок
HTTPКодОписание
400INVALID_REQUESTНеверные ID, параметры, заголовки или тело запроса; в issues — что именно не так
400INVALID_JSONТело запроса — невалидный JSON
401UNAUTHORIZEDЗаголовок Authorization отсутствует или имеет неверный формат
401INVALID_API_KEYТакого ключа нет
401API_KEY_REVOKEDКлюч отозван в консоли
401API_KEY_EXPIREDСрок действия ключа истёк
402PLAN_LIMITТариф сервера этого не покрывает: достигнут лимит (limit) или нет нужной возможности (flag)
403BROWSER_REQUESTS_NOT_ALLOWEDЗапрос отправлен из браузера (есть заголовок Origin)
403GUILD_MISMATCHКлюч принадлежит другому серверу
403INSUFFICIENT_SCOPEУ ключа нет нужного права; оно указано в required
403GUILD_BLOCKEDСервер заблокирован в BotGG
403SELF_DECISIONСоздатель API-ключа не может сам решать по своей заявке или апелляции
403MODERATOR_NOT_MEMBERСоздатель API-ключа больше не состоит на сервере (модерация идёт от его имени)
403MODERATOR_MISSING_PERMISSIONУ создателя API-ключа нет нужного права Discord; оно указано в required
403HIERARCHYК цели нельзя применить модерацию; причина — в reason (создатель ключа, бот, владелец или роль не ниже роли создателя или бота)
404NOT_FOUNDНеизвестный эндпоинт
404TICKET_NOT_FOUNDНа сервере нет тикета с таким номером
404TRANSCRIPT_NOT_FOUNDУ тикета нет сохранённой расшифровки (он ещё открыт, расшифровки выключены или удалены)
404APPLICATION_NOT_FOUNDНа сервере нет заявки (или формы) с таким номером или ID
404APPEAL_NOT_FOUNDНа сервере нет апелляции с таким номером
404CASE_NOT_FOUNDНа сервере нет случая модерации с таким номером
404MODERATION_ACTION_NOT_FOUNDДействия модерации с таким ID этим API-ключом не делалось
404BOT_NOT_IN_GUILDBotGG нет на этом сервере
404MEMBER_NOT_FOUNDПользователь не состоит на сервере
404XP_CHANGE_NOT_FOUNDИзменения опыта с таким ID этим API-ключом не делалось
404SHOP_STORE_NOT_FOUNDНа сервере нет магазина с таким ID
404SHOP_ITEM_NOT_FOUNDНа сервере нет товара Магазина с таким ID
404SHOP_PURCHASE_NOT_FOUNDНа сервере нет покупки с таким ID
404GIVEAWAY_NOT_FOUNDНа сервере нет розыгрыша с таким ID
404FLOW_NOT_FOUNDНа сервере нет сценария с таким ID
404FLOW_EXECUTION_NOT_FOUNDНа сервере нет запуска сценария с таким ID
409FEATURE_DISABLEDМодуль, который использует эндпоинт, выключен на сервере; он указан в feature
409BANK_DISABLEDБанк на этом сервере выключен
409INSUFFICIENT_FUNDSНедостаточно средств для списания; в balance — текущий баланс
409SHOP_ITEM_UNAVAILABLEТовар сейчас нельзя купить или выдать; причина — в reason (выключен, магазин закрыт, нет в наличии, лимит, цена изменилась, роли, уровень, роль уже есть)
409SHOP_ALREADY_REFUNDEDПокупка уже возвращена
409SHOP_ITEM_USEDТовар уже использован; верните его с force: true
409ROLE_NOT_GRANTABLEБот не может выдать роль товара (роли нет, она выше бота, слишком опасна или Discord отказал); деньги не списаны
409GIVEAWAY_BAD_STATEСтатус розыгрыша этого не допускает; текущий — в status
409FLOW_NOT_RUNNABLEЗапускать можно только сценарии с ручным триггером или триггером «Вебхук»; триггер — в triggerType
409FLOW_DISABLEDСценарий выключен
409TICKET_CLOSEDТикет уже закрыт
409ALREADY_DECIDEDПо заявке или апелляции уже принято решение; оно в status
409NOT_BANNEDПользователь не забанен на сервере
409BOT_MISSING_PERMISSIONSУ бота нет нужного права Discord; оно указано в missing
413PAYLOAD_TOO_LARGEСлишком большое тело запроса
415UNSUPPORTED_MEDIA_TYPEТело отправлено не как application/json
422IDEMPOTENCY_KEY_REUSEDКлюч идемпотентности уже использован для другого запроса
422BOT_ACCOUNTУ ботов не может быть баланса
422BALANCE_LIMITОперация нарушит лимиты баланса на сервере
429RATE_LIMITEDСлишком много запросов; подождите Retry-After секунд (то же значение — в поле retryAfter)
500INTERNALОшибка на нашей стороне
503SERVICE_UNAVAILABLEНе удалось связаться с Discord, или BotGG временно приостановил модуль; повторите позже

Какие ошибки повторять

  • 429 RATE_LIMITED и 503 SERVICE_UNAVAILABLE: подождите столько секунд, сколько указано в Retry-After (то же в retryAfter), и повторите.
  • 500 INTERNAL и сетевые ошибки: повторяйте с нарастающей паузой. Для записи передавайте Idempotency-Key, чтобы повтор никогда не применил изменение дважды.
  • Остальные ошибки 4xx не исчезнут при повторе того же запроса: сначала исправьте запрос, ключ или настройки сервера.

Готовы прокачать свой сервер?

Добавьте BotGG бесплатно и включайте нужные функции в веб-консоли.