ReWords.AI API

Perguntas frequentes

Respostas a perguntas comuns sobre a API da ReWords.AI — o que o OCR consegue ler, fontes e textos mais longos, remover texto, A ou B, novas tentativas, cobrança, uso no front-end, SDKs e como obter ajuda.

OCR

Que texto o OCR consegue ler?

Texto impresso em chinês, inglês, japonês, coreano e na maioria dos idiomas europeus. Defina language com o idioma principal do texto: en, zh, ja, ko, fr, de, es, pt, it ou ru. A região é ignorada, então pt-BR conta como pt e zh-TW como zh. O idioma não é detectado automaticamente: sem language, ou com qualquer outro valor, o OCR lê chinês e inglês (normalmente japonês também), e texto coreano, cirílico ou europeu com acentos sai errado. Envie language sempre que souber o idioma, inclusive para japonês. Escrita à mão, letras muito estilizadas e texto curvo ou vertical podem não ser encontrados ou vir divididos em pedaços — para esses casos, envie a sua própria box.

O que é um item em texts?

Uma linha de texto, não uma palavra nem um parágrafo. Um título em duas linhas volta como dois itens. Para alterá-lo, envie uma substituição por linha, ou uma substituição cuja box cubra as duas linhas e cujo to seja o título novo inteiro, com \n onde a nova linha deve começar.

Por que o texto parece um pouco diferente do da imagem?

Caracteres de largura total são retornados em largura normal: 50%OFF vira 50%OFF, e um espaço de largura total vira um espaço normal. Alguns idiomas voltam em minúsculas (francês, alemão e russo, por exemplo), e os espaços entre as palavras podem sumir: o coreano 여름 세일 pode voltar como 여름세일. Use o texto retornado em from; a correspondência leva as duas coisas em conta (veja abaixo).

O OCR não encontrou meu texto ou leu errado. E agora?

Envie uma box medida por você (veja Imagens). Quando uma substituição tem box, o texto dentro da caixa é substituído e from é só uma dica — não precisa corresponder exatamente.

Preciso chamar o OCR?

Não. Envie from e to sem box e POST /edits encontra o texto para você, de graça. Essa chamada lê o texto primeiro, o que costuma levar 5–20 segundos (o mesmo que POST /ocr), então reserve pelo menos 90 segundos para a requisição HTTP. O OCR não ocupa nenhuma das suas 10 vagas de job. Chame POST /ocr antes só quando quiser mostrar o texto ao usuário, deixá-lo escolher ou conferir as caixas antes de pagar por uma edição.

E se from for só parte de uma linha?

Só essa parte muda. from: "OFF", to: "ON" na linha 50% OFF dá 50% ON. Na resposta, replacements mostra a linha inteira: from: "50% OFF", to: "50% ON". Esses valores vêm da leitura OCR da linha, então podem vir em minúsculas ou sem espaços (veja acima). O texto novo é desenhado no estilo da linha original: confira maiúsculas e espaços na imagem, não neste texto.

A correspondência ignora maiúsculas e espaços ao redor. Se algumas linhas forem exatamente iguais a from, só essas linhas mudam e as que apenas o contêm ficam como estão. Caso contrário, toda linha que o contém muda, em cada ocorrência na linha: from: "e" transforma Summer Collection em Summ3r Coll3ction se to for 3. match: "first" limita a mudança a uma linha, não a uma ocorrência — envie uma box e a linha nova inteira quando precisar de controle exato. Se nada corresponder, há mais uma tentativa ignorando todos os espaços, então 여름 세일 ainda encontra a linha 여름세일.

O OCR é cobrado quando a imagem não tem texto?

Sim. A chamada retorna "texts": [] e conta como uma chamada de OCR. A mesma imagem em até 24 horas não é cobrada de novo.

E árabe, hebraico, tailandês ou hindi?

Não são suportados. O OCR ainda pode retornar linhas nessas escritas, mas a leitura e o resultado editado não são garantidos. Um job que falha com elas não é cobrado.

