OCRmyPDF como API

Envía un PDF escaneado o una imagen y recíbelo como PDF/A con búsqueda. OCRmyPDF y Tesseract, alojados, con una sola clave de API.

Última actualización

Precio 2 créditos por página. Una imagen cuenta como una página.
Archivos PDF, PNG o JPEG, de hasta 25 MB y 200 páginas
Idiomas Inglés, alemán, español y francés
Salida PDF/A-2b por defecto, o un PDF normal
Límite de tiempo 15 minutos por trabajo
Resultados Se guardan 7 días tras el envío

OCRmyPDF añade una capa de texto a PDF escaneados e imágenes. Las páginas se ven igual, pero puedes buscar, seleccionar y copiar su texto. Tesseract reconoce el texto.

Envías un archivo a la cola y recibes un id de trabajo. Cuando el trabajo termina bien, descargas el PDF con búsqueda. La salida es PDF/A-2b para el archivo a largo plazo, salvo que pidas un PDF normal.

Precio y límites

Un trabajo cuesta 2 créditos por página, y una imagen cuenta como una página. Los créditos se cobran al enviar el trabajo. Si el trabajo falla, se reembolsan.

Un archivo puede tener hasta 25 MB y 200 páginas. Un trabajo se detiene a los 15 minutos. El resultado se guarda 7 días tras el envío y después se elimina. El archivo subido se elimina en cuanto termina el trabajo. Los planes y las cuotas de créditos están en la página de precios.

Alojado por ti o aquí

Para ejecutar OCRmyPDF tú, lo instalas con Tesseract y un paquete de idioma por idioma. Mantienes ambos al día y das a cada trabajo un límite de tiempo y de memoria. Un escaneo largo puede usar varios GB de memoria.

Alojado aquí, envías el archivo con una clave de API. La misma clave y el mismo saldo de créditos sirven para los demás motores de documentos de este sitio.

Inicio rápido con curl

Envía un escaneo. La parte type= fija el tipo de contenido del archivo:

curl -H "X-API-Key: $KEY" \
  -F "file=@scan.pdf;type=application/pdf" \
  -F language=deu -F rotate_pages=true \
  https://api.pagespool.com/v1/ocrmypdf/jobs

La respuesta indica el trabajo y lo que cuesta:

{"job_id": "3f2a…", "status": "queued", "pages": 3, "credits": 6, "poll_url": "/v1/jobs/3f2a…", "result_url": "/v1/ocrmypdf/jobs/3f2a…/result"}

Consulta el trabajo hasta que status sea succeeded o failed:

curl -H "X-API-Key: $KEY" https://api.pagespool.com/v1/jobs/JOB_ID

Después descarga el PDF con búsqueda:

curl -H "X-API-Key: $KEY" -o scan-ocr.pdf https://api.pagespool.com/v1/ocrmypdf/jobs/JOB_ID/result

Consultar y descargar es gratis.

Inicio rápido con Python

import time

import httpx

API = "https://api.pagespool.com"
headers = {"X-API-Key": "YOUR_KEY"}

with open("scan.pdf", "rb") as fh:
    resp = httpx.post(
        f"{API}/v1/ocrmypdf/jobs",
        headers=headers,
        files={"file": ("scan.pdf", fh, "application/pdf")},
        data={"language": "eng", "deskew": "true"},
        timeout=120,
    )
resp.raise_for_status()
job = resp.json()

while httpx.get(f"{API}{job['poll_url']}", headers=headers).json()["status"] not in (
    "succeeded",
    "failed",
):
    time.sleep(5)

result = httpx.get(f"{API}{job['result_url']}", headers=headers, timeout=120)
result.raise_for_status()  # a failed job answers its reason as a problem
with open("scan-ocr.pdf", "wb") as out:
    out.write(result.content)

Opciones

Envía las opciones como campos de formulario junto a file:

Campo Valores Por defecto
language eng, deu, spa, fra eng
output_type pdfa (PDF/A-2b), pdf pdfa
mode skip, redo, force skip
deskew true, false false
rotate_pages true, false false

mode decide qué pasa con las páginas que ya tienen texto. skip las deja como están. redo sustituye una capa de OCR anterior. force aplica OCR a cada página como imagen. mode=redo no se puede combinar con deskew. Esa solicitud responde 400 y no cuesta nada.

Errores

Cada error es un documento de problema JSON con un code. Un envío rechazado no cuesta nada. Un trabajo fallido se reembolsa, y su URL de resultado indica el motivo:

Código Estado Significado
incompatible_options 400 mode=redo junto con deskew
payload_too_large 413 El archivo ocupa más de 25 MB
unsupported_media_type 415 El archivo no es un PDF, PNG o JPEG
too_many_pages 422 El archivo tiene más de 200 páginas
bad_input 422 El archivo no se puede leer, o una imagen tiene transparencia
encrypted_pdf 422 El PDF necesita una contraseña para abrirse
already_has_text 409 Las páginas ya tienen texto: envía mode=redo o mode=force
pdfa_conversion_failed 422 El resultado no es un PDF/A válido: envía output_type=pdf
job_not_ready 409 El trabajo aún no ha terminado
result_expired 410 El resultado se eliminó tras 7 días
ocr_failed, ocr_timeout 500 El OCR falló o duró más de 15 minutos

Claves de API

Cada llamada de OCR necesita una clave de API. Sin una clave válida, la llamada responde 401. Puedes enviar la clave de tres formas:

  • la cabecera X-API-Key: YOUR_KEY,
  • la cabecera Authorization: Bearer YOUR_KEY,
  • HTTP Basic con cualquier nombre de usuario y la clave como contraseña, como curl -u "x:YOUR_KEY". Un cliente que solo acepta una URL base puede llevar la clave en ella, como https://x:YOUR_KEY@ seguido del host de la API.

No pongas nunca la clave en una ruta ni en una query string. Ambas acaban en los registros de acceso.

Servidor MCP

OCRmyPDF tiene su propio servidor MCP en https://api.pagespool.com/mcp/ocrmypdf/. Ofrece dos herramientas. ocr_pdf pone un archivo en cola, enviado en base64 de hasta 4 MB o como enlace de descarga de hasta 25 MB. get_ocr_result informa del trabajo y, cuando ha terminado bien, da un enlace de descarga al PDF que funciona 60 minutos. Las herramientas necesitan una clave de API y cuestan lo mismo que la API.

Pruébalo sin código

La herramienta gratuita de OCR aplica el mismo OCR a archivos de hasta 3 páginas y 4 MB, sin cuenta.

OCRmyPDF es una marca de su titular; pagespool no está afiliado a él.