A single API to manage all your agreements and clickwraps
Consent activity
Live events from your agreements and onboarding flows.
Today
1,284
Acceptance rate
98.7%
Failed lookups
0.03%
Accepted Terms v3.2
jamie@acme.io
Accepted Privacy v2.1
workspace_1148
Accepted DPA v1.7
billing-admin
await fetch("/api/track", {
method: "POST",
headers: {
"X-API-Key": process.env.CLICKWRAP_API_KEY!,
"Content-Type": "application/json"
},
body: JSON.stringify({
agreement_id: "agr_terms_v3",
user_identifier: user.email,
metadata: { source: "signup" }
})
})<50ms
API latency
7 years
Consent records retained
99.9%
Monthly delivery target
15 min
Setup time
More like a product surface, less like a form helper bolted onto your app.
Terms v3.2
Immutable content snapshot
Privacy v2.1
Immutable content snapshot
DPA v1.7
Immutable content snapshot
Version every agreement
Ship legal updates without losing traceability. Each consent stays tied to the exact agreement copy a user accepted.
Signup
412 events
Checkout
188 events
Workspace invite
54 events
Mobile app
23 events
Track consent everywhere
Collect records from signup forms, billing changes, admin invites, or any custom workflow through one predictable API.
Keep audit history readable
Every response includes the fields compliance teams actually ask for: timestamp, IP, user agent, source metadata, and agreement version.
const response = await fetch("/api/track", {
method: "POST",
headers: {
"X-API-Key": "ck_live_xxx",
"Content-Type": "application/json"
},
body: JSON.stringify({
agreement_id: "agr_privacy_v2",
user_identifier: "user@example.com",
metadata: {
source: "checkout",
workspace_id: "ws_123"
}
})
})
const consent = await response.json()Integrate once, then reuse it anywhere consent matters.
Create an agreement and publish a version from the dashboard.
Send the agreement ID and your user identifier to the tracking endpoint.
Store the returned consent record ID alongside the user or workspace event.