API и MCP для сторонних сервисов и агентов
Через API и MCP чужие сервисы и ИИ-агенты используют Maxom как инструмент: генерируют картинки, видео и песни, пишут тексты и код (Claude). Оплата в токенах вашего аккаунта, те же модели и настройки, что в приложении.
Быстрый старт
- Войдите в приложение, откройте Профиль → API и создайте ключ. Он показывается один раз: сохраните его сразу. Вместе с ключом выдаётся секрет для проверки вебхуков.
- Проверьте баланс:
curl https://…/api/v1/balance \ -H "Authorization: Bearer ab_live_ВАШ_КЛЮЧ" - Создайте картинку (параметр
waitдожидается результата до 55 секунд):curl -X POST "https://…/api/v1/images?wait=30" \ -H "Authorization: Bearer ab_live_ВАШ_КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{"prompt": "красное яблоко на белом столе, студийное фото", "model": "fast"}' - В ответе будет задача с полем
result.images[0].url— ссылка на готовую картинку.
Стоимость зависит от модели и настроек. Узнать её заранее и без списания: POST /estimate. Список моделей и настроек: GET /models (без ключа).
Как устроены задачи
Каждый запрос на генерацию создаёт задачу. Токены списываются сразу; если генерация не удалась или задачу отменили, токены возвращаются.
| Статус | Что значит |
|---|---|
queued | Ждёт своей очереди: у ключа одновременно выполняется не больше 20 задач, остальные не отклоняются, а ждут. |
processing | Выполняется (видео и песни готовятся минуты). |
completed | Готово, результат в поле result. |
failed | Не удалось, токены возвращены, причина в error. |
canceled | Отменена, токены возвращены. |
Как получить результат: (1) параметр ?wait=N при создании или в GET /jobs/{id} ждёт до N секунд; (2) опрашивайте GET /jobs/{id}; (3) укажите webhook_url и получите уведомление (см. ниже).
Идемпотентность. Заголовок Idempotency-Key защищает от двойного списания при повторе запроса: повтор с тем же значением вернёт ту же задачу.
Пример задачи:
{
"id": "job_...", "object": "job", "type": "image", "status": "completed",
"created_at": "2026-09-21T18:00:00+00:00", "started_at": "...", "finished_at": "...",
"cost_tokens": <число списанных токенов>, "refunded": false,
"request": {"prompt": "...", "model": "fast", "count": 2},
"result": {"images": [{"url": "https://...", "thumbnail_url": "https://..."}]},
"error": null
}
Справочник
Все запросы с заголовком Authorization: Bearer ab_live_…, кроме GET /models. Тело — JSON.
POST /images — картинки
| Поле | Описание |
|---|---|
prompt | Описание, обязательно, до 4000 символов. |
model | Модель из GET /models (image), по умолчанию fast. |
count | Сколько картинок, 1–8. |
params | Настройки модели (формат, размер, качество…), допустимые значения в GET /models. |
images / reference_urls | Примеры для правки: до 4 картинок (base64 {base64, mime} до 8 МБ или https-ссылки). |
webhook_url | https-адрес уведомления. |
Результат: result.images[] с url и thumbnail_url.
POST /videos — видео
| Поле | Описание |
|---|---|
prompt | Описание сцены. |
model, mode, params | Модель (по умолчанию самая доступная), режим t2v (по тексту) или i2v (по стартовому кадру), настройки: длительность, формат и др. См. GET /models (video). |
images / reference_urls | Один стартовый кадр для i2v. |
Результат: result.video.url. Режим переноса движений по видео-референсу пока недоступен в API.
POST /music — песни и музыка
| Поле | Описание |
|---|---|
prompt | О чём песня или какая нужна музыка. |
lyrics | Свой текст (если не указан, его напишет Claude по описанию). |
instrumental, styles, language, vocal, duration, title | Без слов, стили (GET /models → music), язык ru/en, голос any/f/m, длительность, название. |
Результат: result.tracks[] (два варианта: url, cover_url, duration) и result.lyrics.
POST /text — тексты, ответы, код
| Поле | Описание |
|---|---|
prompt или messages | Запрос одной строкой или диалог [{"role": "user|assistant", "content": "..."}], начинается и заканчивается сообщением user. Суммарно до 12 000 символов. |
system | Инструкция для модели, до 4000 символов. |
max_tokens | Длина ответа, до 2048. |
Результат: result.text, result.usage. Обычно готов за секунды: добавьте ?wait=30.
POST /estimate — смета без списания
Тело как у создания задачи плюс type (image, video, music, text). Ответ: cost_tokens, balance_tokens, enough.
POST /batch — пакет до 100 задач
{"jobs": [{"type": "image", "prompt": "..."}, {"type": "text", "prompt": "..."}]}. Каждая задача создаётся и оплачивается отдельно. Ответ 207: results[] с job или error по каждой; если токены закончились, оставшиеся вернут insufficient_balance.
Задачи и баланс
GET /jobs/{id} | Состояние задачи, ?wait=N ждёт завершения. |
GET /jobs | Список: ?status=, ?limit= (до 100), ?before= (id последней полученной). |
POST /jobs/{id}/cancel | Отмена, пока задача не началась (или видео стоит в очереди у провайдера); токены возвращаются. Начавшуюся генерацию отменить нельзя. |
GET /balance | Баланс токенов. |
GET /models | Каталог моделей и настроек, без ключа. |
Вебхуки
Если в запросе указан webhook_url (только https), сервис отправит POST с JSON, когда задача завершится: {"event": "job.completed" | "job.failed" | "job.canceled", "created_at": "...", "job": {…}}. Ответ 2xx считается доставкой; иначе повторы через 1 минуту, 5 минут, 30 минут, 2 часа и 12 часов, всего 6 попыток.
Подпись: заголовок X-AB-Signature: t=<время>,v1=<подпись>, где подпись это HMAC-SHA256 от строки время + "." + тело с секретом вебхуков вашего ключа. Проверка:
import hmac, hashlib
def verify(secret: str, header: str, body: bytes) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
expected = hmac.new(secret.encode(), parts["t"].encode() + b"." + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts["v1"])
Проверяйте, что время t не старше нескольких минут.
Ошибки и лимиты
Ошибки всегда в одном формате: {"error": {"code": "...", "message": "..."}}.
| HTTP | code | Когда |
|---|---|---|
| 400 | invalid_request | Неверные поля запроса. |
| 401 | unauthorized | Нет ключа, ключ неверный или отозван. |
| 402 | insufficient_balance | Не хватает токенов (в ответе balance_tokens и required_tokens). |
| 404 | not_found | Задача не найдена. |
| 409 | conflict | Действие невозможно в текущем состоянии (например, отмена начавшейся генерации). |
| 429 | rate_limited | Больше 120 запросов в минуту на ключ; смотрите заголовок Retry-After. |
| 503 | service_unavailable | Сервис временно недоступен, повторите позже. |
Лимиты: 120 запросов в минуту на ключ; 20 одновременно выполняемых задач на ключ (остальные ждут в очереди); до 100 задач в пакете. Нужны другие лимиты — напишите нам.
MCP: подключение агентов
MCP-сервер даёт то же самое агентам (Claude, Cursor и другим клиентам с поддержкой MCP). Адрес: https://…/mcp (streamable HTTP), заголовок Authorization: Bearer ab_live_…. Пример настройки клиента:
{
"mcpServers": {
"ai-brigada": {
"url": "https://…/mcp",
"headers": {"Authorization": "Bearer ab_live_ВАШ_КЛЮЧ"}
}
}
}
Если клиент не умеет заголовки, подключите через мост: npx mcp-remote https://…/mcp --header "Authorization: Bearer ab_live_…".
| Инструмент | Что делает |
|---|---|
generate_image | Картинки по описанию, до 8 штук, можно с примерами. |
generate_video | Видео по описанию или стартовому кадру. |
generate_music | Песня или музыка. |
write_text | Текст, ответ, код от Claude. |
get_job, cancel_job, list_jobs | Состояние, отмена и список задач. |
get_balance, list_models, estimate_cost | Баланс, каталог моделей, смета. |
Инструменты ждут результата до 45 секунд; долгие задачи (видео, песни) возвращают job_id и статус processing, дальше агент вызывает get_job с wait_seconds.
OpenAPI
Машиночитаемое описание: /api/v1/openapi.json (подходит для генерации клиентов и подключения как инструмента к агентам).