API PDF.chat
Téléchargez un PDF et chat avec celui-ci depuis votre propre application — posez des questions et obtenez des réponses citées à la page, en 100+ langues.
Aperçu général
L'API PDF.chat est une petite interface REST. POST un document pour l'ingérer et récupérer un travail avec le texte du document et une ventilation par page (texte, boîtes de délimitation, confiance). POST Les emplois de 5 pages ou moins sont retournés en ligne; les emplois plus importants sont immédiatement retournés avec un pending statut que vous sondage jusqu'à done.
- URL de base :
https://pdf.chat - Documents dans: PDF, plus Word, PowerPoint, texte et images (PNG, JPG, WEBP, GIF, BMP, TIFF)
- Chat sur: réponses avec citations de pages; transcriptions via le point d'arrivée historique
- Texte traité :
txt,md,docx,pdf,csv,json - Moteurs à lecture:
cpu(documents rapides, imprimés) etvlm(IA premium, écriture, mise en page complexe, mathématiques)
Authentification
Authentifier avec votre Jeton API (trouver sur votre page de compte) comme en-tête de porteur:
Authorization: Bearer YOUR_API_TOKEN
Vous pouvez également passer ?api_token=… comme paramètre de requête. L'utilisation est mesurée en fonction du solde de page de votre compte.
Soumettre un document
POST /api/v1/ocr/, téléchargement de formulaire multiparties.
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"
Retourne la tâche. Pour les fichiers ≤5 pages, il est déjà done avec le texte; les fichiers plus grands reviennent pending/processing, sondage le point final de l'état.
{
"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 } ] } ]
}
Obtenir un résultat
GET /api/v1/ocr/<uuid>/, sondage jusqu'à status est done ou failed.
curl https://pdf.chat/api/v1/ocr/9f2c1b7e4a.../ \
-H "Authorization: Bearer YOUR_API_TOKEN"
Télécharger un format
GET /api/v1/ocr/<uuid>/download/?format=md, d'exporter le résultat. format est l'un des 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 avec un document
Posez des questions sur un travail terminé. Les réponses sont fondées uniquement dans le texte extrait et citez la page source. Nécessite un jeton de compte, la fonction chat est liée au compte.
POST /api/v1/chat/<uuid>/, JSON corps {"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?"}'
Renvoie le message d'assistant avec sa réponse et une liste de pages citées :
{"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/, chercher le compte rendu complet de la conversation pour un travail.
Exemples de codes
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?"}'
Paramètres
| Champ | Type | Désignation des marchandises |
|---|---|---|
file | file | Requis. L'image ou PDF à traiter. |
tier | string | cpu (par défaut, rapide/imprimé) ou vlm (IA primaire: écriture, mise en page, maths). |
language | string | auto (par défaut) ou un code de langue (en, ch, ja, ar,...). |
tool | string | Limace d'outil en option (par exemple summarize-pdf, ask-pdf) de précadrer le chat pour cette tâche. |
Erreurs et limites
| Code | Signification |
|---|---|
400 | Aucun fichier, type non pris en charge, ou fichier trop grand. |
401 | Jeton API manquant ou invalide. |
402 | Hors pages, limite quotidienne/mensuelle atteinte, ou aucun crédit. L'organisme comprend used/cap. |
404 | Emploi UUID introuvable. |
409 | Télécharger demandé avant la fin du travail. |
Chaque page traitée coûte des crédits (1/page sur le niveau rapide, plus sur les primes). Les régimes payés augmentent les plafonds de page par fichier et ajoutent la priorité. prix.
Foire aux questions
language=auto pour détecter ou passer un code spécifique.