Saltar para o conteúdo principal
RemoveZero

Documentação da API

Endpoint

Processamento de imagens no servidor

Utilização

1 Crédito por imagem concluída

Visão geral

O RemoveZero disponibiliza uma API síncrona do lado do servidor para remoção de fundos. Envie uma imagem JPG, PNG ou WebP em Base64 padrão e receba um resultado PNG ou WebP diretamente na resposta JSON.

Antes de começar

  1. Inicie sessão, abra a área Pessoal e crie uma chave de API.
  2. Copie a chave completa quando for apresentada e guarde-a no seu servidor.
  3. Certifique-se de que a conta tem pelo menos 1 Crédito disponível.
  4. Codifique uma imagem suportada em Base64 padrão, sem o prefixo de URL de dados.

Início rápido

O primeiro pedido precisa apenas de input.image_base64. Omita input.output para manter a saída transparente no tamanho original utilizada pelos clientes atuais.

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

Autenticação com uma chave Bearer

Crie uma chave de API na área Pessoal e envie-a no cabeçalho Authorization de cada pedido.

Authorization: Bearer rz_live_your_api_key
As chaves de API só são apresentadas por inteiro quando são criadas. Guarde a chave no gestor de segredos do servidor.
  • Guarde as chaves numa variável de ambiente do servidor ou num gestor de segredos.
  • Nunca coloque uma chave em código do navegador, aplicações móveis, extensões, URLs, repositórios públicos ou registos.
  • Sempre que possível, use chaves diferentes para serviços ou ambientes distintos.
  • Revogue e substitua imediatamente uma chave que possa ter sido exposta.

Chame a API a partir do seu servidor

Use o percurso navegador ou cliente → o seu servidor → API do RemoveZero. A chave Bearer pode autorizar processamento pago, por isso um cliente público não consegue mantê-la secreta. Os pedidos pagos do servidor devem omitir o cabeçalho Origin.

Envie um pedido de remoção de fundo

Envie um pedido JSON estrito a partir do seu servidor. Os cabeçalhos obrigatórios são validados antes da reserva de Créditos ou do processamento da imagem.

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-0001

Cabeçalhos obrigatórios

  • Authorization: Bearer API Key
  • Content-Type: application/json
  • Idempotency-Key: unique retry key

Corpo JSON

{
  "input": {
    "image_base64": "BASE64_IMAGE_DATA"
  }
}
  • Content-Type deve ser application/json; é permitido um parâmetro charset.
  • Content-Encoding deve ser omitido ou identity; corpos de pedido comprimidos são rejeitados.
  • Não envie o cabeçalho Origin.
  • Idempotency-Key deve ter entre 1 e 128 caracteres e usar letras, números, pontos, sublinhados, dois-pontos ou hífenes.
  • image_base64 deve conter os bytes da imagem em Base64 padrão, sem o prefixo data:image/....

Personalize a saída

O objeto input.output é opcional. Altera a tela após a mesma e única inferência de remoção de fundo, pelo que a personalização não utiliza outro Crédito.

{
  "input": {
    "image_base64": "BASE64_IMAGE_DATA",
    "output": {
      "format": "webp",
      "background": "#ffffff",
      "width": 1600,
      "height": 1600,
      "padding_ratio": 0.08
    }
  }
}
format
"png" ou "webp"; o valor predefinido é "png".
background
"transparent" ou uma cor #RRGGBB de seis dígitos; o valor predefinido é "transparent".
width + height
Dimensões de tela opcionais e emparelhadas: 32–4 096 px por lado e no máximo 4 194 304 píxeis.
padding_ratio
Margem opcional do objeto, de 0 a 0,25 do lado mais curto da tela; o valor predefinido é 0.

Comportamento fixo de contenção e centragem

O ajuste não é um campo do pedido. O RemoveZero preserva sempre a proporção do objeto e encaixa-o no espaço disponível da tela.

  • O objeto completo permanece visível e centrado.
  • O objeto não é cortado nem distorcido.
  • O espaço restante da tela usa transparência ou a cor solicitada.
  • Não são suportados preenchimento por cobertura, recorte inteligente, posições de gravidade ou coordenadas arbitrárias.

Compatibilidade com versões anteriores

