Skip to main content
Private preview: this is rolling out and may not be available on your account yet.
This page is the reference for the verifier quickstart. An agent presents a Stamped Mandate as a token in the x-sumvin-pint-token request header, with no Bearer prefix, addressed to your site’s hostname. You check it offline, on your own server, with no key. The exchange and the online check are only for a service that already holds the signed request a person approved, for example for the service’s own app. An agent never sends a site the signed request. Both calls authenticate with your API key as Authorization: Bearer <key>.

Offline check

Verify the token with any standard JWT library against: Pin the algorithm to ES256, the only one Sumvin signs with, so a token signed any other way is refused rather than trusted. Pick the key by the identifier in the token’s header, and let the library refresh the key set: keys rotate, so never copy one into your code. A token that fails any part of the check is a refusal. The offline check tells you the token is genuine, addressed to you and unexpired. It can’t tell you whether the person has revoked the mandate since the token was signed: for that, run the website token check.

From the CLI

The CLI runs the same check:
With --offline it makes no Sumvin API calls, so the revocation check reports as unverified. An unverified check never counts as a pass, so the overall answer is no and the command exits 2; read the signature, issuer, expiry and audience lines individually. The CLI’s own revocation check only answers for mandates you own. The CLI is itself in Private preview.

Website token check

For a token addressed to your hostname. It answers one question, with no key and no account: does the mandate behind this token still stand? Run the offline check first, then pass the token’s jti claim:
What a website can and can’t check: Rules of the website token check:
  • It answers only for tokens addressed to a website. Any other jti, whether it exists or not, returns the same 404.
  • Answers are never cached. A revocation shows on the next check. The response carries Cache-Control: no-store; don’t cache it yourself for longer than you are willing to honour a revoked mandate.
  • Call it from your server. Browsers can’t call it from another site.
  • It is rate limited per IP address, at 120 checks a minute. Past that it returns 429 with Retry-After.

Exchange

For a service that already holds the person’s signed request. Send the signed request the person approved, unchanged, with audience set to your Organisation ID. Any other audience is refused. During the preview, some mandates can’t be exchanged yet; those return PINT-403-009. The body carries sig (the token), id (the mandate identifier), scopes and expires_at (epoch milliseconds). One signed request can be exchanged by up to ten parties, each getting its own token addressed to itself. When the mandate expires or the person revokes it, every token issued against it stops working together. The person’s verification is checked again at every exchange. A request signed while they were verified yields nothing new if their verification has lapsed since.

Online check

For a token from the exchange, addressed to your organisation.
URL-encode the mandate identifier: it contains colons.
Rules of the online check:
  • It answers only for mandates addressed to you. A mandate with no token addressed to your organisation returns 404, whether or not it exists. This is how one verifier is kept from probing another’s mandates.
  • Answers can be up to 30 seconds old. The answer for each mandate is cached per organisation for 30 seconds.
  • valid is this mandate’s own state. The fuller stands answer in What a verifier checks also accounts for any larger mandate this one was narrowed from. That answer is available through the connector’s mandate_verify tool; see Check a mandate.
To read the mandate’s scopes, status and expiry, call GET https://sis.sumvin.com/v0/sis/pint/{id} with the same key. It follows the same rule: 404 unless a token for the mandate is addressed to your organisation.

Errors

Errors come back as a problem document with an error code, except a missing Authorization header, which returns 401 with {"detail": "Not authenticated"}. More codes are listed in Errors.