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:

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