Основы
Как устроено API
Адрес и версия
Все запросы отправляются на один адрес. Номер версии входит в него.
https://api.glitchapp.online/v10Сейчас действует версия 10, та же, что у API Discord. Всё, что в ней опубликовано, мы не ломаем. Новые поля и ручки добавляются, а существующие не переименовываются, не удаляются и не меняют смысл. Если когда-нибудь понадобится несовместимое изменение, оно выйдет в новой версии с новым адресом, а старая версия продолжит работать.
Отсюда простое правило для вашей программы. Не падайте, если в ответе появилось незнакомое поле, просто пропускайте его.
Запросы принимаются только по HTTPS.
Вход
Как программа подтверждает, что ей можно выполнить запрос, зависит от того, кто она.
| Кто | Как подтверждает |
|---|---|
| Вебхук | Ключом в адресе, /webhooks/{webhook.id}/{webhook.token}. Заголовок Authorization не нужен |
| Бот | Заголовком Authorization: Bot <ключ бота>. Появится вместе с ботами |
Ключи выглядят как длинная случайная строка из латинских букв, цифр, - и _. Храните их так же, как пароли.
Запросы
JSON
Обычный запрос отправляется с телом в JSON и заголовком Content-Type: application/json.
curl -X POST "https://api.glitchapp.online/v10/webhooks/ID/KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Привет", "username": "Мониторинг"}'Файлы
Запрос с файлами отправляется формой multipart/form-data, так же как в Discord.
- Сами файлы передаются полями
files[0],files[1]и так далее, до 10 файлов. - Остальные поля запроса передаются одной JSON-строкой в поле
payload_json. - Имя файла берётся из формы. По нему файл подписывается в канале, и на него же ссылаются карточки через
attachment://имя.
curl -X POST "https://api.glitchapp.online/v10/webhooks/ID/KEY" \
-F 'payload_json={"content": "Логи за ночь", "username": "Сервер"}' \
-F "files[0]=@server.log"Если полей немного, вместо payload_json их можно передать обычными полями той же формы, например -F "content=Логи за ночь". Но вложенные объекты вроде embeds и allowed_mentions так передать нельзя, для них нужен payload_json.
Размер
Весь запрос вместе с файлами должен быть не больше 30 МБ. Запрос крупнее получает отказ 413 с кодом 40005, как в Discord.
Параметры, которых нет в Glitch
Если в запросе есть поле Discord, которого Glitch не понимает, например tts: true или components, сервер не станет его молча пропускать. Запрос получит отказ 50035, и в сообщении будет название поля. Поля со значением по умолчанию (tts: false, flags: 0, пустые списки) отказа не вызывают. Библиотеки часто отправляют их всегда, и это нормально.
Список всего, чего в Glitch нет, есть на странице Отличия от Discord.
Ответы
- Успешный ответ — это
200с объектом в JSON или204без тела. - Любой отказ имеет одинаковый вид
{"code": …, "message": "…"}. Подробнее о нём на странице Ошибки. - Каждый ответ содержит заголовки
X-RateLimit-*. По ним видно, сколько запросов ещё можно сделать, см. Пределы частоты.
Номера
У каждого объекта есть номер, поле id. Номера ссылок на другие объекты лежат в полях вида channel_id, webhook_id, guild_id. В ответах номер всегда передаётся строкой, как в Discord.
{"id": "1053147923963904", "channel_id": "1053143874918656"}Строкой номер передаётся потому, что в JavaScript обычное число теряет точность на таких больших значениях. В запросах номер можно передавать и строкой, и числом.
Номера Glitch растут со временем, поэтому более новый объект имеет больший номер. Но вычислить по номеру дату создания нельзя, как это делают в Discord. Для этого у объектов есть поля времени.
Время
Время передаётся строкой в формате ISO 8601, всегда в UTC и с явным поясом.
{"timestamp": "2026-10-28T08:30:00+00:00", "edited_timestamp": null}Время, которое передаёте вы, например timestamp в карточке, тоже записывается в ISO 8601. Если пояс не указан, время считается в UTC.
Язык сообщений
Поле message в отказах написано для человека. Язык выбирается по заголовку Accept-Language. Поддерживаются русский (ru), английский (en), украинский (uk) и китайский (zh), по умолчанию ответ приходит на русском.
curl -H "Accept-Language: en" …Программа не должна разбирать текст message. Он может меняться, а для решений есть поле code.