REST API AppsMax — документация v1
REST API AppsMax v1 — server-to-server интерфейс для чтения проектов и передачи рабочих данных между AppsMax и внешней системой. Через него можно получать ботов, подключения, мини-приложения, сценарии и меню, а также работать с заявками, подписчиками и кампаниями.
Это API платформы AppsMax, а не официальный API MAX или Telegram. Имя рабочего домена telegram.appsmax.ru историческое и не ограничивает API одним мессенджером: доступные данные зависят от проектов вашей организации и правил подключённого канала.
https://telegram.appsmax.ru/api/v1Доступ: REST API входит в текущий тариф «Профи» либо включается по индивидуальному праву. Точный состав тарифа проверяйте на странице «Тарифы» до внедрения.
Быстрый старт
- Откройте в кабинете AppsMax раздел Данные → Интеграции → API.
- Создайте токен только с теми scopes, которые нужны интеграции. Скопируйте значение сразу: секрет не предназначен для повторного показа.
- Сохраните токен в secret-хранилище серверного приложения. Не помещайте его в публичный JavaScript, мобильное приложение, репозиторий или URL.
- Проверьте контекст токена методом
GET /me.
curl --request GET \
--url https://telegram.appsmax.ru/api/v1/me \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
Успешный ответ содержит объект data с организацией и сведениями о токене: его именем, scopes, индивидуальным rate limit и временем последнего использования.
Авторизация и формат
Рекомендуемый способ — заголовок Authorization: Bearer YOUR_API_TOKEN. Для совместимости поддерживается запасной заголовок X-Api-Token: YOUR_API_TOKEN. Токен в query string не поддерживается и не должен использоваться.
- Запросы и ответы:
application/json. - Текущая версия возвращается в заголовке
X-Api-Version: v1. - Все методы, включая
/ping, требуют действующий API-токен. - Токен всегда ограничен своей организацией; чужой объект возвращается как недоступный или не найденный.
Scopes доступа
Для нового подключения выбирайте минимально необходимые права. Токен без заданного списка scopes технически получает полный доступ в пределах организации, поэтому для новых интеграций такой режим не рекомендуется.
| Scope | Что разрешает |
|---|---|
organizations:read |
Читать текущую организацию. |
bots:read |
Читать список и карточки ботов. |
connections:read |
Читать состояние подключения бота к каналу. |
miniapps:read |
Читать мини-приложения. |
funnels:read |
Читать сценарии и воронки. |
interactive_menu:read |
Читать элементы интерактивного меню. |
applications:read |
Читать заявки. |
applications:write |
Создавать заявки и синхронизировать их теги. |
campaigns:read |
Читать кампании. |
campaigns:write |
Создавать и отдельно запускать кампании. |
subscribers:read |
Читать подписчиков. |
subscribers:write |
Создавать или обновлять подписчиков. |
Методы REST API v1
Ниже перечислен весь публичный набор на дату проверки. Идентификаторы в фигурных скобках — целые числа. Для коллекций обычно действует per_page от 1 до 100; у интерактивного меню верхняя граница 200.
| Метод | Путь | Scope | Назначение |
|---|---|---|---|
| GET | /ping |
— | Проверить токен и контекст организации. |
| GET | /me |
— | Получить токен, scopes, лимит и организацию. |
| GET | /organizations |
organizations:read |
Получить текущую организацию. |
| GET | /bots |
bots:read |
Список ботов; фильтры driver, status. |
| GET | /bots/{bot} |
bots:read |
Карточка бота своей организации. |
| GET | /bots/{bot}/connections |
connections:read |
Канал, статус и доступный профиль подключения. |
| GET | /miniapps |
miniapps:read |
Мини-приложения; фильтры bot_id, status. |
| GET | /funnels |
funnels:read |
Сценарии; фильтры bot_id, active. |
| GET | /interactive-menu |
interactive_menu:read |
Элементы меню; фильтры bot_id, active. |
| GET | /applications |
applications:read |
Заявки с фильтрами по боту, статусу, источнику, тегу и датам. |
| POST | /applications |
applications:write |
Создать заявку. Поле bot_id обязательно. |
| GET | /applications/{id} |
applications:read |
Получить одну заявку. |
| POST | /applications/{application}/tags |
applications:write |
Синхронизировать до 20 непустых тегов. |
| GET | /campaigns |
campaigns:read |
Кампании с фильтрами по боту, статусу, типу, датам и строке поиска. |
| POST | /campaigns |
campaigns:write |
Создать черновик или запланированную кампанию; не заменяет запуск. |
| GET | /campaigns/{campaign} |
campaigns:read |
Получить кампанию и её содержимое. |
| POST | /campaigns/{id}/run |
campaigns:write |
Перевести черновик в состояние запуска/планирования. |
| GET | /subscribers |
subscribers:read |
Подписчики с фильтрами по каналу, статусу, боту, тегу, группе и датам. |
| POST | /subscribers |
subscribers:write |
Создать или обновить запись по паре bot_id + external_id. |
| GET | /subscribers/{id} |
subscribers:read |
Получить одного подписчика. |
| PATCH | /subscribers/{id} |
subscribers:write |
Обновить канал, статус, имя, username или теги. |
Примеры запросов
Получить ботов
curl --request GET \
--url 'https://telegram.appsmax.ru/api/v1/bots?driver=max&per_page=50' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
Создать заявку
bot_id обязателен и должен принадлежать организации токена. Поле верхнего уровня status при создании не поддерживается: новая заявка получает начальный статус по правилам AppsMax.
curl --request POST \
--url https://telegram.appsmax.ru/api/v1/applications \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"bot_id": 42,
"source": "rest_api",
"title": "Заявка с сайта",
"channel": "website",
"contact": {
"name": "Тестовый контакт",
"phone": "+70000000000",
"email": "test@example.invalid"
},
"payload": {
"comment": "Проверка интеграции"
}
}'
Ответ на успешное создание — 201 Created. В нём возвращаются идентификатор, бот, источник, статус, контакт, ответы, метаданные формы, теги и временные метки.
Добавить теги заявке
curl --request POST \
--url https://telegram.appsmax.ru/api/v1/applications/123/tags \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"tags":["сайт","повторный контакт"]}'
Создать и затем запустить кампанию
Создание и запуск — два разных действия. Сначала создаётся запись кампании:
curl --request POST \
--url https://telegram.appsmax.ru/api/v1/campaigns \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"bot_id": 42,
"title": "Сервисное уведомление",
"content": "Ваш запрос обработан.",
"channel": "max"
}'
После проверки аудитории, содержания, согласий и правил канала черновик запускается отдельным методом:
curl --request POST \
--url https://telegram.appsmax.ru/api/v1/campaigns/321/run \
--header 'Authorization: Bearer YOUR_API_TOKEN'
Важно: наличие API-метода не отменяет требования закона, согласия адресата и ограничения мессенджера. Массовые маркетинговые сообщения в личные чаты MAX доступны только при отдельном разрешении площадки.
Пагинация и фильтры
Коллекции Laravel возвращают массив data, ссылки пагинации и блок meta. Используйте URL следующей страницы из ответа либо параметр page. Значение per_page ограничивается сервером.
- Заявки:
status[],source[],created_from,created_to,bot_id,tag,sort=created_at|submitted_at,direction=asc|desc. - Кампании:
bot_id,status[],type[],created_from,created_to,q,sort=created_at,direction. - Подписчики:
channel[],status[],bot_id,tag,group_id,q, даты и направление сортировки.
Ошибки, версия и лимиты
Основные API-ошибки имеют единый объект error:
{
"error": {
"code": "validation_failed",
"message": "Validation failed.",
"details": {
"fields": {
"bot_id": ["The bot id field is required."]
}
}
}
}
| HTTP | Когда возникает |
|---|---|
401 |
Токен отсутствует, недействителен или отозван. |
403 |
Нет нужного scope или объект недоступен организации. |
404 |
Ресурс не найден в доступном контуре. |
422 |
Поля запроса не прошли валидацию. |
429 |
Превышен общий или дополнительный лимит операции. |
500 |
Неожиданная серверная ошибка. |
Базовый лимит — 60 запросов в минуту на токен. Для конкретного токена администратор может установить другое значение; фактический лимит виден в GET /me и заголовках X-RateLimit-*. Создание и запуск кампаний дополнительно защищены отдельными лимитами. При 429 используйте паузу и exponential backoff, не увеличивайте burst.
Безопасность и честные ограничения
- Только сервер-сервер. Не встраивайте токен в браузерный код. Произвольные cross-origin запросы из чужого сайта не являются поддерживаемым способом интеграции.
- Минимальные scopes. Разделяйте токены чтения и записи, если интеграция допускает это.
- Ротация. Отзывайте неиспользуемые токены и создавайте новый после подозрения на раскрытие.
- Персональные данные. Передавайте только необходимые поля, определите роли оператора и обработчика, сроки хранения и порядок удаления.
- Кампании. До запуска проверяйте содержание, аудиторию, основание коммуникации и правила конкретного канала.
- Webhooks. Настройки исходящих webhook есть в кабинете AppsMax, но их полный payload/retry/security-контракт пока не включён в эту публичную reference. Для внедрения webhook запросите актуальную схему у поддержки.
- Нет публичного SDK. Официальные Python, PHP, JavaScript или другие SDK AppsMax сейчас не заявлены. Используйте обычный HTTPS-клиент и OpenAPI.
Когда REST API не нужен
Если задача ограничивается формой заявки, мини-приложением, меню, записью или простой передачей в уже доступную интеграцию, быстрее начать с готовых блоков AppsMax. REST API нужен, когда внешняя система должна читать данные, создавать записи или управлять процессом по собственным правилам.
Для Bitrix24, Google Sheets, n8n и других систем сначала проверьте обзор интеграций и доступные настройки кабинета: индивидуальная разработка требуется не всегда.