Generate, track, sign
PDFs with one API.
Each recipient gets a personal link. Every open, page read, comment and signature streams into your app or agent.
EU-hosted, GDPR-native Free plan, no card
From the PDF you generate
to the signed copy in your app.
Generate
Generate PDFs from HTML or Office files, fill forms, merge, compress and OCR — every operation, one API.
Track
Personal links per recipient track every open, page read, comment and form entry, streamed to your webhook.
Sign
Request signatures in the tracked link, confirmed by emailed code. Sealed PDF with audit trail when done.
Every PDF operation, one API.
Generate from HTML or Office files. Merge, compress, watermark. Fill forms, read text, lock with a password. REST endpoints in your stack.
HTML → PDF
Generate styled PDFs straight from HTML markup.
Office → PDF
Convert Word, Excel, and PowerPoint files to PDF.
Merge PDFs
Combine many PDFs into one, in your chosen order.
Compress
Shrink file size without visible quality loss.
Watermark / Stamp
Stamp logos, signatures, or watermarks onto pages.
Fill forms
Fill every field of a PDF form with your data.
Extract text
Pull the plain text out of a PDF, page by page.
Password protect
Encrypt a PDF with user and owner-level passwords.
And more PDF endpoints. See the full list in the docs.
One link per recipient, every event comes back named.
Generate a tokenized link per recipient. Every event downstream is already identified — no logins, no exports, no dashboards in the way.
{ "name": "Alex Rivera", "email": "alex@example.com" }
{ "token": "fi6WgjyH", "name": "Alex Rivera", "email": "alex@example.com", "url": "https://docs.apdf.io/acme/68052-a7bc5?v=fi6WgjyH", "is_active": true, "created_at": "2026-05-08T09:00:00Z" }
Send a link to a viewer that streams every interaction back.
Your recipient opens the PDF in our hosted viewer — no install, no setup, just a link. They read, fill forms, and annotate. Our viewer, not your lock-in.
Is the price locked for 12 months?
Replaces the attachment.
No 25 MB ceiling, no spam-filter roulette. Revoke a recipient’s access at any time — even after the link has been forwarded.
Replaces the dashboard.
No additional dashboards to log in or to refresh. Events land in your CRM, or your agent the moment they happen — in time to act before they move on.
You own the signal.
We host the surface.
What you actually get back.
Every reader interaction lands in your stream as a typed event. Below, the ones worth acting on — each in a JSON shape your code already speaks.
{ "session": { "id": "0lLKvtyoC1nl3WD0", "recipient": { "name": "Alex Rivera", "email": "alex@example.com" } }, "metrics": { "total_duration_ms": 89364, "pages_viewed": 8, "completion_pct": 67, "downloads": 0, "prints": 1 }, "pages": [ { "page": 4, "duration_ms": 47100 }, { "page": 5, "duration_ms": 22300 }, { "page": 7, "duration_ms": 12500 } ], "events": [ { "event": "annotation:create", "page": 4, "payload": { "comment": "Is the price locked for 12 months?" } } ] }
Document opened
First proof of life. They engaged at all.
Page read
Where attention actually lives. Find the strong sections, spot the boring ones.
Link clicked
The clearest "tell me more" signal — they pulled on a specific thread.
Form submitted
Structured intent — names, answers, choices, captured field by field.
Annotation created
Questions and pushback in writing — the highest-engagement signal you can get.
Signature completed
Every signer has signed. The sealed PDF is on its way and your webhook already fired.
And more events. See all on the analytics page.
From form fill to next step.
Field reports, contracts, customer intake — each submission delivers every field as structured data to your endpoint, ready to update a CRM record, ping a team channel, or push the project to its next stage.
Need to confirm pricing for the additional seats before signing. Can we hop on a call this week?
{ "doc_id": "68052-a7bc5", "recipient": { "name": "Alex Rivera", "email": "alex@example.com" }, "fields": [ { "name": "full_name", "type": "text", "page": 1, "value": "Alex Rivera" }, { "name": "plan_tier", "type": "radio", "page": 1, "value": true, "exportValue": "Pro" }, { "name": "notes", "type": "text", "page": 2, "value": "Need to confirm pricing for the additional seats..." }, { "name": "subscribe", "type": "checkbox", "page": 2, "value": true, "exportValue": "Subscribe" } ] }
Signed in the same link
they already read.
Every party signs their own part, confirmed with a code sent to their email. When the last one signs, everyone gets the sealed PDF back with an audit trail.
Your team and your company can sign too. See how on the e-signature page.
Turn any event into an action.
Compose any combination of events as the trigger, narrow with filters, and wire the result to your endpoint. No glue code, no separate tool to learn.
When
When the document is opened
downloaded
printed
When a page is read
left
When the form is submitted
When the document is opened
a page is visited
When text is copied
a link is clicked
When the document is signed
When an annotation is created
updated
When an annotation is created
updated
deleted
Filter
only if reading time is over 5 minutes
at least 80% of the document is read
only on page 4
after 30 seconds spent on the page
only if 8 or more pages were viewed
only if 3 or more pages were viewed
only if 5 or more pages were viewed
only if 80% of the document was read
only if reading time is over 1 minute
only on page 2 or later
reading time is over 2 minutes
Then
Give your agents eyes.
Connect Apdf over MCP. Your agent sees every reader signal, reads the context, and acts on it — autonomously. It can ask for a signature; only people sign.
Build, wire, or hand it off.
From embedded inside your app to fully autonomous.
Three ways to put Apdf to work.
Embed in your product
A user of your app sends a contract. You see who opened it, where they paused, and get the signed PDF back. Hosted viewer, personal links, JSON API.
Wire it into your stack
A quote is opened again — HubSpot gets a task, the rep a Slack ping. Webhooks on every event; rules run inside Apdf or in your own tools.
Let an agent close the loop
Connect over MCP. Attention drops on page 4 — your agent reads the context, drafts the follow-up and asks for the signature. People sign.
GDPR-native by default. Your data never leaves the EU.
Your PDFs and reader events stay yours. Period.
First-class agent support, not a retrofitted add-on.
No vendor lock-in. Open API, your data on demand.