1. Home
  2. Gidsen
  3. PDF-samenvatting API met JavaScript

PDF's samenvatten met JavaScript & Node.js — API-handleiding

Roep de PDF Summarizer API aan vanuit Node.js (of een andere server-side JavaScript-runtime) met niets meer dan fetch en FormData. Deze handleiding behandelt je eerste verzoek, streaming, een klein Express-endpoint voor je eigen app en foutafhandeling.

Kernmerken
  • Werkt met Node.js 18+ (ingebouwde fetch, FormData, Blob) — geen SDK nodig.
  • POST https://pdf-summarize.com/api/summarize.php, multipart/form-data, veld file, header Authorization: Bearer sk_....
  • Opties: length, format, outputLang, includeKeywords.
  • Voeg ?stream=1 toe en lees de response-body uit als Server-Sent Events.
  • Stel je API-sleutel nooit bloot in browsercode — proxy verzoeken via je eigen server.
Bijgewerkt 2 min leestijd Door het PDF Summarizer-team

Je eerste verzoek in Node.js

  1. Ontvang een gratis API-sleutelRegistreer je en kopieer deze vanuit je dashboard.
  2. Sla deze op in een omgevingsvariabelePDF_SUMMARIZE_KEY.
  3. Bouw een FormDataVoeg de PDF toe als een Blob onder het veld file.
  4. Verstuur via POST en lees de JSON.
// 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} pagina's, ${result.processing_time}s, nog ${result.requests_remaining} verzoeken over`);

De samenvatting 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));

Een Express-endpoint voor je eigen app

Je frontend uploadt naar jouw server, die de sleutel toevoegt en het bestand doorstuurt:

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: 'Geen bestand' });
  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);

Foutafhandeling

Status Betekenis
400 Ontbrekend bestand, geen PDF of paginalimiet overschreden
401 Ontbrekende of ongeldige sleutel
413 Bestand is te groot
422 Geen leesbare tekst in de PDF
429 Limiet of quotum bereikt — probeer het later opnieuw met backoff
500 Tijdelijke fout bij het samenvatten — probeer opnieuw
Ervaar de engine zelf in actieProbeer de gratis wekelijkse tool met een van je PDF's.
Probeer de tool →

Veelgestelde vragen

Kan ik de API rechtstreeks vanuit de browser aanroepen?

Technisch gezien wel, maar je sleutel is dan zichtbaar voor iedereen. Proxy verzoeken via je backend zoals in het Express-voorbeeld.

Werkt dit met Deno, Bun of Cloudflare Workers?

Ja — elke runtime met standaard fetch en FormData werkt op dezelfde manier.

Is er een TypeScript SDK?

Nog niet. De API is een enkel multipart-endpoint, dus een kleine getypte wrapper rond fetch is voldoende.

Waar vind ik de volledige naslagwerken?

In de API-documentatie, met alle parameters en voorbeelden in verschillende talen.

Geschreven door het PDF Summarizer-team, de makers van de extractie- en samenvattingpipeline achter deze site. We testen elke methode die hier wordt beschreven op echte documenten. Laatst gecontroleerd op 19 oktober 2026. Een fout gevonden? Laat het ons weten.