Skip to main content
This guide walks a verifier through the complete verification flow for merchants and service providers receiving Sumvin identity credentials. Each JWT is issued against a — the cryptographic authorisation the user signed. A Stamped Mandate is delivered over the API as a PINT (header x-sumvin-pint-token), so the JWT you verify carries PINT-prefixed claims and the source mandate is identified by its pint_uri.

Prerequisites

  • Your registered audience identifier (provided during partner onboarding)
  • A JWT verification library with JWKS support
  • (Optional) An SIS API key for revocation checks

Step-by-Step Verification

1. Extract the Token

Pull the Stamped Mandate’s JWT from the x-sumvin-pint-token header. The value is the raw JWT — there is no Bearer prefix to strip.

2. Fetch the JWKS and Verify the Signature

The SIS publishes its public keys at the endpoint. Use your JWT library’s built-in JWKS support to fetch and cache the keys. TypeScript (jose):
Python (PyJWT):
Both examples validate:
  • The JWT signature against the SIS public key
  • The iss claim is "https://sis.sumvin.com"
  • The aud claim matches your registered identifier
  • The exp claim hasn’t passed

3. Read the Claims

After verification, read the Sumvin-specific claims to understand what the user has authorised:
See the JWT Structure for the complete claims reference. Even if the JWT hasn’t expired, the source Stamped Mandate may have been revoked. Call the revocation check endpoint to confirm it’s still valid:
See Revocation Checking for caching guidance and response details.

5. Check the Verification Tier

If the JWT’s verification_tier is "enhanced", you must also verify the Stamped Mandate’s EIP-712 signature. See Verifying PINT Signatures.

Complete Example