ENTRAR  login to app
Conformidade

Processamento GDPR-compliant

Servidores UE, auto-exclusão 30 min, DPA sob solicitação. Para empresas europeias.

Ler guia de conformidade →
API v1

Documentação da API myocr.app

Uma API REST simples para transformar PDFs e imagens em Excel limpo e estruturado. Você se autentica com um cabeçalho, envia um arquivo e recebe uma planilha.

Visão geral

A API do myocr.app converte arquivos de documentos (PDF, JPG, PNG) em Excel estruturado, CSV, texto ou JSON. Você envia um arquivo e o nome de um modelo; executamos OCR e análise de layout e retornamos um resultado limpo.

Cada requisição é autenticada com uma API key no cabeçalho X-API-Key. As respostas usam um envelope JSON previsível e cada chamada retorna um request_id útil para suporte e depuração.

Use o endpoint síncrono para arquivos pequenos que você precisa na hora, e o endpoint assíncrono de jobs (com webhook opcional) para arquivos grandes ou alto volume.

URL base: https://api.myocr.app Autenticação: X-API-Key

Autenticação

Autentique cada requisição com o cabeçalho X-API-Key. Crie e gerencie chaves no painel em /account/api. Para emitir uma chave é necessário um cartão de pagamento verificado (antiabuso).

Existem dois tipos de chave: as de teste (prefixo sk_test_) usam o mesmo pipeline sem consumir cota paga quando aplicável, e as live (prefixo sk_live_) para produção. Mantenha as chaves em segredo e no servidor — nunca as inclua no código do cliente.

Os endpoints de gerenciamento de chaves (/v1/keys) usam a sessão web do seu login, não a API key.

curl https://api.myocr.app/v1/status \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx"
from myocr_client import MyOCRClient

client = MyOCRClient(api_key="sk_live_xxxxxxxxxxxx")
print(client.status())
const res = await fetch("https://api.myocr.app/v1/status", {
  headers: { "X-API-Key": "sk_live_xxxxxxxxxxxx" }
});
console.log(await res.json());

Início rápido

Converta seu primeiro documento em menos de um minuto. Obtenha uma chave no painel e envie uma requisição multipart com seu arquivo e o modelo desejado.

O exemplo abaixo converte qualquer PDF ou imagem com tabelas em uma planilha .xlsx e a salva em out.xlsx.

curl -X POST https://api.myocr.app/v1/convert \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "file=@invoice.pdf" \
  -F "model=tables" \
  -o out.xlsx
from myocr_client import MyOCRClient

client = MyOCRClient(api_key="sk_live_xxxxxxxxxxxx")
result = client.convert("invoice.pdf", model="tables")
result.save("out.xlsx")
import fs from "node:fs";

const form = new FormData();
form.append("file", new Blob([fs.readFileSync("invoice.pdf")]), "invoice.pdf");
form.append("model", "tables");

const res = await fetch("https://api.myocr.app/v1/convert", {
  method: "POST",
  headers: { "X-API-Key": "sk_live_xxxxxxxxxxxx" },
  body: form,
});
fs.writeFileSync("out.xlsx", Buffer.from(await res.arrayBuffer()));

Conversão síncrona

Método: POST /v1/convert Auth necessária: Sim Limite de taxa: 60/min

POST /v1/convert aceita um único arquivo (máx. 5 MB, máx. 10 páginas) e retorna o arquivo de resultado diretamente no corpo da resposta — um .xlsx por padrão, ou texto/JSON/CSV se você definir o parâmetro output.

É o melhor endpoint quando você precisa da resposta imediata. Para arquivos maiores ou lotes, use jobs assíncronos.

Parâmetros

NomeTipoObrigatórioDescrição
filefileSimThe document to convert (PDF, JPG, PNG). Multipart field.
modelstringSimOne of: tables, text, invoice, receipt, bank_statement, business_card.
outputstringNãoxlsx (default), txt, json or csv.

Jobs assíncronos

Método: POST /v1/jobs Auth necessária: Sim Limite de taxa: 120/min

Para arquivos de até 50 MB (e PDFs até 500 páginas) ou maior throughput, crie um job com POST /v1/jobs. A chamada retorna um request_id imediatamente; o arquivo é processado em segundo plano. PDFs acima do limite de páginas são rejeitados antes com TOO_MANY_PAGES — divida o documento.

