age_verify), but the flow is identical for any primitive.
Get your API key + set a webhook
Sign up at uip.digital, create a business, and from the
dashboard copy your API key (
uip_...) and set your webhook URL.Create a session
Server-to-server, with your API key. List the UIP returns the session and its hosted URL:
steps you want verified.Send the user to the hosted page
Hand the user
session.url. On the same device, link to it directly; on a
different device (e.g. your desktop checkout → their phone), render it as a
QR code. UIP’s hosted page drives the user’s wallet over the W3C Digital
Credentials API — you host nothing and never touch the wallet.Receive the signed result
When the wallet responds and UIP verifies it, you get a Always verify the signature
before trusting a delivery:
POST to your webhook
URL — one step.completed per step, then a terminal session.* event.Compose multiple steps
Real flows often need more than one verified action — for example, identify the signer, then sign the contract. List them in order; the user completes them in one session and you receive one webhook per step, in sequence.sign carries documents, so its session is created as multipart/form-data — see
Primitives → sign and
Create a session.Test without a phone
In development you can drive the full pipeline (verify → webhook) from the hosted page’s Simulate button — no wallet required. Real wallet verification runs in both demo and production; see Wallets.Next steps
Primitives
Every primitive’s parameters and result shape.
Sessions
Lifecycle, gates (continue/stop), binding, and expiry.
Webhooks
Every event, payload, and signature verification.
Create a session
The full request reference, including all options.