Skip to main content
Confirm that a person controls an account, then reuse the proof across your apps. OAuth runs on Proofable, so you never handle provider tokens.

Linked accounts

Send the person to Hosted Verify and read the proof ID back:
Use ownership-org-oauth for work accounts. Its expectedOrgDomain field limits the proof to one company domain. Store the proof ID from the qHash field and reuse it. Don’t re-run the flow on every visit.

Verified handles

Bind a handle to a wallet with ownership-pseudonym, then badge, link, and gate on the proof. It suits creator platforms, media networks, and launchpads that need handle ownership without legal identity.

Flow

  1. The user claims a handle in your app.
  2. Your app asks Proofable to bind the handle, a namespace, and the wallet.
  3. Proofable returns a proof ID in qHash and a proof URL.
  4. Your app stores the proof ID with the user record.
  5. Your app shows a verified badge that links to the proof page.
  6. Before any privileged action, your server checks the proof.

Sign in your app

Use client.verify() when your app already handles wallet signatures:
pseudonymId must match ^[a-z0-9][a-z0-9._-]{1,30}[a-z0-9]$. Handle proofs expire, so re-verify before expiresAt.

Or verify on Proofable

Read the proof ID from the qHash field in the callback URL or popup message, and store it.

Show the badge

The badge links to https://proofable.me/proof/{qHash} and shows live status.

Check on your server

Or call the HTTP API:

Namespaces

Namespaces other than the default require the namespace owner to confirm DNS control with ownership-dns-txt, or approval from Proofable. Contact Proofable to reserve a production namespace. A complete React and Vite app is in the verified-handle-react example.
Last modified on September 12, 2026