Posso enviar um PDF ou várias páginas de uma vez?

Não. Cada requisição aceita uma imagem JPEG, PNG ou WebP. Renderize como imagem cada página que quiser alterar e envie uma requisição por página — elas podem rodar ao mesmo tempo, até as suas 10 vagas de job.

Edição

Posso escolher a fonte, a cor ou o tamanho?

Não. O novo texto copia a fonte, a cor, o tamanho e os efeitos do texto que ele substitui. Não há parâmetros de estilo.

E se o novo texto for mais longo ou mais curto?

Ele é encaixado no espaço ao redor do texto original sem cobrir o texto vizinho. Um texto muito longo pode sair menor. Mantenha-o perto do comprimento original para o resultado mais natural.

Posso remover texto em vez de substituí-lo?

Sim — para remover texto, defina to como string vazia. O fundo atrás dele é preenchido.

Qual o tamanho máximo de from e to?

Até 200 caracteres Unicode cada (um emoji conta como um). \n em to começa uma nova linha. from só pode ficar vazio quando você envia uma box.

Quantas alterações uma edição pode fazer?

Até 20 substituições por imagem, todas em um job e cobradas como uma edição. Quando as mesmas palavras aparecem várias vezes, match: "all" (o padrão) muda todas e match: "first" muda só a primeira, de cima para baixo e da esquerda para a direita; envie caixas para escolher com exatidão. Não envie duas substituições para o mesmo texto nem caixas sobrepostas — só uma delas será aplicada, e qual delas não é definido.

Como associo replacements da resposta à minha requisição?

A resposta tem um item por linha alterada, na ordem da sua requisição. Uma substituição sem box que correspondeu a três linhas vira três itens, de cima para baixo. Se precisar de uma correspondência um para um, envie uma box para cada substituição ou use match: "first".

Dá para mudar coisas que não são texto?

Não. Só o texto que você indicar é alterado. Logotipos, rostos e outros objetos não são editados de propósito.

Quanto tempo um job leva?

Normalmente 1–2 minutos: 9 em cada 10 jobs terminam em 3 minutos e quase todos em 5. estimated_seconds na resposta é nossa estimativa de quando ele vai terminar; um job pode rodar por até 10 minutos depois de sair da fila e, com a fila cheia de 30, o último pode levar cerca de 30 minutos. Todo job fica succeeded ou failed em até 60 minutos após o envio; se isso não acontecer, pare o polling e escreva para [email protected] com o id dele. Veja Fila e limites.

Resultados

Devo usar A ou B?

B mantém cada pixel fora do texto exatamente como no seu envio — a escolha segura para fotos de produto, documentos e qualquer coisa em que o resto da imagem não pode mudar. A redesenha a imagem inteira, o que muitas vezes integra o novo texto de forma mais natural, mas pode mudar pequenos detalhes em outros lugares. Recomendamos mostrar ao seu usuário todos os resultados bem-sucedidos — A e B, mais C (4K) quando houver — e deixá-lo escolher.

O que é C, e por que ele foi pulado?

C é a edição da IA gerada em 4K, com até 3840 px no lado maior. Ele é pulado para imagens mais largas ou mais altas que 3:1 (aspect_ratio_unsupported) e pode falhar sozinho. C nunca muda o que você paga.

Os resultados têm marca d’água? Por quanto tempo ficam guardados?

Sem marca d’água. Os links dos resultados são arquivos JPEG públicos em img.rewords.ai, guardados por pelo menos 7 dias — baixe o que precisar. Os links de um job não mudam entre leituras. GET /edits/{id} funciona enquanto os links forem mantidos. As imagens enviadas por trás de um image_id ficam guardadas por 24 horas.

Posso editar um resultado de novo?

Sim. Passe a url do resultado como image_url em uma nova edição — o resultado B é o melhor ponto de partida. É um novo job e é cobrado como qualquer outro. Faça isso quando mudar o texto em etapas ou quando o primeiro resultado precisar de uma segunda alteração.

Posso cancelar um job?

