El texto de la referencia técnica está en inglés; la navegación y los títulos están traducidos.
ClearCut API
Elimina fondos de imágenes y videos con una sola solicitud HTTP. Integra ClearCut en tu aplicación, flujo de trabajo o backend en minutos, sin infraestructura de ML.
La API usa HTTP plano con cuerpos multipart o JSON, así que funciona desde cualquier lenguaje. Autentícate con una clave de API, envía una imagen o un video y recibe un recorte limpio.
Fácil de integrar
- • Una llamada, cualquier lenguaje: entrada multipart, URL o base64; respuesta en JSON, URL alojada o bytes sin procesar.
- • Facturación predecible: los créditos solo se cobran si el proceso tiene éxito; los de video se reservan, se concilian y se reembolsan si falla.
- • Asíncrono cuando importa: el video se procesa en segundo plano con progreso, webhooks y cancelación.
- • Controles de producción: límites por clave, topes mensuales y listas de IP y dominios permitidos.
Primeros pasos
1. Crea una cuenta y obtén una clave de API en tu panel.
2. Envía tu primera solicitud:
curl -X POST "https://api.clearcutapi.com/api/v1/removebg" \
-H "X-API-Key: clearcut_live_YOUR_KEY" \
-F "image_file=@/path/to/image.jpg" \
-F "format=png" \
-F "size=auto"Las respuestas son JSON por defecto e incluyen un result.url alojado, o usa response_type=binary para recibir directamente los bytes de la imagen.
Autenticación
Envía tu clave de API en el encabezado X-API-Key. Las claves se crean en el panel y se muestran una sola vez (se guardan como hash SHA-256).
Crea claves por programa con el token de acceso de tu panel:
# Create an API key (use your dashboard JWT)
curl -X POST "https://api.clearcutapi.com/api/v1/api-keys" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"name": "Production", "mode": "live"}'
# -> the full key is returned ONCE in the "key" fieldEliminación de fondo en imágenes
Acepta un archivo subido, una URL o una cadena base64. Devuelve un recorte transparente o una composición sobre un fondo de color o imagen.
| Parámetro | Descripción |
|---|---|
| image_file / image_url / image_file_b64 | Source image — provide exactly one. JPG, PNG or WebP, up to 22 MB / 50 MP. |
| size | preview | full | auto (default auto). Preview is ~0.25 MP and costs 0.25 credit. |
| format | png | jpg | webp | zip | auto (default auto: PNG if transparent, else JPG). |
| type | auto | person | product | animal | car | graphic | transportation. person uses a portrait-tuned model. |
| bg_color | transparent | white | black | #RRGGBB (+0.5 credit when not transparent). |
| bg_image_url | Composite onto this image instead (+0.5 credit). |
| crop | true | false — crop to the subject. |
| margin | Pixels of padding around the cropped subject (0–500). |
| shadow | true | false — add a soft drop shadow. |
| response_type | json (default) | url | binary — binary streams the file bytes. |
| webhook_url | Optional. Receives this job's job.completed / job.failed events, signed. |
curl -X POST "https://api.clearcutapi.com/api/v1/removebg" \
-H "X-API-Key: clearcut_live_YOUR_KEY" \
-F "image_file=@/path/to/image.jpg" \
-F "format=png" \
-F "size=auto"Respuesta
{
"success": true,
"job_id": "job_3f9c2a71b0d84e6c9a1f5e2d7b40",
"status": "completed",
"result": {
"url": "https://cdn.clearcutapi.com/results/.../job_3f9c....png",
"format": "png",
"width": 1200,
"height": 1200,
"expires_at": "2026-12-31T23:59:59Z"
},
"usage": { "credits_used": 1, "credits_remaining": 999 }
}Eliminación de fondo en videos
Asynchronous — the request validates the clip, reserves credits and returns a queued job. Poll GET /api/v1/jobs/{job_id} or listen for webhooks. Requires a Pro plan or higher. Transparent output defaults to an alpha-channel .webm (VP9); backgrounds default to .mp4. Audio is preserved.
| Parámetro | Descripción |
|---|---|
| video_file / video_url / video_file_b64 | Source video — exactly one. MP4, MOV, WebM or AVI; up to 200 MB, 60 s, 1080p. |
| format | webm | mov | mp4 | gif | zip_frames (default: webm when transparent, mp4 otherwise). |
| background | transparent | color | image (default transparent). |
| bg_color | Hex color, white or black — required with background=color. |
| bg_image_url | Background image — required with background=image. |
| fps | 15 | 24 | 30 — output frame rate (never above the source). |
| resolution | original | 720p | 1080p — longest side 1280 or 1920 px. |
| webhook_url | Optional. Receives job.created / started / processing / completed / failed. |
Credits: 5 per job + 1 per second, ×1.5 for HD (≥1280 px), +2 for a custom background. The estimate is reserved up front; unused credits are returned when the job finishes, and everything is refunded if it fails or you cancel it (POST /api/v1/jobs/{job_id}/cancel).
# 1. Start the job (returns job_id + status_url)
curl -X POST "https://api.clearcutapi.com/api/v1/remove-video-bg" \
-H "X-API-Key: clearcut_live_YOUR_KEY" \
-F "video_file=@/path/to/clip.mp4" \
-F "format=webm" \
-F "background=transparent"
# 2. Poll the status_url until status == "completed"
curl "https://api.clearcutapi.com/api/v1/jobs/JOB_ID" \
-H "X-API-Key: clearcut_live_YOUR_KEY"Estado del trabajo
{
"success": true,
"job_id": "job_8d1e...",
"type": "video",
"status": "processing", // queued | processing | completed | failed | cancelled | expired
"progress": 45,
"message": "Removing background from video frames.",
"result": null, // filled in when completed: url, format, width, height, duration, poster_url
"usage": { "credits_used": 24, "credits_remaining": 976 }
}Formatos de salida
| Formato | Transparencia | Notas |
|---|---|---|
| PNG | Sí (≤10MP) | Ideal para recortes |
| JPG | No | El más ligero, hasta 50MP |
| WebP | Sí | Compacto, hasta 50MP |
| ZIP | Sí | color.jpg y alpha.png |
| WebM (video) | Sí (alfa VP9) | Ideal para la web; se reproduce en la página |
| MOV (video) | Sí (ProRes 4444) | Flujos de edición |
| MP4 (video) | No | Requiere un fondo de color o imagen |
| GIF (video) | 1 bit | Vistas previas cortas (≤15 fps, ≤480 px) |
| ZIP frames | Sí | frames/, alpha/ y metadata.json |
Formato ZIP
For apps that composite layers themselves. format=zip on images returns:
color.jpg # full-color image (RGB, no alpha) alpha.png # 8-bit matte: 255 = subject, 0 = background metadata.json # width, height, file names
Apply alpha.png as the alpha channel of color.jpg to rebuild the cutout. Video jobs withformat=zip_frames return the same idea per frame:
frames/00001.jpg ... # color frames alpha/00001.png ... # matching mattes metadata.json # frame_count, fps, width, height
Referencia de la API
URL base https://api.clearcutapi.com. La documentación interactiva de OpenAPI está en /docs en el host de la API.
| Método | Ruta | Autenticación | Finalidad |
|---|---|---|---|
| GET | /api/v1/health | Ninguna | Service health |
| POST | /api/v1/removebg | X-API-Key | Remove an image background (synchronous) |
| POST | /api/v1/remove-video-bg | X-API-Key | Start an async video job |
| GET | /api/v1/jobs/{job_id} | X-API-Key o bearer | Job status, progress and result |
| POST | /api/v1/jobs/{job_id}/cancel | X-API-Key o bearer | Cancel a queued/processing job (refunds credits) |
| GET | /api/v1/remove-video-bg/{job_id} | X-API-Key | Alias of job status for video jobs |
| POST | /api/v1/auth/register | Ninguna | Create an account + workspace |
| POST | /api/v1/auth/login | Ninguna | Get access + refresh tokens |
| POST | /api/v1/auth/refresh | Token de actualización | Rotate tokens |
| POST | /api/v1/auth/logout | Bearer | Revoke all sessions |
| GET | /api/v1/me | Bearer | Current user, workspace, role and credits |
| GET / POST | /api/v1/api-keys | Bearer | List / create API keys |
| PATCH / DELETE | /api/v1/api-keys/{id} | Bearer | Edit restrictions / revoke |
| POST | /api/v1/api-keys/{id}/regenerate | Bearer | Rotate a key's secret |
| GET | /api/v1/usage | Bearer | Usage analytics |
| GET / POST | /api/v1/webhooks | Bearer | Manage webhook endpoints |
Límites de uso
Limits apply per API key (your plan's limit, or a lower one you set on the key), per workspace across all keys, per IP address, and per endpoint (video submissions are capped at a quarter of the key limit). Keys can also carry a monthly call cap.
Every API response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"success": false,
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit reached (api key). Retry after 60 seconds.",
"retry_after": 60,
"request_id": "req_..."
}
}Retroceso exponencial
On 429 or a 5xx, wait and retry with growing delays: honor Retry-Afterwhen present, otherwise wait 1s, 2s, 4s, 8s… (capped) with random jitter. Don't retry other 4xx errors — fix the request.
import random, time, requests
def remove_bg_with_retry(path, max_attempts=5):
for attempt in range(max_attempts):
with open(path, "rb") as fh:
resp = requests.post(
"https://api.clearcutapi.com/api/v1/removebg",
headers={"X-API-Key": "clearcut_live_YOUR_KEY"},
files={"image_file": fh},
)
if resp.status_code != 429 and resp.status_code < 500:
return resp # success, or a 4xx you should fix rather than retry
retry_after = resp.headers.get("Retry-After")
delay = float(retry_after) if retry_after else min(2 ** attempt, 30)
time.sleep(delay + random.uniform(0, 0.5)) # jitter
resp.raise_for_status()Webhooks
Register endpoints in the dashboard to receive signed event notifications (job.completed, job.failed,credits.low, and more). Verify theX-ClearCut-Signature header:
import hmac, hashlib, time
def verify(secret, body, header, tolerance=300):
parts = dict(p.split("=", 1) for p in header.split(","))
if abs(time.time() - int(parts["t"])) > tolerance:
return False
expected = hmac.new(
secret.encode(), f"{parts['t']}.{body}".encode(), hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, parts["v1"])Events: job.created, job.started, job.processing, job.completed, job.failed,credits.low, api_key.rate_limited. Failed deliveries retry with exponential backoff.
You can also pass webhook_url on a single request. Those deliveries are signed with your workspace signing secret (Dashboard → Webhooks → Per-request webhook URLs).
Códigos de error
Los errores devuelven un formato coherente con un code estable, un mensaje y un request_id.
Flujos de trabajo
Chain steps into a reusable, versioned pipeline: remove background → QualityGuard gate → compose / AI background → enhance → marketplace export presets → human approval → publish to your store. Every run has a hard max_credits budget, a dry-run quote, step-by-step history and a CSV/JSON manifest. Nothing is published without an approval.
# Quote first (nothing is charged)
curl -X POST "https://api.clearcutapi.com/api/v1/workflows/WORKFLOW_ID/runs" -H "X-API-Key: clearcut_live_YOUR_KEY" -H "Content-Type: application/json" -d '{"inputs": {"asset_ids": ["ASSET_ID"]}, "max_credits": 10, "dry_run": true}'
# Run it under a hard budget, then follow step-by-step progress
curl -X POST "https://api.clearcutapi.com/api/v1/workflows/WORKFLOW_ID/runs" -H "X-API-Key: clearcut_live_YOUR_KEY" -H "Content-Type: application/json" -H "Idempotency-Key: catalog-2026-10-24" -d '{"inputs": {"asset_ids": ["ASSET_ID"]}, "max_credits": 10}'
curl "https://api.clearcutapi.com/api/v1/workflow-runs/RUN_ID" -H "X-API-Key: clearcut_live_YOUR_KEY"SDK y bibliotecas
Official SDKs for Python and TypeScript/JavaScript send an Idempotency-Key on every job-creating call, retry 429 and 5xx with exponential backoff (honouring Retry-After), raise typed errors and verify webhook signatures.
# pip install clearcut-api
from clearcut import ClearCut, RateLimitError
cc = ClearCut("clearcut_live_YOUR_KEY")
result = cc.remove_background("product.jpg", format="png")
print(result.url, result.usage.credits_used)
# Async video: start and wait
job = cc.remove_video_background("clip.mp4", format="webm", wait=True)
print(job.result.url)Prefer generating your own client? Use the OpenAPI schema or import the Postman collection from docs/postman/clearcut.postman_collection.json.
Registro de cambios de la API
- • Workflows and the Catalog Agent:
/workflows,/workflow-runs, budgets, approvals, publishing. - • Video Studio:
/studio/video/jobswith trim, reframe, blur/AI backgrounds, overlays and multi-export. - • AI backgrounds (
/backgrounds/generate) and AI erase (/images/inpaint). - • Official Python and TypeScript SDKs, Postman collection.
- • New webhook events:
workflow.*,integration.publish_*,subscription.updated.
- • Video options: format (webm, mov, mp4, gif, zip_frames), background color/image, fps, resolution, webhook_url.
- •
GET /jobs/{id}accepts API keys and returns progress, message, result and usage. NewPOST /jobs/{id}/cancel. - • API key IP/domain allow-lists, monthly caps, regeneration; workspace, IP and endpoint rate limits.
- • Per-request
webhook_urlon image and video requests. Job ids now start withjob_. - • New error codes: monthly_limit_exceeded, ip_not_allowed, domain_not_allowed, plan_limit.
- • Video background removal (async jobs, transparent alpha WebM output, preserved audio).
- • Signed webhooks for job lifecycle events.
- • Stripe-ready billing and credit packages.
- • Initial release: image background removal, API keys, credits, usage analytics.