Claims
iss— alwaysinvioletjti— the cred id (used for audit + revocation)aud— the audience the mandate was minted for (e.g.postgres-prod)exp— expires at; default 300s, max 3600sinviolet_organization_id— your orginviolet_intent_id— the intent card idinviolet_scope— the requested scope (subset of the intent card’s allowed scope)inviolet_prompt_id— optional; correlates dispense to a captured prompt
Lifecycle
- Mint — POST
/v1/mandate/dispense. The gateway validates the requested scope against the intent card, signs an RS256 JWT, persists amandate_dispensesrow. - Refresh — POST
/v1/mandate/refresh. Extends TTL up tomax_ttl_seconds. - Use — attach to every tool call as
X-Inviolet-Mandate. The gateway verifies the signature against the published JWKS, runs the decision engine, returns a verdict. - Revoke — POST
/v1/mandate/revoke. Adds the cred id to the blocklist + propagates to any downstream credential broker.
Verifying mandates yourself
The Mandate Issuer publishes its public keys at/v1/mandate/jwks. Use any
RS256-aware JWT library to verify the signature locally. The TypeScript
canonical helper is in @inviolet/mandate:
Mandate-aware credential brokers
When you’ve connected Vault or Conjur, you can tell the dispense endpoint to also forward the mandate to the broker by passingbroker_dispense. The
response then includes the downstream Vault/Conjur token. See
Credential broker.