Il testo di riferimento tecnico è in inglese; navigazione e titoli sono tradotti.

ClearCut API

Rimuovi lo sfondo da immagini e video con una sola richiesta HTTP. Integra ClearCut nella tua app, nel tuo workflow o nel backend in pochi minuti, senza infrastruttura ML.

POSThttps://api.clearcutapi.com/api/v1/removebg

L'API usa HTTP semplice con body multipart o JSON, quindi funziona con qualsiasi linguaggio. Autenticati con una chiave API, invia un'immagine o un video e ricevi un ritaglio pulito.

Facile da integrare

  • • Una chiamata, qualsiasi linguaggio: input multipart, URL o base64; in risposta JSON, URL ospitato o byte grezzi.
  • • Fatturazione prevedibile: i crediti vengono addebitati solo in caso di successo; quelli dei video vengono riservati, riconciliati e rimborsati in caso di errore.
  • • Asincrono quando serve: i video girano in background con avanzamento, webhook e annullamento.
  • • Controlli per la produzione: limiti di frequenza per chiave, tetti mensili, liste di IP e domini consentiti.

Per iniziare

1. Crea un account e prendi una chiave API dalla dashboard.

2. Invia la tua prima richiesta:

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"

Le risposte sono in JSON per impostazione predefinita e includono un result.url ospitato; oppure imposta response_type=binary per ricevere direttamente i byte dell'immagine.

Autenticazione

Invia la tua chiave API nell'header X-API-Key. Le chiavi si creano nella dashboard e vengono mostrate una sola volta (salvate come hash SHA-256).

X-API-Key: clearcut_live_xxxxxxxxxxxxxxxxxxxxxxxxx

Crea le chiavi via codice con il token di accesso della dashboard:

# 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" field

Rimozione dello sfondo dalle immagini

POST/api/v1/removebg

Accetta un file caricato, un URL o una stringa base64. Restituisce un ritaglio trasparente o una composizione su uno sfondo a colore o immagine.

ParametroDescrizione
image_file / image_url / image_file_b64Source image — provide exactly one. JPG, PNG or WebP, up to 22 MB / 50 MP.
sizepreview | full | auto (default auto). Preview is ~0.25 MP and costs 0.25 credit.
formatpng | jpg | webp | zip | auto (default auto: PNG if transparent, else JPG).
typeauto | person | product | animal | car | graphic | transportation. person uses a portrait-tuned model.
bg_colortransparent | white | black | #RRGGBB (+0.5 credit when not transparent).
bg_image_urlComposite onto this image instead (+0.5 credit).
croptrue | false — crop to the subject.
marginPixels of padding around the cropped subject (0–500).
shadowtrue | false — add a soft drop shadow.
response_typejson (default) | url | binary — binary streams the file bytes.
webhook_urlOptional. 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"

Risposta

{
  "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 }
}

Rimozione dello sfondo dai video

POST/api/v1/remove-video-bg

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.

ParametroDescrizione
video_file / video_url / video_file_b64Source video — exactly one. MP4, MOV, WebM or AVI; up to 200 MB, 60 s, 1080p.
formatwebm | mov | mp4 | gif | zip_frames (default: webm when transparent, mp4 otherwise).
backgroundtransparent | color | image (default transparent).
bg_colorHex color, white or black — required with background=color.
bg_image_urlBackground image — required with background=image.
fps15 | 24 | 30 — output frame rate (never above the source).
resolutionoriginal | 720p | 1080p — longest side 1280 or 1920 px.
webhook_urlOptional. 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"

Stato del job

{
  "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 }
}

Formati di output

FormatoTrasparenzaNote
PNGSì (≤10MP)Ideale per i ritagli
JPGNoIl più leggero, fino a 50MP
WebPSìCompatto, fino a 50MP
ZIPSìcolor.jpg e alpha.png
WebM (video)Sì (alpha VP9)Ideale per il web; si riproduce inline
MOV (video)Sì (ProRes 4444)Flussi di montaggio
MP4 (video)NoRichiede uno sfondo a colore o immagine
GIF (video)1 bitAnteprime brevi (≤15 fps, ≤480 px)
ZIP framesSì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

Riferimento API

URL base https://api.clearcutapi.com. La documentazione OpenAPI interattiva è disponibile su /docs nell'host dell'API.

MetodoPercorsoAutenticazioneScopo
GET/api/v1/healthNessunaService health
POST/api/v1/removebgX-API-KeyRemove an image background (synchronous)
POST/api/v1/remove-video-bgX-API-KeyStart an async video job
GET/api/v1/jobs/{job_id}X-API-Key o bearerJob status, progress and result
POST/api/v1/jobs/{job_id}/cancelX-API-Key o bearerCancel a queued/processing job (refunds credits)
GET/api/v1/remove-video-bg/{job_id}X-API-KeyAlias of job status for video jobs
POST/api/v1/auth/registerNessunaCreate an account + workspace
POST/api/v1/auth/loginNessunaGet access + refresh tokens
POST/api/v1/auth/refreshToken di aggiornamentoRotate tokens
POST/api/v1/auth/logoutBearerRevoke all sessions
GET/api/v1/meBearerCurrent user, workspace, role and credits
GET / POST/api/v1/api-keysBearerList / create API keys
PATCH / DELETE/api/v1/api-keys/{id}BearerEdit restrictions / revoke
POST/api/v1/api-keys/{id}/regenerateBearerRotate a key's secret
GET/api/v1/usageBearerUsage analytics
GET / POST/api/v1/webhooksBearerManage webhook endpoints

Limiti di frequenza

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 esponenziale

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()

Webhook

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

Codici di errore

Gli errori restituiscono un envelope coerente con un code stabile, un messaggio e un request_id.

missing_api_key · 401invalid_api_key · 401revoked_api_key · 401inactive_tenant · 403ip_not_allowed · 403domain_not_allowed · 403plan_limit · 403insufficient_credits · 402rate_limit_exceeded · 429monthly_limit_exceeded · 429invalid_file_type · 422file_too_large · 413image_too_large · 422video_too_long · 422invalid_image_url · 422invalid_video_url · 422invalid_base64 · 422no_image_source · 422multiple_image_sources · 422validation_error · 422processing_failed · 500storage_failed · 500webhook_failed · 500internal_error · 500

Workflow

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.

POST/api/v1/workflows/{id}/runs
# 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 e librerie

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 dell'API

2026-10-24
  • • Workflows and the Catalog Agent: /workflows, /workflow-runs, budgets, approvals, publishing.
  • • Video Studio: /studio/video/jobs with 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.
2026-10-23
  • • 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. New POST /jobs/{id}/cancel.
  • • API key IP/domain allow-lists, monthly caps, regeneration; workspace, IP and endpoint rate limits.
  • • Per-request webhook_url on image and video requests. Job ids now start with job_.
  • • New error codes: monthly_limit_exceeded, ip_not_allowed, domain_not_allowed, plan_limit.
2026-06-09
  • • Video background removal (async jobs, transparent alpha WebM output, preserved audio).
  • • Signed webhooks for job lifecycle events.
  • • Stripe-ready billing and credit packages.
2026-06-08
  • • Initial release: image background removal, API keys, credits, usage analytics.