Consulte GET /v1/jobs/{request_id} para o status (pending → processing → done/failed) e baixe o resultado em GET /v1/jobs/{request_id}/result. Forneça um webhook_url para ser notificado automaticamente ao concluir, sem polling.

NomeTipoObrigatórioDescrição
filefileSimDocument up to 50 MB.
modelstringSimConversion model (see Models).
webhook_urlstringNãoHTTPS URL notified (signed) when the job finishes.
# 1. create the job
curl -X POST https://api.myocr.app/v1/jobs \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "file=@statement.pdf" -F "model=bank_statement"
# → {"success": true, "data": {"request_id": "abcd1234"}}

# 2. poll status, then download the result
curl https://api.myocr.app/v1/jobs/abcd1234 -H "X-API-Key: sk_live_xxxxxxxxxxxx"
curl https://api.myocr.app/v1/jobs/abcd1234/result -H "X-API-Key: sk_live_xxxxxxxxxxxx" -o out.xlsx
job = client.create_job("statement.pdf", model="bank_statement")
job.wait()                     # polls with backoff until done
job.result().save("out.xlsx")

Conversão em lote

Método: POST /v1/batch Auth necessária: Sim Limite de taxa: 30/min

POST /v1/batch aceita de 1 a 20 arquivos em uma única requisição multipart, todos processados com o mesmo modelo. Cada arquivo é reportado de forma independente; falhas por arquivo são retornadas em um array errors sem falhar o lote inteiro.

curl -X POST https://api.myocr.app/v1/batch \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "files=@a.pdf" -F "files=@b.pdf" -F "files=@c.jpg" \
  -F "model=invoice"

Modelos

Passe um destes valores model. tables e text usam nosso motor OCR; os modelos especializados retornam campos específicos do domínio.

ModeloO que extrai
tablesQualquer documento com tabelas → uma planilha por tabela, layout preservado. O padrão de uso geral.
textExtração completa de texto (OCR) de qualquer documento. Sempre retorna txt.
invoiceCampos de fatura: fornecedor, data, totais, IVA e itens de linha.
receiptCampos de recibo: comerciante, data, total, imposto e itens — ideal para relatórios de despesas.
bank_statementLinhas do extrato bancário: data, descrição, débito, crédito e saldo corrente. Inclui verificação automática de saldos (conciliação).
business_cardCampos de contato de cartões de visita: nome, empresa, cargo, email, telefone.

Formatos de saída

Defina o parâmetro output para escolher o formato: xlsx (padrão, planilha estruturada), txt (texto puro), json (campos extraídos como JSON) ou csv. O modelo text sempre retorna txt.

Para model=bank_statement você também pode definir output como csv_quickbooks (CSV de 4 colunas para importação bancária), csv_xero (modelo de importação do Xero) ou ofx (arquivo OFX padrão para a maioria dos softwares contábeis). Com output=json a resposta inclui também um objeto reconciliation: saldos inicial/final, total de créditos e débitos, a diferença calculada e ok=true quando as transações extraídas batem com os saldos do extrato.

Respostas e cabeçalhos

As respostas JSON seguem um envelope fixo: um booleano success, um objeto data (ou um objeto error) e um request_id. As respostas de arquivo retornam o binário diretamente com o Content-Type apropriado.

Cada resposta inclui o cabeçalho X-MyOCR-Request-Id. As respostas de arquivo também incluem X-MyOCR-Pages-Used (páginas faturadas) e X-MyOCR-Model (o modelo usado).

{
  "success": true,
  "data": { "request_id": "abcd1234" },
  "request_id": "abcd1234"
}

Erros

Os erros retornam success: false com um error.code e um error.message legível, mais o request_id. Use o code (estável) para a lógica e o message (pode mudar) para as pessoas.

