Skip to main content
JWTs issued by the have expiry times, but a user can also revoke a before its expiry. When a mandate is revoked, all JWTs issued against it are invalidated immediately — not just at their next expiry. Sumvin enforces this on its own endpoints: every API request that presents a Stamped Mandate JWT is checked against the mandate’s live status. Once the mandate is revoked, the very next request presenting one of its tokens is refused with 401 Unauthorized and error code PINT-401-006 — there is no propagation delay. As a verifier running your own gate, you should also check revocation status so you can reject withdrawn credentials before you act on them, rather than relying solely on the calls you make to Sumvin. A Stamped Mandate is delivered over the API as a PINT (header x-sumvin-pint-token), so the status endpoint, the pint_uri claim, and the PINT-4xx error codes below all use the PINT identifier on the wire.

Endpoint

Authentication: API key via Authorization: Bearer header. This endpoint is deliberately permissive — any authenticated third-party caller with a valid SIS API key can check the status of any Stamped Mandate they’ve been presented with. No specific scope is required.

Request

Extract the mandate’s identifier from the JWT’s pint_uri claim and call the status endpoint:
The SRI contains colons that must be URL-encoded as %3A in the path. Most HTTP libraries handle this automatically with encodeURIComponent() or urllib.parse.quote().

Response — Valid

Response — Revoked

Response — Expired

Timestamps default to epoch milliseconds. To receive ISO 8601 strings instead (e.g., "2026-02-13T11:30:00Z"), send the header X-Timestamp-Format: iso8601. This applies to revoked_at and any other _at fields in the response.

Error Responses

Implementation Examples

TypeScript

Python

Caching Guidance

The revocation check endpoint is designed for low latency (< 100ms p99) and responses are already cached server-side for 30 seconds. You should still cache on your side to avoid excessive calls: Recommended approach: Cache the valid: true response for 30 seconds. This matches the server-side cache TTL and balances freshness (revocations propagate within 30s) with throughput. Do not cache indefinitely. A Stamped Mandate that was valid at verification time may be revoked seconds later. The 30-second TTL provides a reasonable window. Cache valid: false longer. Once a Stamped Mandate is revoked or expired, it doesn’t come back. You can cache negative results for the duration of the JWT’s remaining lifetime.

When to Check

Always check on the first request for a given Stamped Mandate in a session. After that, your cache handles subsequent checks within the TTL. Skip the check if you don’t have an SIS API key. JWT signature verification and expiry checking are still valid without revocation checking — you just won’t catch mandates that were revoked before their natural expiry.