Saltar al contenido

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

POST
/v1/models/{model}
Authorization<token>

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

modelstringrequired

Slug модели, напр. nano-banana-2, seedance-2-fast-i2v. Список — GET /v1/models. Слаги с пространством имён (google/imagen4, grok-imagine/text-to-video) передаются как есть (/v1/models/google/imagen4) либо с %2F.

Match^[a-z0-9][a-z0-9-]{0,200}(?:/[a-z0-9][a-z0-9-]{0,200})?$

Header Parameters

Idempotency-Key?string

UUID v4 для безопасных ретраев POST. Тот же ключ с теми же параметрами вернёт тот же request_id (без повторного списания). Срок хранения — 24 часа. Тот же ключ с другими параметрами → 409.

Formatuuid
inputobjectrequired

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

Empty Object

webhook_url?string

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

Formaturi

Response 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.

POST/v1/models/:model

Solicitud

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 input con el input_schema del modelo.
  • Los mismos warnings los devuelven la estimación del coste, una clave de prueba y un reintento con el mismo Idempotency-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.

HTTPcodemessageCuándo
400invalid_requestinvalid_modelel slug no tiene el formato correcto: letras minúsculas, dígitos, guiones
400invalid_requestprompt_requiredno hay prompt ni imagen o vídeo de origen
400invalid_requestinput_too_large / input_too_deepinput supera los 100.000 bytes o los 8 niveles de anidamiento
400invalid_requestidempotency_key_too_longIdempotency-Key tiene más de 255 caracteres
400invalid_requestwebhook_url_invalidwebhook_url no es HTTPS o apunta a una dirección interna
400invalid_requestmedia_url_invalidla URL de un archivo de origen apunta a una dirección interna
402insufficient_credits—no hay créditos suficientes, o la cuenta nunca ha hecho una compra (clave live)
402subscription_required—esta operación requiere una suscripción activa
403insufficient_scope—la clave no tiene el permiso generate
404not_foundmodel_not_foundno existe ningún modelo con este slug, o no está disponible
409request_in_progress / idempotency_key_reuse—consulte Idempotencia
429rate_limit_exceeded / concurrency_limit_exceeded—consulte Límites de solicitudes