Quickstart
Getting started with PDFops
30 seconds to a working PDF API call. No auth, no signup.
PDFops is live. Here's how to make your first call in three lines of shell.
Fill a PDF form
Pull a PDF with form fields off your desktop and swap in the field-name JSON. Or grab the sample template — its AcroForm fields are named exactly as the curl below uses them.
curl -X POST https://pdfops.dev/api/fill-form \
-F "pdf=@invoice-template.pdf" \
-F 'fields={"customer_name":"Acme Co","total":"$1,250.00"}' \
-o filled.pdf
You get a filled PDF back. The fields JSON keys must match AcroForm field names that already exist in your PDF — in the example above, an invoice template with customer_name and total fields. Send a name the PDF doesn't have and you get a 400 unknown_field; the endpoint doesn't create new fields or place text by coordinate. Bring a fillable template you authored (Acrobat, Mac Preview, LibreOffice Draw, or pdftk all work), or use the sample above to see the round-trip first. Full reference at /docs/fill-form — request schema, all 5 field-type semantics, every error code.
Merge PDFs
Any number of pdf form parts. They're concatenated in the order you pass them.
curl -X POST https://pdfops.dev/api/merge \
-F "pdf=@cover.pdf" \
-F "pdf=@body.pdf" \
-F "pdf=@appendix.pdf" \
-o combined.pdf
Limits
100 requests per IP per month during beta. No signup, no auth. Hit the cap and you'll get a 429 Too Many Requests response with a Retry-After header set to the seconds until the next calendar month rolls (UTC).
If 100/mo is going to be the wrong number for you, join the waitlist — keys with 1,000–10,000/mo are coming, free during beta, and the form is how I'm prioritizing which endpoints ship next.
What's coming
The two endpoints above are what's live today. Next on the list:
/api/stamp— apply text or image stamps to a PDF (think: confidential watermarks, page numbers, draft markers)/api/sign— sign a PDF programmatically/api/extract-text— pull text out of a PDF for downstream processing/api/redact— remove sensitive content destructively
Vote on the waitlist form for which one matters most for your use case. The waitlist is the only thing prioritizing what ships next.
Why this exists
The longer story is in Why I built PDFops — short version: every SaaS I've shipped eventually needs PDFs, the existing options either cost too much at scale or assume a backend stack I don't use, and I got tired of solving it from scratch every time.