PDF.chat API

Sube un PDF y chat con él desde tu propia aplicación — haz preguntas y consigue respuestas citadas en la página, en más de 100 idiomas. Medido por página, sin sorpresas.

Sinopsis

La API PDF.chat es una pequeña interfaz REST. POST un documento para ingerirlo y recuperar un trabajo con el texto del documento y un desglose por página (texto, cuadros delimitados, confianza). POST preguntas contra ese trabajo y obtener respuestas basadas en el documento, cada citando la página que vino. Trabajos de 5 páginas o menos volver en línea; trabajos más grandes regresan inmediatamente con un pending estado que encuesta hasta done.

  • URL base: https://pdf.chat
  • Documentos en: PDF, además de Word, PowerPoint, texto e imágenes (PNG, JPG, WEBP, GIF, BMP, TIFF)
  • Chat fuera: respuestas con citas de páginas; transcripciones a través del punto final de la historia
  • Texto procesado: txt, md, docx, pdf, csv, json
  • Motores de lectura: cpu (documentos rápidos, impresos) y vlm (Alimentación de primer grado, escritura, diseño complejo, matemáticas)

Autenticación

Autenticar con tu Token API (Encuéntralo en tu página de cuenta) como encabezado de un Portador:

Authorization: Bearer YOUR_API_TOKEN

También puede pasar ?api_token=… como parámetro de consulta. El uso se mide contra el saldo de página de su cuenta.

Enviar un documento

POST /api/v1/ocr/, carga de múltiples partes.

curl -X POST https://pdf.chat/api/v1/ocr/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -F "file=@invoice.pdf" \
  -F "tier=vlm" \
  -F "language=auto"

Devuelve el trabajo. Para archivos ≤5 páginas ya lo es done con el texto; los archivos más grandes vuelven pending/processing, encuestar el punto final de estado.

{
  "uuid": "9f2c1b7e4a...",
  "status": "done",
  "tier": "vlm",
  "language": "auto",
  "page_count": 1,
  "mean_confidence": 0.98,
  "text": "INVOICE\nAcme Corp\nTotal: 215.00 USD",
  "markdown": "# INVOICE\n\n**Acme Corp** ...",
  "pages": [ { "index": 0, "text": "...", "blocks": [ { "text": "...", "bbox": [x0,y0,x1,y1], "confidence": 0.98 } ] } ]
}

Obtener un resultado

GET /api/v1/ocr/<uuid>/, encuesta hasta status es done o failed.

curl https://pdf.chat/api/v1/ocr/9f2c1b7e4a.../ \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Descargar un formato

GET /api/v1/ocr/<uuid>/download/?format=md, exportar el resultado. format es uno de txt, md, docx, pdf, csv, json.

curl -L "https://pdf.chat/api/v1/ocr/9f2c1b7e4a.../download/?format=docx" \
  -H "Authorization: Bearer YOUR_API_TOKEN" -o result.docx

Chat con un documento

Haga preguntas sobre un trabajo terminado. Las respuestas se basan sólo en el texto extraído y citan la página de origen. Requiere un token de cuenta, la función chat está cerrada por cuenta.

POST /api/v1/chat/<uuid>/, JSON body {"message": "your question"}.

curl -X POST https://pdf.chat/api/v1/chat/9f2c1b7e4a.../ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message": "What is the invoice total and due date?"}'

Devuelve el mensaje asistente con su respuesta y una lista de páginas citadas:

{"conversation": "a1b2…", "message": {
   "role": "assistant",
   "content": "The total is $42, due on March 3 (p. 1).",
   "citations": [{"page": 1, "cited_text": "The invoice total is $42…", "document_id": "9f2c1b7e4a…"}]
}}

GET /api/v1/chat/<uuid>/history/, Trae la transcripción completa de la conversación para un trabajo.

Ejemplos de código

import requests, time

BASE = "https://pdf.chat/api/v1"
H = {"Authorization": "Bearer YOUR_API_TOKEN"}

# 1. Upload a PDF
with open("contract.pdf", "rb") as f:
    job = requests.post(BASE + "/ocr/", headers=H, files={"file": f}).json()

# 2. Wait until it's ready to chat
while job["status"] in ("pending", "processing"):
    time.sleep(2)
    job = requests.get(f"{BASE}/ocr/{job['uuid']}/", headers=H).json()

# 3. Ask questions — every answer is cited to the page
ans = requests.post(f"{BASE}/chat/{job['uuid']}/", headers=H,
    json={"message": "What is the termination notice period?"}).json()
print(ans["message"]["content"])
print(ans["message"]["citations"])
import fs from "fs";

const BASE = "https://pdf.chat/api/v1";
const H = { Authorization: "Bearer YOUR_API_TOKEN" };

