/v1/verify returns a JWT the caller passes to their backend. The backend validates it at /v1/token/{id}/validate before authorising any privileged action.
Lifecycle
/v1/verifyreturns{ token, token_id, authorized: true, expires_in: 60 }- Client passes
tokento your backend (via header, not URL) - Backend calls
/v1/token/{token_id}/validate?token={jwt}server-side { valid: true, expires_in: 44 }→ proceed;{ valid: false }→ reject
Security properties
- 60-second TTL — short window limits replay exposure
- Never store tokens — they are single-use credentials, not session keys
- Validate server-side — do not trust the client’s
authorizedflag for high-value actions - No PII in the JWT — the token identifies the transaction, not the speaker