Desarrolladores
Vídeos con IA desde tus propios sistemas
Una API REST asíncrona e idempotente, webhooks firmados con reintentos, SDKs oficiales y un servidor MCP para agentes. Precio garantizado antes de producir.
La API, los webhooks y el MCP están en los planes Pro y Agency.
Empieza en 5 pasos
- 1Crea una clave de API
En el Studio: Integraciones → API REST → «Crear clave de API». Se muestra una sola vez.
- 2Cotiza
POST /v1/estimates con la misma petición que vas a crear: el precio máximo garantizado en créditos (1 crédito = US$0,01).
- 3Crea el trabajo
POST /v1/jobs con Idempotency-Key: si repites la petición, no se crea ni se cobra dos veces. Responde 202 con el id.
- 4Síguelo
Con webhooks (recomendado), con eventos en vivo (SSE) en /v1/jobs/{id}/events o consultando GET /v1/jobs/{id}.
- 5Descarga o publica
Al terminar, result.videos trae los archivos; publícalos en redes conectadas con POST /v1/publications.
# 1) cotiza · quote
curl https://api.creavideosconia.com/v1/estimates -H "Authorization: Bearer $AIVS_API_KEY" -H "Content-Type: application/json" \
-d '{"kind":"idea","idea":"3 errores al elegir zapatillas para correr","channels":["tiktok"]}'
# 2) crea · create (idempotent)
curl https://api.creavideosconia.com/v1/jobs -H "Authorization: Bearer $AIVS_API_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: pedido-123" \
-d '{"kind":"idea","idea":"3 errores al elegir zapatillas para correr","channels":["tiktok"]}'
# → 202 {"id":"job_…","status":"queued",…}
# 3) sigue · follow
curl -N https://api.creavideosconia.com/v1/jobs/job_…/events -H "Authorization: Bearer $AIVS_API_KEY"Autenticación, límites y errores
- Envía Authorization: Bearer aivs_… en cada petición. Guardamos solo la huella de la clave; revócala cuando quieras.
- Cada respuesta trae X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset; si te pasas, 429 con Retry-After. Tu uso por clave: GET /v1/usage/api.
- Los errores siguen RFC 7807: type, title, status, detail y request_id (dánoslo si escribes a soporte).
- Todo va por HTTPS (TLS 1.2 o superior). Los trabajos fallidos por nuestra parte no se cobran.
Webhooks
Te avisamos en tu servidor cuando algo pasa. Suscríbete en Integraciones o con POST /v1/webhooks; el secreto de firma se muestra una sola vez.
| Evento | Qué significa |
|---|---|
| credits.low | The available credits dropped below the low-balance threshold |
| job.canceled | The job was canceled |
| job.failed | The job failed; nothing was charged for the failed run |
| job.needs_review | The script is ready and waits for approval (approve or edit it) |
| job.queued | A job was accepted and waits for a worker |
| job.retrying | A step failed and is being retried automatically |
| job.started | A worker started producing the job |
| job.succeeded | The job finished: its videos and files are ready |
| order.paid | A payment was confirmed: credits or a plan were added |
| order.refunded | A payment was voided or refunded: its credits were taken back |
| publication.failed | A scheduled publication failed for good |
| publication.published | A video was published on a connected network |
| renewal.failed | The automatic renewal charge was declined |
| review.approved | Your client approved a video through an approval link |
| review.changes_requested | Your client asked for changes through an approval link |
Verifica la firma
Cada aviso trae X-AIVS-Timestamp y X-AIVS-Signature = hex(HMAC-SHA256(secreto, timestamp + "." + cuerpo)). Verifica sobre el cuerpo crudo, en tiempo constante, y rechaza marcas de tiempo de más de 5 minutos. Mientras rotas el secreto, el anterior firma en X-AIVS-Signature-Previous.
# Without the SDK (Python standard library)
import hashlib, hmac, time
def valid(body: bytes, ts: str, signature: str, secret: str) -> bool:
if abs(time.time() - int(ts)) > 300:
return False
good = hmac.new(secret.encode(), ts.encode() + b"." + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(good, signature)Entregas y reintentos
- Responde 2xx en menos de 10 s; procesa en segundo plano si tarda.
- Si falla, reintentamos con espera creciente (10 s … 1 h) hasta 8 veces, durante cerca de un día.
- X-AIVS-Delivery trae el id del evento (el mismo en cada reintento): úsalo para ignorar duplicados.
- Si respondes 410 Gone, pausamos el webhook. Ves cada entrega, su respuesta y la reenvías desde Integraciones o la API.
SDKs oficiales
Reintentos con espera, idempotencia automática y verificación de webhooks incluidos.
import { CreaVideos, verifyWebhook, WebhookError } from "creavideosconia";
const api = new CreaVideos({ apiKey: process.env.AIVS_API_KEY! });
const job = await api.jobs.create({ kind: "idea", idea: "3 errores al elegir zapatillas", channels: ["tiktok"] });
// Next.js route handler (any Fetch-API runtime)
export async function POST(req: Request) {
const raw = await req.text(); // RAW body, before JSON.parse
try {
const event = await verifyWebhook(raw, req.headers, process.env.AIVS_WEBHOOK_SECRET!);
if (event.type === "job.succeeded") { /* event.data.videos … */ }
return new Response("ok");
} catch (e) {
if (e instanceof WebhookError) return new Response("bad signature", { status: 400 });
throw e;
}
}from creavideosconia import Client, verify_webhook, WebhookError
api = Client("https://api.creavideosconia.com", "aivs_…")
job = api.create_job({"kind": "idea", "idea": "3 errores al elegir zapatillas", "channels": ["tiktok"]})
# Flask / FastAPI / Django: pass the RAW body and the headers
def webhook(body: bytes, headers) -> int:
try:
event = verify_webhook(body, headers, "whsec_…")
except WebhookError:
return 400
if event["type"] == "job.succeeded":
...
return 200MCP para agentes de IA
Claude, ChatGPT, Cursor y otros agentes crean y publican vídeos con tu cuenta. Se conectan con OAuth (pulsas «Permitir») o con una clave de API, y siempre cotizan antes de producir.
https://mcp.creavideosconia.com/mcpTu próximo vídeo está a una idea.
Crea una cuenta gratis, elige tu sector y mira tu primer vídeo producirse en unos 4 minutos, con su costo al centavo.
Sin tarjeta · créditos de prueba · en español