EraseText
um removedor de texto por IA especializado para fotos e gráficos
Documentação
Mesmo modelo especializado de apagamento de texto que All text e Select no editor. Autentique com uma chave de API em Conta → Desenvolvedor. As chamadas usam créditos de API pré-pagos (escada abaixo) ou os créditos mensais de um plano em Preços.
URL Base
https://api.erasetext.com/v1
Cada caminho abaixo é relativo a esta base. Apenas HTTPS. OpenAPI: /openapi.json.
Autenticação
X-Api-Key: et_…
Criar sua primeira chave concede um teste único de 50 créditos de API — 50 chamadas, sem cartão. Depois disso, uma chave gasta primeiro seus créditos de API pré-pagos e depois os créditos mensais do plano.
Demonstrações em navegador / HTML
Uma página web deve chamar a API HTTP, não MCP JSON-RPC. MCP é para runtimes de agentes (Cursor, Claude Desktop). De um navegador, POST multipart FormData com campo image_file ou image. CORS está aberto — sem proxy. A autenticação pode ser X-Api-Key ou Authorization: Bearer et_…. Playground funcional: api.erasetext.com/demo.
const body = new FormData();
body.append("image_file", file); // a File from <input type="file">
const res = await fetch("https://api.erasetext.com/v1/erase", {
method: "POST",
headers: { "X-Api-Key": "et_…" },
body,
});
const blob = await res.blob();
// Loose alias AIs often generate — JSON { output_url } data URL for <img>
// POST https://erasetext.com/api/mcp/erase (also api.erasetext.com/api/mcp/erase)
MCP
Agentes podem chamar o mesmo caminho de apagamento via MCP. O servidor é Streamable HTTP em https://api.erasetext.com/mcp. Envie o mesmo X-Api-Key (ou Authorization: Bearer et_…). erase_text gasta 1 crédito em caso de sucesso; get_account, handshake e listagem de ferramentas são gratuitos. Falhas não são cobradas.
{
"mcpServers": {
"erasetext": {
"url": "https://api.erasetext.com/mcp",
"headers": { "X-Api-Key": "et_…" }
}
}
}
Cursor, Claude Desktop e outros clientes que falam MCP remoto com cabeçalhos funcionam hoje. Conectores OAuth hospedados não são fornecidos — use uma chave de API. Manifesto: /.well-known/mcp.json.
Quanto custa uma chamada
Cada /erase bem-sucedido gasta 1 crédito — um preço fixo, independentemente do tamanho da imagem ou do formato de saída. Falhas não são cobradas, e GET /account também não.
POST /erase
Multipart ou JSON. Retorna bytes de imagem por padrão.
image_fileouimage_url— obrigatóriomask_file/mask_url— opcional; omita para detecção de todo textoformat=webp|png|jpg— padrão webpresolution— alvo de borda curta para o modelo, limitado a 256–1024, padrão 512paste_back— padrãotrue; mantém pixels originais fora da área apagadareturn_boxes=1— quads de OCR emX-Ocr-Boxes. Aplica-se apenas quando você não envia máscara, pois é quando a detecção é executadaresponse=json— retorna JSON com base64 em vez de bytes brutos
Polaridade da máscara: branco (qualquer valor de canal acima de 127) marca o que apagar, preto mantém. Envie na mesma proporção da imagem. Omita a máscara e a detecção cria uma para cada trecho de texto encontrado.
curl -X POST \
-H "X-Api-Key: et_…" \
-F "[email protected]" \
"https://api.erasetext.com/v1/erase" \
-o out.webp
O corpo JSON aceita os mesmos sinalizadores, mas campos de imagem diferentes — image_url ou image_file_b64 (e mask_url / mask_file_b64):
curl -X POST \
-H "X-Api-Key: et_…" \
-H "Content-Type: application/json" \
-d '{"image_url":"https://…/photo.jpg","response":"json"}' \
"https://api.erasetext.com/v1/erase"
Resposta
Bytes de imagem brutos com o Content-Type correspondente, além destes cabeçalhos:
X-Credits-Charged— sempre 1 em caso de sucessoX-Credits-Remaining— saldo de API e web após a chamadaX-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset(segundos unix)X-Ocr-Boxes— quads JSON, apenas comreturn_boxes=1
Com response=json, o corpo carrega as mesmas informações em vez disso:
{
"image_base64": "…",
"content_type": "image/webp",
"credits_charged": 1,
"credits_remaining": 199,
"ocr_boxes": null
}
GET /account
curl -H "X-Api-Key: et_…" \
"https://api.erasetext.com/v1/account"
Retorna os saldos de API e web, seu plano e a contagem de chamadas e créditos gastos deste mês UTC. Nunca gasta um crédito, então é seguro consultar antes de um lote.
Limites de taxa
Contados por chave de API em uma janela deslizante de 60 segundos. Solicitações acima do limite retornam 429 com Retry-After; o limite segue o plano da conta que possui a chave, e créditos pré-pagos não o aumentam.
| Plano | Solicitações / minuto |
|---|---|
| Free | 6 |
| Lite | 30 |
| Pro | 120 |
| Volume+ | 300 |
Precisa de mais throughput que Volume+? Fale conosco.
Limites e tempo
- Imagem e máscara devem ter entre 32 bytes e 25 MB, seja enviadas ou buscadas de uma URL. JPEG, PNG e WebP são os formatos de entrada seguros.
/eraseé síncrono: mantém a conexão até a imagem estar pronta. Permita até 90 segundos — além disso você recebe504e não é cobrado. Ainda não há modo de callback ou polling, então defina um timeout de cliente acima de 90s e repita a chamada inteira.- Uma chamada típica leva alguns segundos; uma inicialização fria do modelo é o caso lento que o timeout cobre. A concorrência é limitada pelo seu limite de taxa, então distribua um lote ao longo do minuto em vez de disparar tudo de uma vez.
- Nada do que você envia é mantido no caminho da API — os bytes são processados em trânsito e o resultado é retornado na resposta. Apenas o editor web armazena uploads, e eles expiram após uma hora.
- O prefixo
/v1é o contrato: campos são apenas adicionados, nunca removidos ou reescritos. Mudanças que quebram compatibilidade seriam lançadas como um novo prefixo.
Starter
Experimente a API a taxas de volume.
$26
1,200 créditos de API · nunca expiram
$0.022 / crédito
Growth
Pipelines de catálogo estáveis.
$66
5,000 créditos de API · nunca expiram
$0.013 / crédito
Scale
Equipes de produto e mídia.
$199
20,000 créditos de API · nunca expiram
$0.010 / crédito
Volume pack
Menor preço unitário.
$666
100,000 créditos de API · nunca expiram
$0.007 / crédito
Usando 100.000+ créditos por mês? Fale conosco para uma taxa dedicada.
Erros
Toda falha tem formato JSON { "error": "…", "code": "…" }. Use code para ramificar, não o texto. Alguns códigos adicionam campos — 402 carrega required e balance, 429 carrega retryAfter.
| Status | código | Quando |
|---|---|---|
| 400 | bad_request | Sem imagem, base64 ilegível, Content-Type errado, arquivo fora dos limites de tamanho, URL inacessível ou parâmetro descontinuado (size, engine) |
| 401 | invalid_api_key | Chave ausente, desconhecida ou revogada |
| 402 | insufficient_credits | O saldo de API e web juntos não podem cobrir a chamada |
| 404 | not_found | Caminho desconhecido |
| 405 | method_not_allowed | Caminho certo, método errado — /erase é somente POST |
| 429 | rate_limit | Acima do limite de solicitações por minuto por chave |
| 429 | busy | O backend de apagamento está saturado, não você — recue e tente novamente |
| 500 | internal | Falha inesperada — seguro tentar novamente uma vez |
| 502 | erase_failed | O modelo rejeitou ou falhou no trabalho — não cobrado |
| 503 | misconfigured | Problema de configuração no servidor; tentar novamente não ajudará |
| 504 | timeout | O modelo não terminou em 90s — não cobrado, tente novamente |