Os clientes atuais podem omitir input.output e continuar a enviar apenas input.image_base64. Adicione output apenas quando precisar de um formato, fundo, tela ou margem personalizados.

Resposta bem-sucedida

Uma imagem concluída devolve HTTP 200 e utiliza 1 Crédito. A saída inclui o tipo de conteúdo e as dimensões exatas da tela, além dos dados Base64 que o seu servidor pode descodificar.

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

Descodifique o resultado

  1. Confirme HTTP 200, ok: true e status: COMPLETED.
  2. Leia output.content_type e aceite apenas image/png ou image/webp.
  3. Descodifique output.output_base64 uma vez e guarde os bytes com a extensão correspondente.
  4. Quando forem solicitadas dimensões, confirme output.width e output.height.

O resultado é devolvido diretamente, não como URL permanente. Guarde os bytes descodificados na sua aplicação se precisar de conservar ou entregar a imagem.

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"));

Faturação e devolução de Créditos

Cada pedido processa uma imagem. O RemoveZero valida o pedido, reserva atomicamente 1 Crédito e só o liquida depois de a remoção de fundo e a saída solicitada serem concluídas. A personalização da saída nunca acrescenta outra inferência nem outro Crédito.

Ciclo de vida do Crédito

ValidaçãoUma entrada inválida é rejeitada antes da autorização.Nenhum Crédito utilizado
ReservaÉ reservado atomicamente um Crédito.1 Crédito retido
SucessoO resultado é devolvido e a utilização é concluída.credits_used: 1
Falha confirmadaO pedido falha e a reserva é devolvida uma única vez.credits_used: 0; credits_returned: 1
Devolução por resolverAinda não é possível confirmar o pedido final ou a devolução.REFUND_PENDING

Se ainda não for possível confirmar o pedido ou a devolução, a API responde com REFUND_PENDING, o ID do pedido e Retry-After: 30. Mantenha a mesma Idempotency-Key e não envie a mesma imagem com uma chave nova.

HTTP/1.1 503 Service Unavailable
Retry-After: 30
Content-Type: application/json

{
  "ok": false,
  "error": {
    "code": "REFUND_PENDING"
  },
  "request_id": "REQUEST_ID"
}

Idempotência e novas tentativas

Idempotency-Key associa-se ao corpo JSON serializado exato, incluindo a imagem e todos os campos de saída fornecidos. Preserve os bytes originais do pedido, bem como a chave.

  • Mesma chave e corpo exatamente igual: nova tentativa segura, sem segunda reserva nem segundo pedido de processamento.
  • Mesma chave e corpo alterado: 409 IDEMPOTENCY_CONFLICT.
  • Mesma chave depois de um pedido terminal: 409 IDEMPOTENCY_REPLAY_UNAVAILABLE; os resultados Base64 concluídos não são guardados para repetição.
  • Chave nova: novo pedido que pode reservar outro Crédito.
  • Um corpo JSON semanticamente igual pode ainda ser diferente se os espaços, a ordem das propriedades ou os valores predefinidos explícitos mudarem.

Orientações de Retry-After

429 RATE_LIMITED
Aguarde 60 segundos e repita o corpo exato com a mesma chave.
503 REFUND_PENDING
Aguarde 30 segundos e repita o corpo exato com a mesma chave.
503 UPSTREAM_BUSY
Aguarde 10 segundos. Use uma chave nova apenas para uma tentativa nova e intencional.
Tempo limite de rede ou API_UNAVAILABLE
Considere o resultado desconhecido e mantenha o corpo e a chave originais até à resolução.

Exemplos

Substitua os marcadores no seu servidor. A chave de API nunca deve ser exposta num pacote público do navegador.

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}}}'

Pontos de partida comuns para a saída

Estas configurações são pontos de partida, não garantias permanentes de conformidade com plataformas ou categorias. Os nomes das plataformas são etiquetas, não valores enum da API.

PNG transparente 1:1

{"format":"png","background":"transparent","width":1600,"height":1600,"padding_ratio":0.08}

PNG transparente 4:5

{"format":"png","background":"transparent","width":1600,"height":2000,"padding_ratio":0.08}

PNG transparente 3:4

