Skip to content
Made in the EU · GDPR-native

Fillable PDFs. Powered by an API.

Upload a PDF, draw fields, then generate filled copies — visually or in bulk through a clean REST API. Choose hosted or self-host. Cancel any time.

5 templates and 50 renders/month free, forever.

Docker Hub pulls
invoice.pdf
customer.name
order.number
total
What you get

Built for the teams that ship documents.

Visual editor

Drag fields onto your PDF in the browser. Text, multiline, checkbox, radio, image. Resize, recolor, format dates and currencies inline.

One REST endpoint

POST /api/v1/:workspace/templates/:id/generate with your input JSON. Get back a filled PDF. Bulk job endpoint zips thousands at a time.

Self-hosted option

One Docker container, runs on your own infrastructure. No phone-home.* Free tier works without a license; license keys unlock Advanced, Pro, and Enterprise.

* Paid tiers send a periodic license heartbeat (version + key hash, nothing else). Free tier doesn’t phone home.

E-signature

Built-in e-signature — one POST, four webhooks.

Skip the second vendor. Every template can be sent for signature with a single API call — recipient gets a tokenized link, you get webhook events at every state change. Same EU hosting as your render API. No DocuSign-shaped integration to maintain.

Hosted paid tiers · self-hosted Enterprise.

1

POST /sign-requests

One call. Pluma renders the PDF, places the recipient signature field, queues the invite email.

2

Recipient signs

Tokenized /sign/<token> page. Typed or drawn signature. No account required.

3

Webhook fires

signature.signed lands on your URL within seconds. signature.declined and .expired round out the lifecycle.

4

Signed PDF delivered

Re-rendered with the signature baked in, mailed to your configured To/CC/BCC, stored for audit.

Same EU data residency

Signature requests, PDFs, and audit trail live in the same EU-region object storage as your render output. One DPA, one sub-processor list.

Webhook-first lifecycle

signature.requested · .signed · .declined · .expired. HMAC-signed deliveries. Retried for 24h with exponential backoff.

No second vendor

Your API key, your template, your DPA. Skip the DocuSign-shaped integration entirely — sign-requests live on the same /api/v1/ surface.

How it works

Three steps from PDF to filled output

1

Upload

Drop your PDF in. We keep the original untouched.

2

Place fields

Click to place text, checkbox, radio, or image fields. Bind to JSON paths.

3

Render

POST your input JSON. Get back a filled PDF — single or in bulk.

For developers

One curl call.

POST your data, get a PDF back. Same shape for one render or ten thousand.

curl -X POST https://plumapdf.com/api/v1/$WORKSPACE/templates/$ID/generate \
  -H "Authorization: Bearer pk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"data": {"customer": {"name": "ACME GmbH"}, "amount": "1234.50"}}' \
  -o invoice.pdf
Data in the EU. DPA on request.GDPR by default.Audit log on every admin action.Self-hostable. Your data stays yours.Stable REST API. Idempotency keys.

Pick a tier when you're ready

Free forever for solo experimenters. Paid tiers unlock seats, storage, and Docker registry export.