Não, não há chamada de cancelamento. Um job só custa uma edição quando chega a succeeded; se você não precisar mais dele, ignore o resultado. Um job que nunca foi enviado não custa nada, então confira seu texto com POST /ocr antes de enviar.

Um job falhou. Como tento de novo?

Jobs com falha são grátis. Envie de novo com uma nova Idempotency-Key: a antiga retorna o mesmo job com falha. ai_generation_failed e upstream_failed costumam dar certo numa nova tentativa; content_blocked não.

Cobrança

Quando exatamente sou cobrado?

Uma edição por job, só quando A ou B dá certo — mesmo que o outro tenha falhado. No envio, uma edição é reservada para que os jobs já na fila sempre possam terminar; ela é liberada se o job falhar. balance e edits_remaining já têm as edições reservadas descontadas. Veja Preços e cobrança.

Existe uma chave de teste grátis ou sandbox?

Não há chaves de teste grátis. Edite uma imagem de graça em rewords.ai para ver a qualidade e depois comece com o pacote Lite. Jobs com falha e requisições rejeitadas nunca são cobrados.

Integração

Posso chamar a API de um navegador ou app móvel?

Não. Chame-a do seu servidor. A chave de API ficaria visível no código do front-end ou no pacote do app, e qualquer pessoa que a encontrasse poderia gastar o seu saldo. A API não envia cabeçalhos CORS, então os navegadores bloqueiam chamadas diretas.

Polling ou webhooks?

Qualquer um. Webhooks precisam de um endpoint https público e economizam requisições; o polling não precisa de nada. Se o seu endpoint puder cair, faça também polling a cada poucos minutos, até o estado final, de qualquer job do qual você não tenha notícia 15 minutos depois do envio. Um webhook que chegue depois não faz mal: você pula o id que já tratou. Veja Webhooks.

Guarde o id da resposta 202 junto do seu registro. Para webhooks, você também pode acrescentar sua própria referência à query string de callback_url, que é mantida: https://example.com/hooks/rewords?order=1234.

Minha requisição deu timeout. Um job foi criado?

Talvez. Tente de novo com a mesma Idempotency-Key: você recebe o job se ele foi criado, e ele não é cobrado duas vezes. Veja Erros.

A API vai mudar sem aviso?

A versão está no caminho: /v1. Dentro de /v1 só acrescentamos coisas — novos campos opcionais, novos valores em reason ou error.code —, então ignore campos que você não conhece e trate um código desconhecido como upstream_failed. Qualquer coisa que quebraria um cliente vai para uma nova versão, anunciada por e-mail antes de a antiga ser desativada. Dúvidas vão para [email protected].

Existe um SDK?

Ainda não. Baixe openapi.yaml e gere um cliente com qualquer gerador de OpenAPI 3.1, ou copie os clientes completos em Node.js e Python de Exemplos.

Minha chave de API vazou. O que faço?

Revogue-a na página de chaves de API — ela para de funcionar em até um minuto — e crie uma nova. Todas as chaves compartilham o seu saldo, então faça isso primeiro e confira GET /account depois. Se o segredo de webhook também vazou, redefina-o na mesma página. Veja Autenticação.

Em que fuso horário estão created_at e completed_at?

UTC, no formato ISO 8601 com o sufixo Z: 2026-11-04T10:00:00Z.

Como obter ajuda

Escreva para [email protected] ou use a página de contato para WhatsApp e TikTok. O e-mail é o caminho mais rápido para dúvidas sobre a API.

Inclua o que nos permita encontrar a requisição:

  • o id do job (edit_...) ou o image_id, e o horário da requisição em UTC;
  • os primeiros 12 caracteres da chave que você usou (rw_live_abcd...) — nunca a chave inteira;
  • o error.code e a message que você recebeu, ou o resultado que parece errado;
  • a imagem, se puder compartilhá-la, e as replacements que você enviou.

Uma dúvida de cobrança também precisa do e-mail da sua conta rewords.ai, para encontrarmos a compra.

Nesta página