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 — full reference at /docs/merge.
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 without a key — no signup, no auth. Need more? A free API key (250/month, emailed, no card) takes one field, and paid tiers (Indie $16/mo for 4,000, Pro $79/mo for 25,000) are live. Pass the key as X-API-Key. Hit your 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 none of those quotas is the right number for you, hello@pdfops.dev handles custom volume — and the contact form is how I prioritize which endpoints ship next.
What's coming
Beyond the two calls above, /api/inspect (list a PDF's form fields) and /api/invoice (a complete invoice PDF from JSON) are also live — see the docs. 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
Tell me on the contact form which one matters most for your use case — it's what prioritizes 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.
Related
- The playground — run fill and merge in the browser before writing any code
- Free form-field inspector — see a PDF's field names and the exact JSON to fill them
- Fill and merge PDFs in your browser — the no-code side of the same API