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.
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.
POST /sign-requests
One call. Pluma renders the PDF, places the recipient signature field, queues the invite email.
Recipient signs
Tokenized /sign/<token> page. Typed or drawn signature. No account required.
Webhook fires
signature.signed lands on your URL within seconds. signature.declined and .expired round out the lifecycle.
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.
Three steps from PDF to filled output
Upload
Drop your PDF in. We keep the original untouched.
Place fields
Click to place text, checkbox, radio, or image fields. Bind to JSON paths.
Render
POST your input JSON. Get back a filled PDF — single or in bulk.
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.pdfPick a tier when you're ready
Free forever for solo experimenters. Paid tiers unlock seats, storage, and Docker registry export.