PDF.chat Säiten

Upload a PDF and chat with it from your own app — ask questions and get answers cited to the page, in 100+ languages. Metered per page, no surprises.

Iwwersiicht

D'PDF.chat API ass eng kleng REST Interface. POST Dir kënnt e Dokument opmaachen fir et ze importéieren an e Job mat dem Dokumenttext an enger Säiten- Ënnerdeelung (Text, Boundingboxen, Vertrauen) zréckzéien. POST Froen géint dee Job stellen an Äntwerten aus dem Dokument kréien, all mat Zitater vun der Säit, vun där se koum. Jobs vun 5 Säiten oder manner ginn inline zréck; méi grouss Jobs ginn direkt mat engem pending Status, deen Dir nofrot bis done.

  • Basis- URL: https://pdf.chat
  • Dokumenter an: PDF, plus Word, PowerPoint, Text a Biller (PNG, JPG, WEBP, GIF, BMP, TIFF)
  • Chat aus: Antworten mat Säitenzitater; Transkriptiounen iwwer den Historik-Ennpunkt
  • Veraarbechte Text aus: txt, md, docx, pdf, csv, json
  • Lesemotoren: cpu (schnell, gedréit Dokumenter) an vlm (Premium AI, Handschrëft, komplex Layout, Mathematik)

Authentifizéierung

Authentifizéieren mat Ärem API-Token (Fënnt et op Ärem Kont Säit(D'Kopplung ass net méi méiglech.)

Authorization: Bearer YOUR_API_TOKEN

Dir kënnt och passéieren ?api_token=… als Query-Parameter. D'Benotzung gëtt géint d'Säit-Balance vun Ärem Kont gemeet.

Dokument ausféieren

POST /api/v1/ocr/, D'Form vun der Uewerfläch ass erodéiert.

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"

Gitt den Job zréck. Fir Dateien mat ≤5 Säiten ass et schonns do done mat dem Text; méi grouss Dateien kommen zréck pending/processingD'Status-Endpunkte sinn:

{
  "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 } ] } ]
}

Resultat kréien

GET /api/v1/ocr/<uuid>/, Froen bis status ass done oder failed.

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

Format erofgelueden

GET /api/v1/ocr/<uuid>/download/?format=md, Exportéiert d' Resultat. format ass ee vun 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 mat engem Dokument

Froen iwwer en ofgeschlossen Auftrag stellen. D' Äntwerten hänken nëmmen um extrahéierte Text of an zitéieren d' Quellsäit. Et ass e Kont Token néideg, d' chat Feature ass Kont- gegated.

POST /api/v1/chat/<uuid>/, JSON-Bau {"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?"}'

Gitt d' Assistent- Noriicht mat der Äntwert zréck an eng Lëscht vun de zitéierte Säiten:

{"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/, % 1:% 2,% 3,% 4,% 5,% 6

Code-Beispill

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?"}'

Parameter

FeldTypBeschreiwung
filefileErfuerderlech. D' Bild oder d' PDF, déi veraarbecht soll ginn.
tierstringcpu (Standard, séier/gedréit) oder vlm (D'Sprooche vun der Welt: Lëtzebuergesch, Däitsch, Franséisch, Englesch).
languagestringauto (Standard) oder e Sproochcode (en, ch, ja, ar(Däitsch)
toolstringD'Spill ass op der selwechter Plattform (z. B. summarize-pdf, ask-pdf) to pre-frame the chat for that task.

Fehler & Grenzen

CodeBedeitung
400Keng Datei, Typ net ënnerstëtzt, oder Datei ze grouss.
401D'Aart ass entweder endemesch oder aarm.
402Net méi Säiten, d'Limit vun der gratis Zäit am Dag/Mount ass erreecht, oder keng Kreditter. Den Text enthält used/cap.
404Job-UUID net fonnt.
409De Download gouf virum Ofschloss vum Job ugefuerdert.

All Säit, déi veraarbecht gëtt, kascht Credits (1/Säit am Schnellmodus, méi am Premiummodus). Bei bezuelte Pläng gëtt d'Säitlimit pro Datei erhéicht an d'Prioritéit erhéicht. Präis.

Häufig gestallt Froen

Erstellen vun engem gratis Konto an öffnen Är Kont Säit, Äert Token gëtt do mat engem Kopie- Knäppchen gewisen.

Et gëtt 5000 verschidden Aarte vu Pflanzen, déi an der ganzer Welt liewen, an déi meescht vun hinnen hunn eng ganz breet Palette vu Liewensmëttel.

Iwwer 100, dorënner laténgesch, CJK, arabesch, kyrillesch an indisch Schrëften. Benotzt language=auto fir e spezifesche Code ze detektéieren oder ze iwwerginn.

Uploads sinn nëmmen fir Är Froen ze beäntweren a ginn automatesch geléist. Mir verkafen, deelen oder trainéieren Är Dokumenter ni.

D'Benotzung gëtt pro Säit géint Äre Kontsaldo gemeet: anonyme Rufe kréien eng pro IP all Dag, gratis Konts e monatlecht Bucket, a bezuelte Pläng benotzen kaaft Kreditter mat héijer pro Datei Säiten Limiten a Prioritéit. Wann Dir aus ass kritt Dir e 402 mat benotzt an Limit am Kierper.

Dir kënnt PNG, JPG, WEBP, GIF, BMP, TIFF an eng méisäiteg PDF schécken. Resultater kënne wéi txt, md, docx, pdf (sichbar), csv oder json iwwer de Formatparameter vum Download-Ennpunkt erofgelueden ginn.

400 ass eng Datei déi net do ass, e Typ deen net ënnerstëtzt gëtt oder déi ze grouss ass; 401 ass e fehlend oder ongülteg Token; 402 ass net méi op der Säit; 404 ass eng onbekannt UUID; an 409 ass en Download deen virum Ofschloss vum Job ugefrot gouf. D' Feelertexter enthalen eng kuerz Meldung.

En Aufgabobjekt mat Status, Tier, Sprooch, page_count an mean_confidence, plus dem vollen Text an Markdown. D'Säit-Array bréngt all Säit an Blöcke mat hirem Text, Boundingbox (bbox) an pro-Block Confiance.

Benotzt CPU (standard) fir eng séier, niddreg-Käschte Erkennung vu sauberen gedréiten Dokumenter. Benotzt vlm, d'Premium AI Engine, fir Handschreiwen, komplex oder méi Spalten Layouts, Mathematik, an Iwwersetzungen, wou et vill méi genee ass.

Pass tool with a slug (for example summarize-pdf or ask-pdf) to pre-frame the chat for that task, so the assistant is tuned to summarize or answer questions about the document.

Dateien mat 5 Säiten oder manner ginn an der POST-Antwort inline zréck. Grouss Dateien kommen direkt zréck als an der Warteschleife oder am Prozess, an Dir frot GET /api/v1/ocr/<uuid>/ bis de Status fäerdeg ass oder net. Bezuelt Pläng erhéijen d' Säitenoptioun pro Datei.

D'API ass einfach REST iwwer HTTPS, sou datt et vun all Sprooch mat engem HTTP Client funktionnéiert, kuckt d'Python, Node.js, an cURL Beispiller uewen. Et gëtt keng SDK ze installéieren; e puer Linnen vun standard HTTP Code sinn alles wat Dir braucht.