{"format":"png","background":"transparent","width":1500,"height":2000,"padding_ratio":0.08}

WebP branco 16:9

{"format":"webp","background":"#ffffff","width":1920,"height":1080,"padding_ratio":0.08}

Ponto de partida para catálogo Amazon

{"format":"webp","background":"#ffffff","width":2000,"height":2000,"padding_ratio":0.075}

Ponto de partida para catálogo Shopify

{"format":"webp","background":"#ffffff","width":2048,"height":2048,"padding_ratio":0.08}

Erros e resolução de problemas

Os erros usam um estado HTTP estável e um código curto na resposta JSON.

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  "ok": false,
  "error": {
    "code": "ERROR_CODE"
  }
}
HTTPCódigoSignificado
400INVALID_REQUESTO corpo JSON, a estrutura, os dados Base64 ou os limites da imagem descodificada são inválidos.
400IDEMPOTENCY_KEY_REQUIREDÉ necessária uma Idempotency-Key válida antes da cobrança.
401AUTH_REQUIREDA chave de API está ausente, é inválida ou foi revogada.
402INSUFFICIENT_BALANCEA conta não tem Créditos suficientes.
403ORIGIN_DENIEDOs pedidos pagos do servidor devem omitir o cabeçalho Origin.
409IDEMPOTENCY_CONFLICTA mesma chave foi reutilizada com dados diferentes.
409IDEMPOTENCY_REPLAY_UNAVAILABLEEsta chave de pedido já foi processada. Use uma chave nova para uma nova imagem.
413INVALID_REQUEST_SIZEO corpo do pedido JSON tem mais de 7 500 000 bytes.
415UNSUPPORTED_MEDIA_TYPEContent-Type deve ser application/json.
415UNSUPPORTED_ENCODINGContent-Encoding deve ser identity ou omitido.
423ACCOUNT_FROZENA conta não pode enviar trabalho pago enquanto estiver bloqueada.
429RATE_LIMITEDReduza a frequência e tente novamente depois de Retry-After: 60.
502UPSTREAM_ERRORO serviço de processamento devolveu um resultado inválido.
502UPSTREAM_UNAVAILABLENão foi possível contactar o processamento.
503UPSTREAM_BUSYO processamento está ocupado; tente novamente depois de Retry-After: 10.
503API_UNAVAILABLEA API está temporariamente indisponível.
503REFUND_PENDINGO pedido ou a devolução do Crédito ainda está pendente; mantenha a mesma chave e aguarde.

Resolução segura de problemas

  1. Registe o estado HTTP, o código de erro, request_id quando existir, a data e hora e a Idempotency-Key.
  2. Nunca registe nem envie a chave Bearer, o image_base64 completo ou uma resposta completa com dados de imagem.
  3. Corrija os erros 4xx de pedido, credenciais, saldo ou cabeçalhos antes de tentar novamente.
  4. Respeite Retry-After e preserve o corpo e a chave originais para pedidos por resolver.
  5. Contacte o suporte com identificadores não secretos se um estado por resolver persistir.

Limites do pedido

Envie uma imagem JPG, PNG ou WebP por pedido em Base64 padrão. A entrada descodificada pode ter no máximo 5 MiB e o corpo JSON completo no máximo 7 500 000 bytes. A saída personalizada está limitada a 4 096 px por lado e 4 194 304 píxeis. Se o resultado exato não couber no limite da resposta direta, o processamento falha e o Crédito reservado é devolvido; a API nunca altera silenciosamente o tamanho ou o formato pedido.

Entrada

  • Uma imagem JPG, PNG ou WebP por pedido.
  • Base64 padrão sem prefixo de URL de dados.
  • Imagem descodificada até 5 MiB; corpo JSON completo até 7 500 000 bytes.
  • Dimensões de entrada entre 32 e 12 000 px por lado e até 40 megapíxeis.

Saída personalizada

  • PNG ou WebP; fundo transparente ou #RRGGBB.
  • Tela entre 32 e 4 096 px por lado e no máximo 4 194 304 píxeis.
  • padding_ratio entre 0 e 0,25.
  • Resposta Base64 direta e limitada; os pedidos exatos nunca são redimensionados ou reformatados silenciosamente.