O texto de referência técnica está em inglês; a navegação e os títulos estão traduzidos.
ClearCut API
Remova fundos de imagens e vídeos com uma única solicitação HTTP. Integre a ClearCut ao seu aplicativo, fluxo de trabalho ou back-end em minutos, sem precisar de infraestrutura de ML.
A API usa HTTP simples com corpos multipart ou JSON, então funciona em qualquer linguagem. Autentique-se com uma chave de API, envie uma imagem ou um vídeo e receba um recorte limpo.
Fácil de integrar
- • Uma chamada, qualquer linguagem — entrada multipart, URL ou base64; retorno em JSON, URL hospedada ou bytes brutos.
- • Cobrança previsível — os créditos só são cobrados em caso de sucesso; os créditos de vídeo são reservados, conciliados e reembolsados em caso de falha.
- • Assíncrono quando importa — o vídeo roda em segundo plano, com progresso, webhooks e cancelamento.
- • Controles de produção — limites de taxa por chave, tetos mensais e listas de IPs e domínios permitidos.
Primeiros passos
1. Crie uma conta e obtenha uma chave de API no seu painel.
2. Envie sua primeira solicitação:
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"As respostas são em JSON por padrão e incluem um result.url hospedado. Ou defina response_type=binary para receber os bytes da imagem diretamente.
Autenticação
Envie sua chave de API no cabeçalho X-API-Key. As chaves são criadas no painel e exibidas uma única vez (armazenadas como hash SHA-256).
Crie chaves por programação com o token de acesso do seu painel:
# 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" fieldRemoção de fundo de imagens
Aceita um arquivo enviado, uma URL ou uma string base64. Retorna um recorte transparente ou uma composição sobre um fundo de cor ou imagem.
| Parâmetro | Descrição |
|---|---|
| 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"Resposta
{
"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 }
}Remoção de fundo de vídeos
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 | Descrição |
|---|---|
| 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"Status da tarefa
{
"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 saída
| Formato | Transparência | Observações |
|---|---|---|
| PNG | Sim (≤10MP) | Ideal para recortes |
| JPG | Não | O menor, até 50MP |
| WebP | Sim | Compacto, até 50MP |
| ZIP | Sim | color.jpg e alpha.png |
| WebM (video) | Sim (alfa VP9) | Ideal para a web; reproduz direto na página |
| MOV (video) | Sim (ProRes 4444) | Fluxos de edição |
| MP4 (video) | Não | Exige fundo de cor ou imagem |
| GIF (video) | 1 bit | Pré-visualizações curtas (≤15 fps, ≤480 px) |
| ZIP frames | Sim | frames/, alpha/ e 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
Referência da API
URL base https://api.clearcutapi.com. A documentação interativa OpenAPI fica em /docs no host da API.
| Método | Caminho | Autenticação | Finalidade |
|---|---|---|---|
| GET | /api/v1/health | Nenhuma | 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 ou bearer | Job status, progress and result |
| POST | /api/v1/jobs/{job_id}/cancel | X-API-Key ou 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 | Nenhuma | Create an account + workspace |
| POST | /api/v1/auth/login | Nenhuma | Get access + refresh tokens |
| POST | /api/v1/auth/refresh | Token de atualização | 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 |
Limites de taxa
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_..."
}
}Backoff 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 erro
Os erros retornam um envelope consistente com um code estável, uma mensagem e um request_id.
Fluxos de trabalho
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"SDKs e 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.
Changelog da 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.