API · Referencia
Enviar una generación
POST /v1/models/{model} — ponga en cola una generación de imagen, vídeo o audio, obtenga un request_id y envíe la solicitud directamente desde esta página.
Ponga en cola una generación de imagen, vídeo o audio. Rellene los parámetros siguientes y envíe la solicitud con su clave.
Playground
API-ключ в заголовке Authorization со схемой Bearer:
Authorization: Bearer <CLIPIA_API_KEY>Передавайте полную строку, включая префикс схемы Bearer и пробел.
Также принимаются Authorization: Key <ключ> и заголовок
X-Api-Key: <ключ> — выбирайте удобную схему.
Ключ создаётся в консоли разработчика (clipia.ai/developer, вкладка
«API-ключи») и показывается один раз. Формат: clipia_live_… (боевой), clipia_test_… (песочница).
Sandbox / тестовый режим. Ключ с префиксом clipia_test_… работает в
песочнице: submit не списывает кредиты и не запускает реальную
генерацию — он мгновенно возвращает status: COMPLETED с детерминированным
mock-результатом (фиксированный sample-ассет на media.clipia.ai). Поле
cost показывает расчётную стоимость, но она не списывается. Вебхуки
приходят тем же подписанным механизмом (HMAC-SHA256). Режим предназначен
для отладки интеграции до подключения боевого ключа.
In: header
Path Parameters
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})?$Header Parameters
UUID v4 для безопасных ретраев POST. Тот же ключ с теми же параметрами
вернёт тот же request_id (без повторного списания). Срок хранения — 24 часа.
Тот же ключ с другими параметрами → 409.
uuidПараметры генерации. Состав зависит от модели — точную схему смотрите в
GET /v1/models/{model} (input_schema). Распространённые ключи:
prompt, image_url, image_urls, aspect_ratio, duration,
resolution — но у каждой модели свой набор: ключ, которого модель
не объявляет и не читает, не применяется и возвращается в
warnings ответа.
Empty Object
URL для POST-уведомления о завершении генерации (опционально).
uriResponse Body
curl -X POST "https://api.clipia.ai/v1/models/nano-banana-2" \ -H "Idempotency-Key: 8f3a1c7e-2b4d-4e6f-9a01-23456789abcd" \ -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": 2,
"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
}{
"error": {
"type": "invalid_request_error",
"code": "invalid_api_key",
"message": "API-ключ отсутствует, неверный или отозван."
}
}{
"error": {
"type": "billing_error",
"code": "insufficient_credits",
"message": "Insufficient credits. Top up your balance to continue."
}
}{
"error": {
"type": "invalid_request_error",
"code": "insufficient_scope",
"message": "У ключа нет scope `generate`."
}
}{
"error": {
"type": "invalid_request_error",
"code": "model_input_invalid",
"message": "Параметр `resolution` не поддерживается этой моделью."
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry after the reset window.",
"retry_after_seconds": 12
}
}POST /v1/models/:model pone en cola una generación y devuelve de inmediato un request_id, enlaces a su estado y a su resultado, y el coste reservado en créditos. La clave necesita el permiso generate.
/v1/models/:modelSolicitud
Parámetro de ruta
Prop
Type
Cabeceras
Prop
Type
Cuerpo
Prop
Type
Claves habituales dentro de input: prompt, image_url, image_urls, aspect_ratio, duration, resolution; pero cada modelo tiene su propio conjunto: pase lo que el modelo declara en input_schema (qué ocurre con una clave sobrante, más abajo). Si el modelo trabaja a partir de una imagen o un vídeo de origen, prompt es opcional; en otro caso, es obligatorio.
Ejemplo
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"
}'import { createClient } from 'clipia-ai';
const clipia = createClient({ apiKey: process.env.CLIPIA_KEY! });
// La Idempotency-Key se añade automáticamente.
const job = await clipia.queue.submit('nano-banana-2', {
input: { prompt: 'a sunset over mountains, cinematic', aspect_ratio: '16:9' },
webhookUrl: 'https://your-server.com/clipia/webhook',
});
console.log(job.request_id, job.cost);import os
from clipia import Clipia
client = Clipia(api_key=os.environ["CLIPIA_KEY"])
# La Idempotency-Key se añade automáticamente.
job = client.submit(
"nano-banana-2",
{"prompt": "a sunset over mountains, cinematic", "aspect_ratio": "16:9"},
webhook_url="https://your-server.com/clipia/webhook",
)
print(job.request_id, job.cost)Respuesta 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
}Campos de la respuesta
Prop
Type
Los créditos de cost se reservan al enviar, se cobran si la generación tiene éxito y se reembolsan íntegramente si falla. Para conocer el precio de antemano, llame a la estimación del coste con el mismo input.
Reintentos
Con una cabecera Idempotency-Key, repetir el mismo cuerpo en un plazo de 24 horas devuelve el mismo trabajo sin un segundo cargo. Sin la cabecera, las solicitudes idénticas que llegan en un intervalo de 20 segundos también se fusionan en un solo trabajo. Consulte Idempotencia.
Parámetros ignorados
Cada modelo tiene su propio conjunto de parámetros. Si input contiene una clave que el modelo no aplicará (una errata, un parámetro de otro modelo, una clave de un ejemplo antiguo), la solicitud se acepta como antes y no se rechaza. Pero la respuesta incluye además una matriz warnings, con un elemento por cada clave:
{
"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."
}
]
}Prop
Type
- Cuando se aceptan todos los parámetros, la respuesta no tiene el campo
warnings. La matriz contiene como máximo 20 elementos. - Otra forma de escribir un parámetro declarado, que el servidor convierte por sí mismo al nombre correcto, no se considera una advertencia.
- La advertencia aparece solo cuando el servidor está seguro de que el parámetro no se aplicará. Su ausencia no confirma que todos los parámetros hayan surtido efecto: compare
inputcon elinput_schemadel modelo. - Los mismos
warningslos devuelven la estimación del coste, una clave de prueba y un reintento con el mismoIdempotency-Key. - En MCP, el mismo caso es un rechazo antes de iniciar la generación: consulte Herramientas MCP.
Errores del envío
Los errores usan el formato común {"error": {"type", "code", "message"}}: consulte Errores. En los errores 400, el motivo concreto está en el campo message.
| HTTP | code | message | Cuándo |
|---|---|---|---|
| 400 | invalid_request | invalid_model | el slug no tiene el formato correcto: letras minúsculas, dígitos, guiones |
| 400 | invalid_request | prompt_required | no hay prompt ni imagen o vídeo de origen |
| 400 | invalid_request | input_too_large / input_too_deep | input supera los 100.000 bytes o los 8 niveles de anidamiento |
| 400 | invalid_request | idempotency_key_too_long | Idempotency-Key tiene más de 255 caracteres |
| 400 | invalid_request | webhook_url_invalid | webhook_url no es HTTPS o apunta a una dirección interna |
| 400 | invalid_request | media_url_invalid | la URL de un archivo de origen apunta a una dirección interna |
| 402 | insufficient_credits | — | no hay créditos suficientes, o la cuenta nunca ha hecho una compra (clave live) |
| 402 | subscription_required | — | esta operación requiere una suscripción activa |
| 403 | insufficient_scope | — | la clave no tiene el permiso generate |
| 404 | not_found | model_not_found | no existe ningún modelo con este slug, o no está disponible |
| 409 | request_in_progress / idempotency_key_reuse | — | consulte Idempotencia |
| 429 | rate_limit_exceeded / concurrency_limit_exceeded | — | consulte Límites de solicitudes |
Cola de generación
Cómo funciona la cola asíncrona de la API REST de Clipia — envío de un trabajo, consulta del estado, obtención de resultados y webhooks para la generación de imágenes, vídeo y audio.
Estado de la solicitud
GET /v1/requests/{request_id}/status — una consulta ligera del estado y el progreso de una generación por su request_id. No se necesita ningún permiso adicional de la clave.