Skip to main content
The recommended integration: your backend creates a verification, your page opens it with the Browser SDK, and your backend receives the decision by webhook.
Working with an AI coding agent? The integration prompt has it do these steps for you through the ProofAge MCP server.
1

Get a test workspace and its keys

In the ProofAge console, create a test workspace with the check you need and copy its public key (pk_test_…) and secret key (sk_test_…). Test workspaces are never billed.Set the workspace’s webhook URL to an endpoint on your backend. For local development, see receiving webhooks locally.
2

Create a verification on your backend

The check comes from the workspace, so the request only says who the person is and where their browser goes afterwards. Sign it with the secret key: a server SDK does that for you, or see API authentication.
The response (201 Created) is the verification, with the url the person opens:
Store id next to your user and return url to your page.
external_id and callback_url are kept only on a signed request. Without a signature the API drops them, because anyone can read your public key in the browser. Create verifications on your backend.
3

Open it on your page

Load the Browser SDK and open the url:
The page navigates away after the final screen. About three seconds after the final screen, the SDK calls onComplete and then sends the whole page to the verification’s redirect URL. A new workspace’s redirect URL is a ProofAge page, so set your own: pass callback_url when you create the verification (as above), or set the workspace’s redirect URL in the console.
onComplete means the person finished, not that they passed. See Browser SDK for every option, or send the person to the url instead of adding JavaScript.
4

Receive the decision

ProofAge sends a signed webhook each time the verification reaches review, resubmission_requested, approved, declined, abandoned or expired. Verify the signature, then update your user from status and reason. See Webhooks.A test workspace does not analyse anything: the submission stops in review until you set the outcome, on the verification’s page in the console (Approve, Decline or a resubmission with a reason) or with the MCP tool set-test-verification-outcome. Setting it sends the webhook. See Sandbox and test data.
5

Read the result when you need it

Document data, images and the age estimate have their own endpoints: see Reading results.

Next steps