Авторизация
Для работы с API конструктора Quescha требуется API-ключ. Ключ аккаунта выдаётся в настройках, а рядом с ним можно завести сколько угодно ключей с правами — см. Ключи и права.
Базовый URL
https://api.quescha.com/api
Полный URL запроса = базовый адрес + метод. Например, метод /account/balance/get превращается в:
https://api.quescha.com/api/account/balance/get
HTTP-методы
Читающие методы принимают GET и POST — что удобнее.
Изменяющие методы принимают только POST. Так сделано намеренно: GET-запросы повторяют браузеры, прокси и предпросмотр ссылок в мессенджерах, а повторить отправку сообщения подписчику или добавление строки в список нельзя.
Какой метод чем является, показано в списке методов в колонке «Способ».
Передача API-ключа
Ключ можно передать тремя способами — выберите тот, который удобнее для вашего клиента.
Заголовок Authorization (рекомендуется)
Authorization: 43c3130d767cb3fd01417ba5acf9ba12
Приставка Bearer тоже принимается. Подходит для запросов любым методом. Безопаснее: ключ не попадает в логи серверов и URL-историю браузера.
Заголовок X-Api-Key
X-Api-Key: 43c3130d767cb3fd01417ba5acf9ba12
То же самое — для клиентов, которым так привычнее.
GET-параметр key
https://api.quescha.com/api/...?key=43c3130d767cb3fd01417ba5acf9ba12
Удобно для быстрого теста в браузере, но не используйте этот способ в продакшене — ключ будет светиться в логах прокси, аналитике и истории браузера.
Ключ аккаунта даёт полный программный доступ к вашему аккаунту. Не публикуйте его в репозиториях, не вставляйте в клиентский JavaScript и не делитесь с третьими лицами. Если ключ скомпрометирован — сгенерируйте новый в настройках аккаунта.
Для чужих сервисов и подрядчиков заведите отдельный ключ с правами: у него можно ограничить и права, и список ботов, и срок жизни, а отозвать его получится, не трогая свой.
Параметры запроса
Параметры принимаются и в строке запроса, и в теле JSON. Если параметр передан обоими способами, побеждает тело.
# в строке запроса
curl "https://api.quescha.com/api/subscriber/list?botid=123456789&limit=10" \
-H "Authorization: ВАШ_КЛЮЧ"
# телом JSON
curl -X POST https://api.quescha.com/api/subscriber/list \
-H "Authorization: ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"botid": "123456789", "limit": 10}'
Постраничная выдача
Все списочные методы принимают limit (по умолчанию 50, не больше 500) и offset, а отвечают полем total — сколько всего записей подходит под условие.
Частота запросов
Предел — 10 запросов в секунду на аккаунт. Считается «ведром»: короткая пачка запросов подряд пройдёт, а вот равномерно частить не выйдет.
Каждый ответ несёт заголовки:
| Заголовок | Что означает |
|---|---|
X-RateLimit-Limit | сколько запросов в секунду разрешено |
X-RateLimit-Remaining | сколько осталось прямо сейчас |
X-RateLimit-Reset | через сколько секунд ведро наполнится |
Retry-After | приходит вместе с ответом 429: через сколько секунд повторить |
Отдельному ключу с правами можно задать свою частоту.
Повтор запроса без последствий
Сеть рвётся посреди запроса, и вызывающий не знает, дошёл ли он. Повторить страшно: создастся вторая строка списка, уйдёт второе сообщение подписчику.
Передайте заголовок Idempotency-Key с любой строкой, придуманной на вашей стороне:
curl -X POST https://api.quescha.com/api/list/row/add \
-H "Authorization: ВАШ_КЛЮЧ" \
-H "Idempotency-Key: order-2026-08-28-17423" \
-H "Content-Type: application/json" \
-d '{"listid": 12, "row": {"Имя": "Пётр", "Телефон": "+79990000000"}}'
- Первый запрос выполняется как обычно.
- Повтор с тем же ключом ничего не создаёт, а возвращает сохранённый ответ первого запроса и заголовок
Idempotent-Replay: true. - Тот же ключ с другими параметрами — ошибка
409 idempotency_conflict: значит, на вашей стороне ключ переиспользован по ошибке.
Ключи живут сутки.
Что дальше
- Все методы одной таблицей
- Ключи и права — отдельные ключи для чужих сервисов
- Подписка на события — конструктор сам сообщит о новом подписчике или оплате
- Готовые рецепты — сквозные примеры
- Ошибки — коды и что с ними делать
