Documentazione API
Endpoint
Elaborazione immagini lato server
Utilizzo
1 Credito per immagine completata
Panoramica
RemoveZero offre un'API sincrona lato server per la rimozione dello sfondo. Invia un'immagine JPG, PNG o WebP in Base64 standard e ricevi un risultato PNG o WebP direttamente nella risposta JSON.
Prima di iniziare
- Accedi, apri l'area Personale e crea una chiave API.
- Copia la chiave completa quando viene mostrata e conservala sul tuo server.
- Assicurati che l'account abbia almeno 1 Credito disponibile.
- Codifica un'immagine supportata in Base64 standard senza prefisso data URL.
Avvio rapido
La prima richiesta richiede solo input.image_base64. Ometti input.output per mantenere l'output trasparente nelle dimensioni originali usato dai client esistenti.
curl --request POST --url https://removezero.com/api/v1/remove-background --header "Authorization: Bearer ${REMOVEZERO_API_KEY}" --header "Content-Type: application/json" --header "Idempotency-Key: image-2026-08-28-0001" --data '{"input":{"image_base64":"BASE64_IMAGE_DATA"}}'Autenticazione con una chiave Bearer
Crea una chiave API nell'area Personale e inviala nell'header Authorization di ogni richiesta.
Authorization: Bearer rz_live_your_api_key- Conserva le chiavi in una variabile d'ambiente del server o in un gestore dei segreti.
- Non inserire mai una chiave nel codice del browser, in app mobili, estensioni, URL, repository pubblici o log.
- Quando possibile, usa chiavi distinte per servizi o ambienti diversi.
- Revoca e sostituisci subito una chiave che potrebbe essere stata esposta.
Chiama l'API dal tuo server
Usa il percorso browser o client → il tuo server → API RemoveZero. La chiave Bearer autorizza l'elaborazione a pagamento, quindi un client pubblico non può mantenerla segreta. Le richieste server a pagamento devono omettere l'header Origin.
Invia una richiesta di rimozione dello sfondo
Invia dal server una richiesta JSON rigorosa. Gli header obbligatori vengono convalidati prima della riserva dei Crediti o dell'elaborazione.
POST https://removezero.com/api/v1/remove-background
Authorization: Bearer rz_live_your_api_key
Content-Type: application/json
Idempotency-Key: order-2026-08-25-0001Header obbligatori
Authorization: Bearer API KeyContent-Type: application/jsonIdempotency-Key: unique retry key
Corpo JSON
{
"input": {
"image_base64": "BASE64_IMAGE_DATA"
}
}- Content-Type deve essere application/json; è consentito un parametro charset.
- Content-Encoding deve essere omesso o identity; i corpi compressi vengono rifiutati.
- Non inviare l'header Origin.
- Idempotency-Key deve contenere 1–128 caratteri tra lettere, numeri, punti, trattini bassi, due punti o trattini.
- image_base64 deve contenere i byte dell'immagine in Base64 standard senza prefisso data:image/....
Personalizza l'output
L'oggetto input.output è facoltativo. Modifica la tela dopo la stessa singola inferenza di rimozione, quindi la personalizzazione non usa un altro Credito.
{
"input": {
"image_base64": "BASE64_IMAGE_DATA",
"output": {
"format": "webp",
"background": "#ffffff",
"width": 1600,
"height": 1600,
"padding_ratio": 0.08
}
}
}- format
- "png" o "webp"; il valore predefinito è "png".
- background
- "transparent" o un colore #RRGGBB a sei cifre; il valore predefinito è "transparent".
- width + height
- Dimensioni facoltative abbinate della tela: 32–4.096 px per lato e non oltre 4.194.304 pixel.
- padding_ratio
- Margine facoltativo del soggetto da 0 a 0,25 del lato più corto; il valore predefinito è 0.
Comportamento fisso di contenimento e centratura
L'adattamento non è un campo della richiesta. RemoveZero conserva sempre le proporzioni del soggetto e lo inserisce nello spazio disponibile.
- Il soggetto completo resta visibile e centrato.
- Il soggetto non viene ritagliato né deformato.
- Lo spazio restante usa trasparenza o il colore richiesto.
- Non sono supportati cover, ritaglio intelligente, posizioni gravity o coordinate arbitrarie.
Compatibilità con le versioni precedenti
I client esistenti possono omettere input.output e continuare a inviare solo input.image_base64. Aggiungi output solo per formato, sfondo, tela o margine personalizzati.
Risposta riuscita
Un'immagine completata restituisce HTTP 200 e utilizza 1 Credito. L'output include tipo di contenuto, dimensioni esatte della tela e dati Base64 da decodificare sul server.
HTTP/1.1 200 OK
Content-Type: application/json
{
"ok": true,
"id": "REQUEST_ID",
"status": "COMPLETED",
"output": {
"ok": true,
"content_type": "image/webp",
"width": 1600,
"height": 1600,
"output_base64": "BASE64_IMAGE_RESULT"
},
"usage": {
"units": 1,
"credits_used": 1
}
}Decodifica il risultato
- Conferma HTTP 200, ok: true e status: COMPLETED.
- Leggi output.content_type e accetta solo image/png o image/webp.
- Decodifica output.output_base64 una volta e salva i byte con l'estensione corretta.
- Se hai richiesto dimensioni, verifica output.width e output.height.
Il risultato viene restituito direttamente, non come URL permanente. Salva i byte decodificati nella tua applicazione se devi conservare o distribuire l'immagine.
import { writeFile } from "node:fs/promises";
const payload = await response.json();
if (!response.ok || payload.ok !== true || payload.status !== "COMPLETED") {
throw new Error(payload.error?.code ?? "REMOVEZERO_REQUEST_FAILED");
}
const { content_type: type, output_base64: base64 } = payload.output ?? {};
const extension = type === "image/png" ? "png" : type === "image/webp" ? "webp" : null;
if (!extension || typeof base64 !== "string") {
throw new Error("REMOVEZERO_OUTPUT_INVALID");
}
await writeFile(`removezero-result.${extension}`, Buffer.from(base64, "base64"));Addebiti e restituzione dei Crediti
Ogni richiesta elabora un'immagine. RemoveZero convalida la richiesta, riserva atomicamente 1 Credito e lo contabilizza solo dopo la riuscita della rimozione e dell'output richiesto. La personalizzazione non aggiunge un'altra inferenza o Credito.
Ciclo di vita del Credito
| Convalida | Un input non valido viene rifiutato prima dell'autorizzazione. | Nessun Credito utilizzato |
|---|---|---|
| Riserva | Un Credito viene riservato atomicamente. | 1 Credito trattenuto |
| Successo | Il risultato viene restituito e l'utilizzo completato. | credits_used: 1 |
| Errore verificato | La richiesta non riesce e la riserva viene restituita una volta. | credits_used: 0; credits_returned: 1 |
| Restituzione non risolta | La richiesta finale o la restituzione non sono ancora verificabili. | REFUND_PENDING |
Se la richiesta o il rimborso non sono ancora verificabili, l'API restituisce REFUND_PENDING con ID richiesta e Retry-After: 30. Mantieni la stessa Idempotency-Key e non inviare la stessa immagine con una chiave nuova.
HTTP/1.1 503 Service Unavailable
Retry-After: 30
Content-Type: application/json
{
"ok": false,
"error": {
"code": "REFUND_PENDING"
},
"request_id": "REQUEST_ID"
}Idempotenza e nuovi tentativi
Idempotency-Key è legata al corpo JSON serializzato esatto, inclusi immagine e campi di output. Conserva i byte originali della richiesta e la chiave.
- Stessa chiave e corpo identico: nuovo tentativo sicuro senza seconda riserva o elaborazione.
- Stessa chiave e corpo modificato: 409 IDEMPOTENCY_CONFLICT.
- Stessa chiave dopo una richiesta terminale: 409 IDEMPOTENCY_REPLAY_UNAVAILABLE; i risultati Base64 completati non vengono conservati per il replay.
- Chiave nuova: nuova richiesta che può riservare un altro Credito.
- Un JSON semanticamente uguale può differire se cambiano spazi, ordine delle proprietà o valori predefiniti espliciti.
Indicazioni Retry-After
- 429 RATE_LIMITED
- Attendi 60 secondi e riprova il corpo esatto con la stessa chiave.
- 503 REFUND_PENDING
- Attendi 30 secondi e riprova il corpo esatto con la stessa chiave.
- 503 UPSTREAM_BUSY
- Attendi 10 secondi. Usa una chiave nuova solo per un nuovo tentativo intenzionale.
- Timeout di rete o API_UNAVAILABLE
- Considera l'esito sconosciuto e conserva corpo e chiave originali fino alla risoluzione.
Esempi
Sostituisci i segnaposto sul server. La chiave API non deve mai essere esposta in un bundle pubblico del browser.
curl --request POST \
--url https://removezero.com/api/v1/remove-background \
--header 'Authorization: Bearer rz_live_your_api_key' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: order-2026-08-25-0001' \
--data '{"input":{"image_base64":"BASE64_IMAGE_DATA","output":{"format":"webp","background":"#ffffff","width":1600,"height":1600,"padding_ratio":0.08}}}'Configurazioni iniziali comuni
Queste configurazioni sono punti di partenza, non garanzie permanenti di conformità. I nomi delle piattaforme sono etichette, non valori enum dell'API.
PNG trasparente 1:1
{"format":"png","background":"transparent","width":1600,"height":1600,"padding_ratio":0.08}PNG trasparente 4:5
{"format":"png","background":"transparent","width":1600,"height":2000,"padding_ratio":0.08}PNG trasparente 3:4
{"format":"png","background":"transparent","width":1500,"height":2000,"padding_ratio":0.08}WebP bianco 16:9
{"format":"webp","background":"#ffffff","width":1920,"height":1080,"padding_ratio":0.08}Punto di partenza per catalogo Amazon
{"format":"webp","background":"#ffffff","width":2000,"height":2000,"padding_ratio":0.075}Punto di partenza per catalogo Shopify
{"format":"webp","background":"#ffffff","width":2048,"height":2048,"padding_ratio":0.08}Errori e risoluzione dei problemi
Gli errori usano uno stato HTTP stabile e un codice breve nella risposta JSON.
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"ok": false,
"error": {
"code": "ERROR_CODE"
}
}| HTTP | Codice | Significato |
|---|---|---|
| 400 | INVALID_REQUEST | Corpo JSON, struttura, dati Base64 o limiti dell'immagine decodificata non validi. |
| 400 | IDEMPOTENCY_KEY_REQUIRED | È necessaria una Idempotency-Key valida prima dell'addebito. |
| 401 | AUTH_REQUIRED | La chiave API manca, non è valida o è stata revocata. |
| 402 | INSUFFICIENT_BALANCE | L'account non ha Crediti sufficienti. |
| 403 | ORIGIN_DENIED | Le richieste server a pagamento devono omettere l'header Origin. |
| 409 | IDEMPOTENCY_CONFLICT | La stessa chiave è stata riutilizzata con dati diversi. |
| 409 | IDEMPOTENCY_REPLAY_UNAVAILABLE | Questa chiave è già stata elaborata. Usa una chiave nuova per una nuova immagine. |
| 413 | INVALID_REQUEST_SIZE | Il corpo JSON supera 7.500.000 byte. |
| 415 | UNSUPPORTED_MEDIA_TYPE | Content-Type deve essere application/json. |
| 415 | UNSUPPORTED_ENCODING | Content-Encoding deve essere identity o omesso. |
| 423 | ACCOUNT_FROZEN | L'account bloccato non può inviare lavori a pagamento. |
| 429 | RATE_LIMITED | Riduci la frequenza e riprova dopo Retry-After: 60. |
| 502 | UPSTREAM_ERROR | Il servizio di elaborazione ha restituito un risultato non valido. |
| 502 | UPSTREAM_UNAVAILABLE | Non è stato possibile raggiungere l'elaborazione. |
| 503 | UPSTREAM_BUSY | Elaborazione occupata; riprova dopo Retry-After: 10. |
| 503 | API_UNAVAILABLE | L'API è temporaneamente non disponibile. |
| 503 | REFUND_PENDING | La richiesta o la restituzione del Credito è ancora in sospeso; conserva la stessa chiave e attendi. |
Risoluzione sicura dei problemi
- Registra stato HTTP, codice di errore, request_id se presente, data e ora e Idempotency-Key.
- Non registrare né inviare mai la chiave Bearer, image_base64 completo o una risposta completa con dati immagine.
- Correggi gli errori 4xx di richiesta, credenziali, saldo o header prima di riprovare.
- Rispetta Retry-After e conserva corpo e chiave originali per le richieste non risolte.
- Contatta l'assistenza con identificatori non segreti se lo stato persiste.
Limiti della richiesta
Invia un'immagine JPG, PNG o WebP per richiesta in Base64 standard. L'input decodificato può essere al massimo 5 MiB e il corpo JSON completo 7.500.000 byte. L'output personalizzato è limitato a 4.096 px per lato e 4.194.304 pixel. Se il risultato esatto supera il limite della risposta diretta, l'elaborazione fallisce e il Credito riservato viene restituito; l'API non modifica mai in silenzio dimensioni o formato.
Input
- Una immagine JPG, PNG o WebP per richiesta.
- Base64 standard senza prefisso data URL.
- Immagine decodificata fino a 5 MiB; corpo JSON completo fino a 7.500.000 byte.
- Dimensioni da 32 a 12.000 px per lato e fino a 40 megapixel.
Output personalizzato
- PNG o WebP; sfondo trasparente o #RRGGBB.
- Tela da 32 a 4.096 px per lato e massimo 4.194.304 pixel.
- padding_ratio da 0 a 0,25.
- Risposta Base64 diretta e limitata; le richieste esatte non vengono ridimensionate o riformattate in silenzio.