Saltar al contenido principal

Documentación

Documentación de la API

Crea tu primera imagen en cuatro pasos. La API está en https://api.cheapvids.com y cada llamada necesita tu clave de API.

Las guías detalladas y la referencia de la API están solo en inglés.

Inicio rápido

1. Obtén una clave de API

Las claves de API se habilitan después de tu primer pago en USDT. Crea una en la página de desarrollador de tu cuenta; se muestra una sola vez, así que guárdala en una variable de entorno. Mantenla en tu servidor.

2. Crea un trabajo

Envía el modelo, el prompt y el grupo al que se cobrará. El parámetro plan es obligatorio: "studio" o "credits". El sistema nunca cambia de grupo por ti.

curl https://api.cheapvids.com/v1/generations \
  -H "Authorization: Bearer $CHEAPVIDS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"plan":"credits","model":"nano-banana-2","params":{"prompt":"A lighthouse at dusk"}}'

3. Lee el resultado

Espera con ?wait=60 hasta que el trabajo se complete y luego descarga el archivo desde output.url. CheapVids retransmite los resultados durante un período limitado tras la finalización (24 horas por defecto), así que descárgalos de inmediato.

curl "https://api.cheapvids.com/v1/generations/$GENERATION_ID?wait=60" \
  -H "Authorization: Bearer $CHEAPVIDS_API_KEY"

# status "completed": download output.url right away
curl -L "$OUTPUT_URL" -o result.png
import os, uuid, requests

API = "https://api.cheapvids.com/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['CHEAPVIDS_API_KEY']}"

body = {"plan": "credits", "model": "nano-banana-2", "params": {"prompt": "A lighthouse at dusk"}}
r = s.post(f"{API}/generations", json=body, headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=120)
r.raise_for_status()
job = r.json()
while job["status"] not in ("completed", "failed", "cancelled"):
    r = s.get(f"{API}/generations/{job['id']}", params={"wait": 60}, timeout=90)
    r.raise_for_status()
    job = r.json()
if job["status"] == "completed":
    r = s.get(f"{API}/generations/{job['id']}/content", timeout=120)
    r.raise_for_status()
    open("result.png", "wb").write(r.content)
import { writeFile } from "node:fs/promises";

const API = "https://api.cheapvids.com/v1";
const auth = { Authorization: "Bearer " + process.env.CHEAPVIDS_API_KEY };
async function call(path, init = {}) {
  const res = await fetch(API + path, { ...init, headers: { ...auth, ...init.headers } });
  if (!res.ok) throw new Error(res.status + " " + (await res.text()));
  return res;
}

const body = { plan: "credits", model: "nano-banana-2", params: { prompt: "A lighthouse at dusk" } };
let job = await (await call("/generations", {
  method: "POST",
  headers: { "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify(body),
})).json();
while (!["completed", "failed", "cancelled"].includes(job.status)) {
  job = await (await call("/generations/" + job.id + "?wait=60")).json();
}
if (job.status === "completed") {
  const res = await call("/generations/" + job.id + "/content");
  await writeFile("result.png", Buffer.from(await res.arrayBuffer()));
}

4. O recibe un webhook

Registra un endpoint HTTPS para recibir los eventos generation.started, generation.completed y generation.failed, firmados con HMAC-SHA256. Cada evento se envía como máximo 4 veces: el primer envío y 3 reintentos a los 10, 60 y 300 segundos.

X-CheapVids-Event: generation.completed
X-CheapVids-Delivery: 0190a1b2-0000-7000-8000-000000000001
X-CheapVids-Signature: t=1760000000,v1=64e08ed860b53ecdca19eb0ef68dccefd1c7f3135a0a0e273d34a878d48b8ed5

Herramientas