Logo
Recipient Links

Per-recipient
PDF tracking links.

A token per recipient. Every signal downstream — read, click, annotation, form — already named. No reader logins, no joins.

One token.
One named recipient.

Mint a link per recipient. Track every open. Revoke any time.

A
Alex Rivera
docs.apdf.io/acme/68052?v=fi6WgjyH
Active
S
Sara Chen
docs.apdf.io/acme/68052?v=2k8mPq3X
Active
T
Tom Mendez
docs.apdf.io/acme/68052?v=9dRtA1nE
Active
L
Lena Park
docs.apdf.io/acme/68052?v=Yc4Hp2vL
Revoked
M
Marcus Brown
docs.apdf.io/acme/68052?v=8nWxB7uF
Active
5 minted · 4 active · 1 revoked

Names follow the events.
Everywhere.

Once a recipient opens their link, every signal that follows — reads, clicks, annotations, form fields — arrives already attributed to them.

0:00 2:00 4:00 6:00 8:00
A Alex Rivera
15 events
S Sara Chen
10 events
T Tom Mendez
3 events
L Lena Park
14 events
M Marcus Brown
1 events
43 events across 5 recipients — every one already named.

Every webhook
knows who.

The recipient sits inside every event payload — no joins to your CRM, no exports, no reconciliation.

POST → your endpoint
application/json
{
"automation": {
"id": "a8K2pXq4",
"name": "Hot-lead Slack ping"
},
"document": {
"doc_id": "68052-a7bc5",
"name": "Proposal — Acme × Contoso",
"viewer_url": "https://docs.apdf.io/acme/68052-a7bc5",
"file_pages": 12
},
"trigger": {
"matched_event": "annotation:create",
"conditions_evaluated": true
},
"event": {
"session_id": "0lLKvtyoC1nl3WD0",
"viewer_id": "v_8z3kPq2",
"recipient": {
"name": "Alex Rivera",
"email": "alex@example.com"
},
"data": {
"page": 4,
"type": "highlight",
"annotated_text": "$12,000/mo",
"comment_text": "Is the price locked for 12 months?"
}
},
"session": {
"total_duration_ms": 152000,
"pages_viewed": 8,
"completion_rate": 67
},
"timestamp": "2026-05-08T09:42:11+00:00"
}

Same shape on every firing — event.recipient always present when the session came in via a link.

Send a link.
See who reads.