Перейти к содержимому

Справочник API

Постановка генерации

POST /v1/models/{model} — поставить генерацию изображения, видео или аудио в очередь, получить request_id и отправить запрос прямо со страницы.

Поставьте генерацию изображения, видео или аудио в очередь. Заполните параметры ниже и отправьте запрос со своим ключом.

Песочница

Для проб — тестовый ключ

В форму ниже вставляйте ключ clipia_test_…: он не списывает кредиты и не вызывает модели, а ответ приходит в том же формате. Форма запоминает ключ в этом браузере, поэтому боевой clipia_live_… — серверный секрет — в неё не вводите. Подробнее — «Тестовый режим».

POST
/v1/models/{model}

Авторизация

headerАвторизация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*string

Slug модели, напр. 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 <= 255

Тело запроса

application/json
  1. body
input*

Параметры генерации. Состав зависит от модели — точную схему смотрите в GET /v1/models/{model} (input_schema). Распространённые ключи: prompt, image_url, image_urls, aspect_ratio, duration, resolution — но у каждой модели свой набор: ключ, которого модель не объявляет и не читает, не применяется и возвращается в warnings ответа.

webhook_url?string

URL для POST-уведомления о завершении генерации (опционально).

Форматuri

Тело ответа

Генерация принята и поставлена в очередь.

application/json
  1. response
request_id*string

Идентификатор запроса генерации.

Форматuuid
status*GenerationStatus

Статус генерации в очереди. CANCELED — терминальный: генерацию можно отменить вне публичного API (например, из веб-интерфейса Clipia); cancel-эндпоинта в публичном API нет, но status может вернуть CANCELED, поэтому клиент обязан считать его финальным.

Одно из"IN_QUEUE""IN_PROGRESS""COMPLETED""FAILED""CANCELED"
queue_position?integerУстарело

Устарело — всегда 0, позиция в очереди не считается. Поле сохранено для совместимости; ориентируйтесь на status и progress.

status_url*string

Ссылка для проверки статуса.

Форматuri
response_url*string

Ссылка для получения результата.

Форматuri
cost*number

Фиксированная стоимость операции в кредитах (резервируется при submit).

warnings?array<>

Параметры input, которые модель не применит: по элементу на ключ, не больше 20 элементов. Поле присутствует, только когда такие параметры есть.

Элементыitems <= 20
curl -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.

POST/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.

HTTPcodemessageКогда
400invalid_requestinvalid_modelslug не соответствует формату: строчные буквы, цифры, дефис
400invalid_requestprompt_requiredнет prompt и нет исходного изображения или видео
400invalid_requestinput_too_large / input_too_deepinput больше 100 000 байт или глубже 8 уровней
400invalid_requestidempotency_key_too_longIdempotency-Key длиннее 255 символов
400invalid_requestwebhook_url_invalidwebhook_url не HTTPS или ведёт на внутренний адрес
400invalid_requestToo many media URLs… / Too many items in <поле>…ссылок на исходные файлы больше 30 в одном списке или больше 60 разных в запросе — отказ до проверки адресов и резерва кредитов
400invalid_requestmedia_url_invalidссылка на исходный файл ведёт на внутренний адрес или имеет схему, отличную от http(s). У HeyGen Video сервер переносит файлы по внешним ссылкам в своё хранилище до резерва кредитов; если файл не удалось скачать или он не подходит по типу и размеру, сообщение называет поле и причину: media_url_invalid: <поле>: <причина>
400invalid_requestnum_images greater than 1 is not supported: send one request per image.в input передан num_images больше 1 — одна задача даёт одно изображение
400invalid_requestтекст с лимитом моделитекст озвучки короче или длиннее границ text_limits модели; кредиты не резервируются
402insufficient_credits—не хватает кредитов
402subscription_required—нужна активная подписка: это и условие публичного API на боевом ключе, и заморозка кредитов до продления тарифа
402insufficient_quota—с этим запуском расход ключа превысит его бюджет, см. «Управление ключами»
403insufficient_scope—у ключа нет права generate
404not_foundmodel_not_foundмодели с таким slug нет или она недоступна
409request_in_progress / idempotency_key_reuse—см. «Идемпотентность»
429rate_limit_exceeded / concurrency_limit_exceeded—см. «Лимиты»
503service_unavailable—у HeyGen Video сервер временно не может перенести файлы по внешним ссылкам; кредиты не резервируются, повторите с паузой