Ihr erster Request in Node.js
- Kostenlosen API-Schlüssel erhaltenRegistrieren Sie sich und kopieren Sie ihn aus Ihrem Dashboard.
- In einer Umgebungsvariable speichern
PDF_SUMMARIZE_KEY. - FormData erstellenHängen Sie das PDF als Blob unter dem Feld
filean. - Als POST senden und das JSON auslesen.
// summarize.mjs — node summarize.mjs report.pdf
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const API_URL = 'https://pdf-summarize.com/api/summarize.php';
const KEY = process.env.PDF_SUMMARIZE_KEY;
export async function summarizePdf(path, { length = 'medium', format = 'bullets', outputLang = 'auto' } = {}) {
const form = new FormData();
form.append('file', new Blob([await readFile(path)], { type: 'application/pdf' }), basename(path));
form.append('length', length);
form.append('format', format);
form.append('outputLang', outputLang);
const res = await fetch(API_URL, {
method: 'POST',
headers: { Authorization: `Bearer ${KEY}` },
body: form,
signal: AbortSignal.timeout(180_000),
});
const data = await res.json();
if (!res.ok || !data.success) throw new Error(`${res.status}: ${data.error ?? JSON.stringify(data)}`);
return data;
}
const result = await summarizePdf(process.argv[2]);
console.log(result.summary);
console.log(`${result.page_count} Seiten, ${result.processing_time}s, ${result.requests_remaining} Verbleibende Requests`);
Zusammenfassung streamen
export async function streamSummary(path, onText) {
const form = new FormData();
form.append('file', new Blob([await readFile(path)], { type: 'application/pdf' }), basename(path));
form.append('length', 'long');
const res = await fetch(API_URL + '?stream=1', { method: 'POST', headers: { Authorization: `Bearer ${KEY}` }, body: form });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const decoder = new TextDecoder();
let buffer = '';
for await (const chunk of res.body) {
buffer += decoder.decode(chunk, { stream: true });
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
if (!line.startsWith('data: ')) continue;
const payload = line.slice(6);
if (payload === '[DONE]') return;
const event = JSON.parse(payload);
if (event.error) throw new Error(event.error);
if (event.type === 'summary') onText(event.content);
}
}
}
await streamSummary('paper.pdf', (t) => process.stdout.write(t));
Ein Express-Endpunkt für Ihre eigene App
Ihr Frontend lädt Daten auf Ihren Server hoch, welcher den Schlüssel hinzufügt und die Datei weiterleitet:
import express from 'express';
import multer from 'multer';
const app = express();
const upload = multer({ limits: { fileSize: 20 * 1024 * 1024 } });
app.post('/summarize', upload.single('file'), async (req, res) => {
if (!req.file) return res.status(400).json({ error: 'Keine Datei' });
const form = new FormData();
form.append('file', new Blob([req.file.buffer], { type: 'application/pdf' }), req.file.originalname);
form.append('length', req.body.length ?? 'medium');
const r = await fetch('https://pdf-summarize.com/api/summarize.php', {
method: 'POST', headers: { Authorization: `Bearer ${process.env.PDF_SUMMARIZE_KEY}` }, body: form,
});
res.status(r.status).json(await r.json());
});
app.listen(3000);
Fehlerbehandlung
| Status | Bedeutung |
|---|---|
| 400 | Fehlende Datei, kein PDF oder Seitenlimit überschritten |
| 401 | Fehlender oder ungültiger Schlüssel |
| 413 | Datei zu groß |
| 422 | Kein lesbarer Text im PDF gefunden |
| 429 | Rate-Limit oder Kontingent erreicht – später mit Backoff erneut versuchen |
| 500 | Vorübergehender Fehler bei der Zusammenfassung – erneut versuchen |
Häufig gestellte Fragen
Kann ich die API direkt aus dem Browser aufrufen?
Technisch ja, aber Ihr Schlüssel wäre für jeden sichtbar. Leiten Sie Requests über Ihr Backend weiter, wie im Express-Beispiel gezeigt.
Funktioniert es mit Deno, Bun oder Cloudflare Workers?
Ja – jede Laufzeitumgebung mit standardisiertem fetch und FormData funktioniert auf dieselbe Weise.
Gibt es ein TypeScript-SDK?
Noch nicht. Die API besteht aus einem einzigen Multipart-Endpunkt, sodass ein kleiner typisierter Wrapper um fetch völlig ausreicht.
Wo finde ich die vollständige Referenz?
In der API-Dokumentation finden Sie alle Parameter und Beispiele in mehreren Sprachen.