PDF.chat API
Upload een PDF en chat met het uit uw eigen app. Stel vragen en krijg antwoorden geciteerd naar de pagina, in 100+ talen. Metered per pagina, geen verrassingen.
Overzicht
De PDF.chat API is een kleine REST interface. POST een document om het in te nemen en terug te krijgen een baan met de tekst van het document en een per pagina uitsplitsing (tekst, gebonden dozen, vertrouwen). POST vragen tegen die baan en krijg antwoorden gegrond in het document, elk citerend de pagina waar het vandaan kwam. Banen van 5 pagina's of minder terugkeer inline; grotere banen terugkeren onmiddellijk met een pending status die u poll tot done.
- Basis-URL:
https://pdf.chat - Documenten in: PDF, plus Word, PowerPoint, tekst, en afbeeldingen (PNG, JPG, WEBP, GIF, BMP, TIFF)
- Chat uit: antwoorden met pagina citaten; transcripten via het eindpunt van de geschiedenis
- Bewerkte tekst:
txt,md,docx,pdf,csv,json - Lezende motoren:
cpu(snel, gedrukt) envlm(premium AI, handschrift, complexe indeling, wiskunde)
Authenticatie
Authenticeer met uw API token (vind het op je accountpagina) als een Bearer header:
Authorization: Bearer YOUR_API_TOKEN
U kunt ook passeren ?api_token=… als een query parameter. Gebruik wordt gemeten met behulp van de paginabalans van uw account.
Een document indienen
POST /api/v1/ocr/, multipart formulier uploaden.
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"
Geeft de taak terug. Voor ≤5-pagina bestanden is het al done met de tekst; grotere bestanden komen terug pending/processing, bekijk het status eindpunt.
{
"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 } ] } ]
}
Een resultaat krijgen
GET /api/v1/ocr/<uuid>/, peiling tot status is done of failed.
curl https://pdf.chat/api/v1/ocr/9f2c1b7e4a.../ \
-H "Authorization: Bearer YOUR_API_TOKEN"
Een formaat downloaden
GET /api/v1/ocr/<uuid>/download/?format=md, exporteer het resultaat. format is een van 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 met een document
Stel vragen over een voltooide taak. Antwoorden worden alleen in de uitgepakte tekst geaard en citeer de bronpagina. Vereist een account token, de chat functie is account-gaated.
POST /api/v1/chat/<uuid>/, JSON-lichaam {"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?"}'
Geeft het assistentbericht terug met zijn antwoord en een lijst van geciteerde pagina's:
{"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/, Haal het volledige gespreksscript voor een baan.
Codevoorbeelden
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?"}'
Parameters
| Veld | Type | Omschrijving |
|---|---|---|
file | file | Vereist. De afbeelding of PDF die moet worden verwerkt. |
tier | string | cpu (standaard, snel/bedrukt) of vlm (premium AI: handschrift, layout, wiskunde). |
language | string | auto (standaard) of een taalcode (en, ch, ja, ar,...). |
tool | string | Optionele gereedschapslak (bv. summarize-pdf, ask-pdf) om de chat voor die taak te pre-frame. |
Fouten & limieten
| Rubriek | Betekenis |
|---|---|
400 | Geen bestand, niet ondersteund type of bestand te groot. |
401 | Ontbrekende of ongeldige API token. |
402 | Uit pagina's, dagelijks / maandelijks gratis limiet bereikt, of geen credits. used/cap. |
404 | Job UUID niet gevonden. |
409 | Download gevraagd voordat de opdracht is voltooid. |
Elke pagina verwerkt kosten kredieten (1 pagina op de snelle tier, meer op premie). Betaalde plannen verhogen per-bestand pagina plafonds en toevoegen prioriteit. Zie prijsstelling.
Veelgestelde vragen
language=auto om een specifieke code te detecteren of door te geven.