Elige un convertidor — cada herramienta exporta un Excel limpio
Servidores UE, auto-borrado 30 min, DPA bajo solicitud. Para empresas europeas.
Una API REST sencilla para convertir PDF e imágenes en Excel limpio y estructurado. Te autenticas con una cabecera, envías un archivo y recibes una hoja de cálculo.
La API de myocr.app convierte archivos de documentos (PDF, JPG, PNG) en Excel estructurado, CSV, texto o JSON. Envías un archivo y el nombre de un modelo; ejecutamos OCR y análisis de diseño y devolvemos un resultado limpio.
Cada solicitud se autentica con una API key en la cabecera X-API-Key. Las respuestas usan un envoltorio JSON predecible y cada llamada devuelve un request_id útil para soporte y depuración.
Usa el endpoint síncrono para archivos pequeños que necesitas al instante, y el endpoint asíncrono de trabajos (con webhook opcional) para archivos grandes o gran volumen.
Autentica cada solicitud con la cabecera X-API-Key. Crea y gestiona las claves desde tu panel en /account/api. Para emitir una clave se requiere una tarjeta de pago verificada (antiabuso).
Existen dos tipos de clave: las de prueba (prefijo sk_test_) usan la misma canalización sin consumir cuota de pago cuando aplica, y las live (prefijo sk_live_) para producción. Mantén las claves en secreto y en el servidor — nunca las incluyas en código del cliente.
Los endpoints de gestión de claves (/v1/keys) usan la sesión web de tu inicio de sesión, no la 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());
Convierte tu primer documento en menos de un minuto. Consigue una clave en el panel y envía una solicitud multipart con tu archivo y el modelo que quieras.
El ejemplo siguiente convierte cualquier PDF o imagen con tablas en una hoja .xlsx y la guarda en 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()));
POST /v1/convert acepta un único archivo (máx. 5 MB, máx. 10 páginas) y devuelve el archivo resultante directamente en el cuerpo de la respuesta — un .xlsx por defecto, o texto/JSON/CSV si defines el parámetro output.
Es el mejor endpoint cuando necesitas la respuesta de inmediato. Para archivos grandes o lotes, usa trabajos asíncronos.
file
model
output
Para archivos de hasta 50 MB (y PDFs de hasta 500 páginas) o mayor rendimiento, crea un trabajo con POST /v1/jobs. La llamada devuelve un request_id de inmediato; el archivo se procesa en segundo plano. Los PDFs por encima del límite de páginas se rechazan al instante con TOO_MANY_PAGES — divide el documento.
Consulta GET /v1/jobs/{request_id} para el estado (pending → processing → done/failed) y luego descarga el resultado en GET /v1/jobs/{request_id}/result. Indica un webhook_url para recibir aviso automático al terminar, sin sondeo.
webhook_url
# 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")
POST /v1/batch acepta de 1 a 20 archivos en una sola solicitud multipart, todos procesados con el mismo modelo. Cada archivo se informa de forma independiente; los fallos por archivo se devuelven en un array errors sin hacer fallar todo el lote.
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"
Pasa uno de estos valores model. tables y text usan nuestro motor OCR; los modelos especializados devuelven campos específicos del dominio.
tables
text
invoice
receipt
bank_statement
business_card
Define el parámetro output para elegir el formato: xlsx (por defecto, hoja estructurada), txt (texto plano), json (campos extraídos como JSON) o csv. El modelo text siempre devuelve txt.
Para model=bank_statement también puedes definir output como csv_quickbooks (CSV de 4 columnas para importación bancaria), csv_xero (plantilla de importación de Xero) u ofx (archivo OFX estándar para la mayoría del software contable). Con output=json la respuesta incluye además un objeto reconciliation: saldos inicial/final, total de créditos y débitos, la diferencia calculada y ok=true cuando las transacciones extraídas cuadran con los saldos del extracto.
Las respuestas JSON siguen un envoltorio fijo: un booleano success, un objeto data (o un objeto error) y un request_id. Las respuestas de archivo devuelven el binario directamente con el Content-Type adecuado.
Cada respuesta incluye la cabecera X-MyOCR-Request-Id. Las respuestas de archivo también incluyen X-MyOCR-Pages-Used (páginas facturadas) y X-MyOCR-Model (el modelo usado).
{ "success": true, "data": { "request_id": "abcd1234" }, "request_id": "abcd1234" }
Los errores devuelven success: false con un error.code y un error.message legible, más el request_id. Usa el code (estable) para la lógica y el message (puede cambiar) para las personas.
MISSING_API_KEY
INVALID_API_KEY
UNSUPPORTED_MODEL
UNSUPPORTED_FILE_TYPE
MISSING_FILE
FILE_TOO_LARGE
TOO_MANY_PAGES
INVALID_WEBHOOK_URL
INSUFFICIENT_PAGES
QUOTA_EXCEEDED
CARD_REQUIRED
NO_ACTIVE_PLAN
SPEND_CAP_REACHED
NOT_READY
NOT_FOUND
OCR_ERROR
STORAGE_ERROR
SERVICE_NOT_READY
INTERNAL_ERROR
Los límites de tasa se aplican por API key (no por IP), así los clientes tras un proxy compartido no comparten el límite: /v1/convert 60 req/min, /v1/jobs 120 req/min, /v1/batch 30 req/min.
Facturación por página, no por llamada. Planes: Free 10 páginas en total (única vez, tarjeta requerida), Starter €29/mes (2.500), Pro €99/mes (10.000), Scale €190/mes (20.000). El servicio nunca se interrumpe: al agotar las páginas del mes te avisamos por email y cargamos un paquete extra al precio por página de tu plan — Starter 500 a €0,0116, Pro 2.000 a €0,0099, Scale 4.000 a €0,0095 — hasta un tope mensual de recarga que tú defines (y puedes desactivar). Alcanzado el tope la API devuelve 402 con un upgrade_url. Consulta el uso con GET /v1/usage.
Cuando pasas un webhook_url a /v1/jobs, enviamos una POST con payload JSON a esa URL cuando el trabajo llega a done o failed. Las entregas se reintentan con backoff si fallan.
Cada entrega va firmada: verifica la cabecera de firma con tu webhook signing secret (visible en el panel) para confirmar que la solicitud viene realmente de myocr.app. El SDK de Python incluye el helper verify_webhook_signature.
El SDK oficial de Python (myocr-client) envuelve cada endpoint con métodos y excepciones tipados, sondeo automático Job.wait() con backoff y verificación de firma de webhook.
¿Prefieres HTTP directo? Sirve cualquier cliente HTTP — mira los ejemplos cURL y Node de esta guía y la referencia interactiva completa.
pip install myocr-client
OpenAPI 3.1 (openapi.json) · Postman · Insomnia · code generators
PDF, JPG y PNG. /v1/convert síncrono permite hasta 5 MB y 10 páginas; /v1/jobs asíncrono admite archivos de hasta 50 MB.
Por página procesada, contada en todos los endpoints y reiniciada cada mes. La cabecera X-MyOCR-Pages-Used indica cuántas páginas facturó cada llamada.
Las claves de prueba (sk_test_) son para desarrollo y pruebas de integración; las live (sk_live_) para tráfico de producción. Ambas se autentican igual.
Usa /v1/convert para archivos pequeños que necesitas al instante. Usa /v1/jobs (opcionalmente con webhook) para archivos grandes, lotes o procesamiento en segundo plano.
Cada endpoint, parámetro y respuesta está documentado en las secciones anteriores. Para uso automático, descarga el spec OpenAPI (openapi.json) e impórtalo en Postman, Insomnia o un generador de clientes.
Trucos y plantillas para procesamiento en lote. Guía gratis.