CódigoHTTPSignificado
MISSING_API_KEY401Nenhum cabeçalho X-API-Key foi enviado.
INVALID_API_KEY401A API key é desconhecida, revogada ou malformada.
UNSUPPORTED_MODEL400O valor model não é um dos modelos suportados.
UNSUPPORTED_FILE_TYPE400Extensão/tipo de arquivo não aceito (use PDF, JPG, PNG).
MISSING_FILE400Nenhum arquivo incluído na requisição.
FILE_TOO_LARGE413O arquivo excede o limite de tamanho do endpoint.
TOO_MANY_PAGES413O documento tem mais páginas do que o endpoint permite.
INVALID_WEBHOOK_URL400O webhook_url está ausente ou não é uma URL HTTPS válida.
INSUFFICIENT_PAGES402Créditos de página insuficientes para processar a requisição.
QUOTA_EXCEEDED402Cota mensal de páginas esgotada — retorna um upgrade_url.
CARD_REQUIRED402É necessário um cartão de pagamento verificado antes de criar chaves API ou usar a avaliação.
NO_ACTIVE_PLAN403Nenhum plano ativo nesta conta — subscreve um plano para usar a API.
SPEND_CAP_REACHED402O teu limite de gasto mensal foi atingido — aumenta o limite ou melhora o plano.
NOT_READY409O job ainda não terminou; o resultado não está disponível.
NOT_FOUND404O job ou recurso solicitado não existe.
OCR_ERROR502O motor OCR de origem não conseguiu processar o documento.
STORAGE_ERROR502O armazenamento temporário (upload/resultado) falhou — pode tentar novamente.
SERVICE_NOT_READY503Um serviço necessário ainda não está configurado/habilitado.
INTERNAL_ERROR500Erro inesperado do servidor — tente novamente e depois contate o suporte com o request_id.

Limites e cota

Os limites de taxa são aplicados por API key (não por IP), então clientes atrás de um proxy compartilhado não dividem o limite: /v1/convert 60 req/min, /v1/jobs 120 req/min, /v1/batch 30 req/min.

Cobrança por página, não por chamada. Planos: Free 10 páginas no total (única vez, cartão necessário), Starter €29/mês (2.500), Pro €99/mês (10.000), Scale €190/mês (20.000). O serviço nunca é interrompido: ao esgotar as páginas do mês avisamos por email e cobramos um pacote extra ao preço por página do seu plano — Starter 500 a €0,0116, Pro 2.000 a €0,0099, Scale 4.000 a €0,0095 — até um teto mensal de recarga que você define (e pode desativar). Atingido o teto a API retorna 402 com um upgrade_url. Verifique o uso com GET /v1/usage.

Webhooks

Quando você passa um webhook_url para /v1/jobs, enviamos um POST com payload JSON para essa URL quando o job chega a done ou failed. As entregas são repetidas com backoff em caso de falha.

Cada entrega é assinada: verifique o cabeçalho de assinatura com seu webhook signing secret (mostrado no painel) para confirmar que a requisição veio mesmo do myocr.app. O SDK Python inclui o helper verify_webhook_signature.

SDK

O SDK oficial em Python (myocr-client) envolve cada endpoint com métodos e exceções tipados, polling automático Job.wait() com backoff e verificação de assinatura de webhook.

Prefere HTTP puro? Qualquer cliente HTTP funciona — veja os exemplos cURL e Node neste guia e a referência interativa completa.

pip install myocr-client

Spec OpenAPI

Baixar spec OpenAPI

OpenAPI 3.1 (openapi.json) · Postman · Insomnia · code generators

Baixar spec OpenAPI

Perguntas frequentes

Quais tipos e tamanhos de arquivo são suportados?

PDF, JPG e PNG. /v1/convert síncrono permite até 5 MB e 10 páginas; /v1/jobs assíncrono lida com arquivos de até 50 MB.

Como o uso é cobrado?

Por página processada, contada em todos os endpoints e reiniciada mensalmente. O cabeçalho X-MyOCR-Pages-Used informa quantas páginas cada chamada cobrou.

Qual a diferença entre chaves de teste e live?

As chaves de teste (sk_test_) são para desenvolvimento e testes de integração; as live (sk_live_) para tráfego de produção. Ambas se autenticam da mesma forma.

Síncrono ou assíncrono?

Use /v1/convert para arquivos pequenos que você precisa na hora. Use /v1/jobs (opcionalmente com webhook) para arquivos grandes, lotes ou processamento em segundo plano.

Onde vejo cada parâmetro e esquema?

Cada endpoint, parâmetro e resposta está documentado nas seções acima. Para uso automático, baixe o spec OpenAPI (openapi.json) e importe no Postman, Insomnia ou um gerador de clientes.

Produtividade

100 faturas em 10 minutos

Dicas e templates para processamento em lote. Guia grátis.

Ler o guia →