// 1. Upload a PDF
const form = new FormData();
form.append("file", new Blob([fs.readFileSync("contract.pdf")]), "contract.pdf");
let job = await (await fetch(`${BASE}/ocr/`, { method: "POST", headers: H, body: form })).json();

// 2. Wait until it's ready to chat
while (["pending", "processing"].includes(job.status)) {
  await new Promise(r => setTimeout(r, 2000));
  job = await (await fetch(`${BASE}/ocr/${job.uuid}/`, { headers: H })).json();
}

// 3. Ask questions — every answer is cited to the page
const ans = await (await fetch(`${BASE}/chat/${job.uuid}/`, {
  method: "POST", headers: { ...H, "Content-Type": "application/json" },
  body: JSON.stringify({ message: "What is the termination notice period?" })
})).json();
console.log(ans.message.content, ans.message.citations);
# 1. Upload a PDF
curl -X POST https://pdf.chat/api/v1/ocr/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -F "file=@contract.pdf"

# 2. Ask questions (use the uuid from step 1) — answers cited to the page
curl -X POST https://pdf.chat/api/v1/chat/UUID/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message": "What is the termination notice period?"}'

Parámetros

CampoTipoDescripción
filefileRequerido. La imagen o PDF a procesar.
tierstringcpu (por defecto, rápido/impreso) o vlm (premium AI: escritura, diseño, matemáticas).
languagestringauto (por defecto) o un código de idioma (en, ch, ja, ar,...).
toolstringBabos de herramientas opcionales (por ejemplo: summarize-pdf, ask-pdf) pre-marque el chat para esa tarea.

& Límites de errores

CódigoSignificado
400No hay archivo, tipo no soportado, o archivo demasiado grande.
401Token de API no válido o perdido.
402Fuera de las páginas, diario / mensual libre límite alcanzado, o sin créditos. used/cap.
404No se encontró el trabajo UUID.
409Descarga solicitada antes de que el trabajo termine.

Cada página procesa créditos de costos (1/página en el nivel rápido, más en la prima). Los planes pagados aumentan los límites de página por archivo y añaden prioridad. precios.

Preguntas frecuentes

Crear una cuenta gratuita y abrir su página de cuenta, su token se muestra allí con un botón de copia.

Sí, archivos de 5 páginas o menos devuelven el resultado completo en línea en la respuesta POST, por lo que no se necesita votación para la mayoría de las imágenes y PDFs cortos.

Más de 100, incluyendo latín, CJK, árabe, cirílico e índica. language=auto para detectar, o pasar un código específico.

Las cargas se procesan sólo para responder a sus preguntas y se eliminan automáticamente. Nunca vendemos, compartimos o entrenamos en sus documentos.

El uso se mide por página contra el saldo de su cuenta: llamadas anónimas reciben una asignación diaria por IP, cuentas gratuitas un cubo mensual, y los planes de pago utilizan créditos comprados con mayores límites de página por archivo y prioridad. Cuando se acaba se obtiene un 402 con el uso y el tapón en el cuerpo.

Puede enviar PNG, JPG, WEBP, GIF, BMP, TIFF y PDF de varias páginas. Los resultados se descargan como txt, md, docx, pdf (buscable), csv, o json a través del parámetro de formato de la endpoint de descarga.

400 es un archivo que falta, tipo no soportado, o archivo demasiado grande; 401 un token que falta o no es válido; 402 fuera de páginas; 404 un trabajo desconocido UUID; y 409 una descarga solicitada antes de que el trabajo termine.

Un objeto de trabajo con estado, nivel, idioma, page_count y mean_confiance, además del texto completo y la marca de abajo. El array de páginas rompe cada página en bloques con su texto, cuadro delimitador (bbox) y confianza por bloque.

Utilice la CPU (default) para el reconocimiento rápido y de bajo costo de documentos impresos limpios. Utilice vlm, el motor de IA premium, para la escritura a mano, diseños complejos o multicolumnas, matemáticas y traducción, donde es mucho más precisa.

Pase la herramienta con una babosa (por ejemplo, resumen-pdf o preguntar-pdf) para pre-marcar el chat para esa tarea, por lo que el asistente se sintoniza para resumir o responder preguntas sobre el documento.

Archivos de 5 páginas o menos en línea de retorno en la respuesta al POST. Archivos más grandes vuelven inmediatamente como pendientes o procesamiento, y usted encuesta GET /api/v1/ocr/<uuid>/ hasta que el estado se haga o falle. Los planes pagados aumentan el límite de página por archivo.

La API es REST sobre HTTPS, por lo que funciona desde cualquier idioma con un cliente HTTP, vea los ejemplos Python, Node.js y cURL anteriores. No hay SDK que instalar; unas pocas líneas de código HTTP estándar son todo lo que necesita.