Справочник API
Постановка генерации
POST /v1/models/{model} — поставить генерацию изображения, видео или аудио в очередь, получить request_id и отправить запрос прямо со страницы.
Поставьте генерацию изображения, видео или аудио в очередь. Заполните параметры ниже и отправьте запрос со своим ключом.
Песочница
Для проб — тестовый ключ
В форму ниже вставляйте ключ clipia_test_…: он не списывает кредиты и не вызывает модели, а ответ приходит в том же формате. Форма запоминает ключ в этом браузере, поэтому боевой clipia_live_… — серверный секрет — в неё не вводите. Подробнее — «Тестовый режим».
АвторизацияBearer <токен>API-ключ в заголовке Authorization со схемой Bearer — основной
способ. Сгенерированные клиенты добавляют префикс Bearer сами, а в
плейграунде поле уже содержит его: допишите ключ после него. Плейграунд
запоминает ключ в этом браузере, поэтому для проб берите тестовый:
Authorization: Bearer <CLIPIA_API_KEY>Тот же ключ принимается и со схемой Key (Authorization: Key <ключ>,
слово Key — в любом регистре), и в отдельном заголовке X-Api-Key
(схема apiKeyHeader) — выбирайте удобную форму, сервер различает их сам.
Ключ создаётся в консоли разработчика (clipia.ai/developer, вкладка
«API-ключи») и показывается один раз. Формат: clipia_live_… (боевой), clipia_test_… (песочница).
Sandbox / тестовый режим. Ключ с префиксом clipia_test_… работает в
песочнице: submit не списывает кредиты и не запускает реальную
генерацию — он мгновенно возвращает status: COMPLETED с детерминированным
mock-результатом (фиксированный sample-ассет на media.clipia.ai). Поле
cost показывает расчётную стоимость, но она не списывается. Вебхуки
приходят тем же подписанным механизмом (HMAC-SHA256). Режим предназначен
для отладки интеграции до подключения боевого ключа.
model*stringSlug модели, напр. nano-banana-2, seedance-2-fast-i2v. Список — GET /v1/models.
Слаги с пространством имён (google/imagen4, grok-imagine/text-to-video)
передаются как есть (/v1/models/google/imagen4) либо с %2F.
^[a-z0-9][a-z0-9-]{0,200}(?:/[a-z0-9][a-z0-9-]{0,200})?$Idempotency-Key?stringКлюч логического запроса для безопасных ретраев POST, до 255 символов;
рекомендуется UUID v4. Повтор с тем же ключом и теми же параметрами вернёт
сохранённый ответ без повторного списания и с заголовком
Idempotent-Replayed: true. Срок хранения — 24 часа. Тот же ключ с другими
параметрами → 409.
length <= 255application/json- body
input*Параметры генерации. Состав зависит от модели — точную схему смотрите в
GET /v1/models/{model} (input_schema). Распространённые ключи:
prompt, image_url, image_urls, aspect_ratio, duration,
resolution — но у каждой модели свой набор: ключ, которого модель
не объявляет и не читает, не применяется и возвращается в
warnings ответа.
webhook_url?stringURL для POST-уведомления о завершении генерации (опционально).
uriГенерация принята и поставлена в очередь.
application/json- response
request_id*stringИдентификатор запроса генерации.
uuidstatus*GenerationStatusСтатус генерации в очереди. CANCELED — терминальный: генерацию можно отменить вне публичного API (например, из веб-интерфейса Clipia); cancel-эндпоинта в публичном API нет, но status может вернуть CANCELED, поэтому клиент обязан считать его финальным.
"IN_QUEUE""IN_PROGRESS""COMPLETED""FAILED""CANCELED"queue_position?integerУстарелоУстарело — всегда 0, позиция в очереди не считается. Поле сохранено для совместимости; ориентируйтесь на status и progress.
status_url*stringСсылка для проверки статуса.
uriresponse_url*stringСсылка для получения результата.
uricost*numberФиксированная стоимость операции в кредитах (резервируется при submit).
warnings?array<>Параметры input, которые модель не применит: по элементу на ключ, не
больше 20 элементов. Поле присутствует, только когда такие параметры есть.
items <= 20curl -X POST "https://example.com/v1/models/nano-banana-2" \ -H "Content-Type: application/json" \ -d '{ "input": { "prompt": "a sunset over mountains, cinematic", "aspect_ratio": "16:9" }, "webhook_url": "https://your-server.com/clipia/webhook" }'{ "request_id": "764cabcf-b745-4b3e-ae38-1200304cf45b", "status": "IN_QUEUE", "queue_position": 0, "status_url": "https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b/status", "response_url": "https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b", "cost": 12}POST /v1/models/:model ставит генерацию в очередь и сразу возвращает request_id, ссылки на статус и результат и зарезервированную стоимость в кредитах. Нужен ключ с правом generate.
/v1/models/:modelЗапрос
Параметр пути
Свойство
Тип
Заголовки
Свойство
Тип
Тело
Свойство
Тип
Частые ключи внутри input: prompt, image_url, image_urls, aspect_ratio, duration, resolution — но набор у каждой модели свой: передавайте то, что модель объявляет в input_schema (что будет с лишним ключом — ниже). Если модель работает с исходным изображением или видео, prompt можно не передавать; иначе он обязателен.
Пример
curl -X POST https://api.clipia.ai/v1/models/nano-banana-2 \
-H "Authorization: Bearer $CLIPIA_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 8f3a1c7e-2b4d-4e6f-9a01-23456789abcd" \
-d '{
"input": {
"prompt": "a sunset over mountains, cinematic",
"aspect_ratio": "16:9"
},
"webhook_url": "https://your-server.com/clipia/webhook"
}'Ответ 200
{
"request_id": "764cabcf-b745-4b3e-ae38-1200304cf45b",
"status": "IN_QUEUE",
"queue_position": 0,
"status_url": "https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b/status",
"response_url": "https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b",
"cost": 12
}Поля ответа
Свойство
Тип
Кредиты из cost резервируются при отправке, списываются при успехе и возвращаются полностью, если генерация завершилась ошибкой. Чтобы узнать цену заранее, вызовите оценку стоимости с тем же input.
Повторная отправка
С заголовком Idempotency-Key повтор с тем же телом в течение 24 часов вернёт ту же задачу без второго списания. Без заголовка одинаковые запросы, пришедшие в течение 20 секунд, тоже склеиваются в одну задачу. Повторный ответ в обоих случаях помечен заголовком Idempotent-Replayed: true. Подробнее — в разделе «Идемпотентность».
Проигнорированные параметры
Набор параметров у каждой модели свой. Если в input попал ключ, который модель не применит, — опечатка, параметр другой модели, ключ из старого примера — запрос принимается как раньше, отказа нет. Но ответ дополнительно содержит массив warnings, по элементу на каждый такой ключ:
{
"request_id": "5b0c1f7e-2a53-4a0e-9d0b-6f1f4d0f2c11",
"status": "IN_QUEUE",
"queue_position": 0,
"status_url": "https://api.clipia.ai/v1/requests/5b0c1f7e-2a53-4a0e-9d0b-6f1f4d0f2c11/status",
"response_url": "https://api.clipia.ai/v1/requests/5b0c1f7e-2a53-4a0e-9d0b-6f1f4d0f2c11",
"cost": 12,
"warnings": [
{
"code": "unsupported_parameter",
"parameter": "duration",
"message": "Parameter \"duration\" is not supported by model \"nano-banana-2\" and was ignored. Parameters declared by this model: aspect_ratio, prompt, resolution. Full schema: GET /v1/models/nano-banana-2."
}
]
}Свойство
Тип
- Когда все параметры приняты, поля
warningsв ответе нет. В массиве не больше 20 элементов. - Другое написание объявленного параметра, которое сервер сам приводит к нужному имени, предупреждением не считается.
- Предупреждение появляется только там, где сервер уверен, что параметр не будет применён. Его отсутствие не подтверждает, что каждый параметр подействовал: сверяйте
inputсinput_schemaмодели. - Те же
warningsвозвращают оценка стоимости, тестовый ключ и повтор с тем жеIdempotency-Key. - В MCP тот же случай — отказ до запуска генерации: см. «Инструменты MCP».
Ошибки отправки
Ошибки приходят в общем формате {"error": {"type", "code", "message"}} — см. «Ошибки». Для ошибок 400 конкретная причина передаётся в поле message.
| HTTP | code | message | Когда |
|---|---|---|---|
| 400 | invalid_request | invalid_model | slug не соответствует формату: строчные буквы, цифры, дефис |
| 400 | invalid_request | prompt_required | нет prompt и нет исходного изображения или видео |
| 400 | invalid_request | input_too_large / input_too_deep | input больше 100 000 байт или глубже 8 уровней |
| 400 | invalid_request | idempotency_key_too_long | Idempotency-Key длиннее 255 символов |
| 400 | invalid_request | webhook_url_invalid | webhook_url не HTTPS или ведёт на внутренний адрес |
| 400 | invalid_request | Too many media URLs… / Too many items in <поле>… | ссылок на исходные файлы больше 30 в одном списке или больше 60 разных в запросе — отказ до проверки адресов и резерва кредитов |
| 400 | invalid_request | media_url_invalid | ссылка на исходный файл ведёт на внутренний адрес или имеет схему, отличную от http(s). У HeyGen Video сервер переносит файлы по внешним ссылкам в своё хранилище до резерва кредитов; если файл не удалось скачать или он не подходит по типу и размеру, сообщение называет поле и причину: media_url_invalid: <поле>: <причина> |
| 400 | invalid_request | num_images greater than 1 is not supported: send one request per image. | в input передан num_images больше 1 — одна задача даёт одно изображение |
| 400 | invalid_request | текст с лимитом модели | текст озвучки короче или длиннее границ text_limits модели; кредиты не резервируются |
| 402 | insufficient_credits | — | не хватает кредитов |
| 402 | subscription_required | — | нужна активная подписка: это и условие публичного API на боевом ключе, и заморозка кредитов до продления тарифа |
| 402 | insufficient_quota | — | с этим запуском расход ключа превысит его бюджет, см. «Управление ключами» |
| 403 | insufficient_scope | — | у ключа нет права generate |
| 404 | not_found | model_not_found | модели с таким slug нет или она недоступна |
| 409 | request_in_progress / idempotency_key_reuse | — | см. «Идемпотентность» |
| 429 | rate_limit_exceeded / concurrency_limit_exceeded | — | см. «Лимиты» |
| 503 | service_unavailable | — | у HeyGen Video сервер временно не может перенести файлы по внешним ссылкам; кредиты не резервируются, повторите с паузой |
Очередь генераций
Как устроена асинхронная очередь Clipia REST API — отправка задачи, статус, результат и вебхуки для генерации изображений, видео и аудио.
Статус запроса
GET /v1/requests/{request_id}/status — лёгкий опрос статуса и прогресса генерации по request_id; отдельное право ключа для него не требуется.