Quickstart

Intended base URL https://api.getpdf.dev · Auth Authorization: Bearer df_…

This interface is not served from getpdf.dev yet. The homepage waitlist does not create a key.

① Get a key② POST /v1/render③ Save the PDF

POST/v1/render

curl -X POST $BASE/v1/render -H "Authorization: Bearer $KEY" \
  -H 'content-type: application/json' \
  -d '{"template_id":"invoice","data":{"number":"INV-1","currency":"$",
       "items":[{"description":"Work","qty":2,"price":50}]},
       "options":{"format":"A4","landscape":false}}' -o invoice.pdf

template_id | template | htmldata {}format: A4 · Letter · Legallandscape↩ x-getpdf-usage

Templates

invoice
invoice
receipt
receipt
certificate
certificate
report
report
letter
letter
GET/v1/templates
POST/v1/templates { id, name, source, sample }
GET/v1/templates/:id
PUT/v1/templates/:id
DELETE/v1/templates/:id
GET/v1/usage

{{money v currency}}{{mul a b}}{{sum items "qty" "price"}}50 templates / keysource ≤ 256 KBprivate to your key

MCP server

{ "mcpServers": { "getpdf": { "command": "npx", "args": ["-y","getpdf-mcp"],
    "env": { "GETPDF_API_KEY": "df_…" } } } }

list_templatesget_templatecreate_templateupdate_templatedelete_templaterender_pdf → base64 PDF

Security

🧪 fresh context / render🚫 JS off by default🛡 SSRF guard: localhost · private IPs · 169.254.169.254 · file:// blocked🗑 PDFs never stored⏱ 2 MB in · 20 MB out · 15 s

Errors

400bad input
401bad key
402quota reached
403read-only / limit
404unknown template
409id conflict
413too large
504timeout

Failed renders don't count toward your quota.