Terms of Service Acceptance
Collect timestamped, tamper-proof proof that every user accepted your Terms of Service, and automatically prompt re-consent whenever your terms change.
Screenshot: ToS acceptance modal on a sign-up screen with checkbox and "I Accept" button
Before You Begin
- You have a Propper account and at least one organization set up.
- Your Terms of Service document is ready to paste or upload.
Step 1: Create a Template
- Go to Click → Templates → New Template.
- Set the type to Static — best for ToS content that is the same for all users.
- Give it a name (e.g., Terms of Service, v1) and click Save. The template is created in Draft status.
Screenshot: New Template dialog with "Static" selected and name field filled
Need to personalize the ToS per user (e.g., inject a company name)? Use the Generated type and define template variables instead.
Step 2: Add Your Content
- Open the template and go to the Content tab.
- Paste your ToS text. HTML formatting is supported.
- In Acknowledgment, set the checkbox label (e.g., "I have read and agree to the Terms of Service").
- Enable Require Checkbox and optionally Require Scroll to Bottom to strengthen the evidence of informed consent.
Step 3: Publish
The template must be Published before it can be deployed. Click Publish in the top toolbar. You cannot deploy a Draft template.
To update your terms later, do not edit the published content. The New Version workflow and Re-consent on Update feature are currently in development. In the meantime, clone the template, update the content, and republish. See Version Management.
Step 4: Deploy
-
Go to Deployments → New Deployment.
-
Select your published template.
-
Enter your domain and path (e.g.,
app.yourcompany.com//register).noteOnly one active deployment is allowed per domain/path combination. Activating a new deployment on the same path automatically deactivates the previous one.
-
Set the environment to Staging to test, then Production when ready.
-
Click Activate.
Screenshot: Deployment configuration screen showing domain, path, and environment fields
Step 5: Render and record acceptance from your backend
When a user reaches your sign-up page, your backend renders the deployment, shows the content, and records the acceptance when the user clicks I agree. Click has no browser SDK: the render and accept calls need an OAuth token and are made from your server.
// 1. Render: fetch what the deployment serves, with its checksum
const rendered = await fetch(
`https://api.propper.ai/v1/click/render/deployment/${DEPLOYMENT_ID}?locale=en-US`,
{ headers: { Authorization: `Bearer ${token}` } },
).then((response) => response.json());
// 2. Show rendered.content on your sign-up page.
// 3. When the user accepts, record it with the checksum you rendered
const accepted = await fetch('https://api.propper.ai/v1/click/accept', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
'X-Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({
deploymentId: DEPLOYMENT_ID,
templateVersionId: rendered.versionId,
checksum: rendered.checksum,
consentMethod: 'BUTTON',
userId: user.id,
metadata: { locale: rendered.locale },
}),
}).then((response) => response.json());
console.log('Accepted:', accepted.receiptId);
See the API quickstart for getting a token and for verifying the receipt.
Evidence & Compliance
Every acceptance automatically creates an immutable Evidence Bundle containing:
- The user's identifier, IP address, and browser details
- The exact version of the agreement that was presented
- A tamper-evident record of what was displayed
- Whether the user accepted, declined, or let the session expire
Evidence is retained for 7 years (2,555 days) by default, configurable per-template in Data Retention.
Viewing and exporting evidence records →