PurchaseIntent.scopes array and surfaced to partner integrations as the scopes claim on the exchanged .
A Stamped Mandate is delivered over the API as a PINT (header x-sumvin-pint-token); the scope catalog below carries the same identifiers whether you read it as a Stamped Mandate or as its underlying PINT.
The scope grammar is a specialisation of the broader Sumvin Resource Identifier family — same sr:{region}:… scheme, different shape. Scopes support per-scope parameters (amount caps, asset, provider, time windows) as URL query strings, giving partners fine-grained capability envelopes without expanding the scope vocabulary.
Every scope in this catalog maps one-to-one to an existing authenticated user-facing capability in the Sumvin API. When a Stamped Mandate carrying a scope is exchanged for a JWT, the
scopes claim is exactly what the partner sees.Grammar
Exactly five fixed segments —
scheme, region, pint, domain, action. Query params are optional and delimited by ? with & between pairs.Parameter Conventions
Values containing
&, =, or whitespace must be percent-encoded. The scope string is always signed verbatim as part of the Stamped Mandate payload, so any encoding applied at sign time is preserved end-to-end.
Verification Tier Mapping
Scopes drive the verification tier of the exchanged JWT.- Standard (Tier 1) — JWT alone is sufficient. Partner validates JWT signature, audience, expiry.
- Enhanced (Tier 2) — JWT + the original Stamped Mandate signature and payload headers (
X-Pint-Signature,X-Pint-Payload).
spend scopes that move value: sr:us:pint:spend:execute, sr:us:pint:spend:visa_checkout, and sr:us:pint:spend:card. Every other scope in the catalog is Standard. If a Stamped Mandate carries any Enhanced-tier scope, the entire JWT is issued at Enhanced tier.
Read the Tier column of the catalog below as authoritative rather than memorising the list — it is generated from the same registry the API enforces.
Scope catalog
Every scope below is live in the registry. Requesting one that is not listed here is rejected at token exchange withPINT-400-004.
Scope Details
This section expands the scopes with parameter enforcement or a documented endpoint surface. Scopes not expanded here take no parameters — the catalog row above is the whole contract.Sigil
Sigil is the identity domain. The oldersr:us:pint:identity:* names for these four scopes are deprecated aliases.
sr:us:pint:sigil:kyc_status
- Endpoint gated:
GET /v0/kyc/status - Params: none
- Tier: Standard · KYC required: ✓
kyc_status claim carries the canonical value (pending, verified, rejected, …) for partners to read directly.
sr:us:pint:sigil:kyc_read
- Endpoint gated: SIS
/v0/users/{id}/kyc+/document - Optional params:
doc_type(e.g.passport,id_card),reason(choices:onramp),requestor(choices:mercuryo) - Tier: Standard · KYC required: ✓
sr:us:pint:sigil:proof_of_personhood
- Surface: JWT attestation claim
- Params: none
- Tier: Standard · KYC required: ✓
sr:us:pint:sigil:age_over_18
- Surface: JWT attestation claim
- Params: none
- Tier: Standard · KYC required: ✓
Spend
sr:us:pint:spend:execute
- Endpoints gated:
POST /v0/safe/rpc, IPA auto-execute, strategy run PINT linking - Optional params:
max(base units),asset(SYMBOL@context),chain_id,recipient(comma-separated allowed addresses) - Tier: Enhanced · KYC required: ✓
- Example:
sr:us:pint:spend:execute?max=10000000&asset=USDC@sei&chain_id=1329
max + asset are set, the API enforces them against the actual transaction amount and asset at execution time.
sr:us:pint:spend:ramp
- Endpoint gated:
POST /v0/ramp/sessions(hosted on-ramp widget) - Optional params:
max,asset,currency - Tier: Standard · KYC required: ✓
- Example:
sr:us:pint:spend:ramp?max=50000¤cy=USD
max and currency are enforced against the ramp session request when present.
sr:us:pint:spend:visa_checkout
- Required params:
max(fiat minor units),currency(ISO-4217) - Tier: Enhanced · KYC required: ✓
- Example:
sr:us:pint:spend:visa_checkout?max=25000¤cy=USD($250.00 ceiling)
sr:us:pint:spend:card
- Required params:
id(external id of the enrolled card) - Tier: Enhanced · KYC required: ✓
Errand
sr:us:pint:errand:search
- Endpoints gated:
POST /v0/user/ipa/, IPA strategy enrolment - Required params:
time(window length in unix seconds) - Optional params:
max(base-unit purchase ceiling) - Tier: Standard · KYC required: ✓
- Example:
sr:us:pint:errand:search?time=2592000&max=5000000(30-day window, $5 USDC cap)
time param is required on the scope string. API-side enforcement of time against the IPA’s lifecycle window is deferred pending the IPA schema gaining an explicit window field — today the scope’s presence is validated but the window is not yet bound.
The older name sr:us:pint:perpetual:search is a deprecated alias for this scope.
Opening an Errand from an existing signal
Three scopes cover the other entry points into an Errand. None takes parameters; all are Standard tier and require KYC.Reading and steering an Errand
sr:us:pint:errand:read grants read access to the Errand list, detail, and event history. sr:us:pint:errand:manage grants the clarify, decide, and cancel operations on an existing Errand. Both are Standard tier and neither requires KYC — an agent can follow and steer an Errand without the verification needed to open one.
Accounts
sr:us:pint:accounts:read
- Endpoint gated:
GET /v0/accounts/ - Params: none
- Tier: Standard · KYC required: —
sr:us:pint:accounts:link
- Endpoints gated:
POST /v0/accounts/link,POST /v0/bank-linking/accounts/{account_id}/processor-token - Optional params:
provider(choices:meld) - Tier: Standard · KYC required: —
- Example:
sr:us:pint:accounts:link?provider=meld
sr:us:pint:accounts:transfer
- Endpoint gated: (reserved — route TBD)
- Optional params:
max,asset,currency - Tier: Standard · KYC required: ✓
Transactions
sr:us:pint:transactions:read
- Endpoints gated:
GET /v0/transactions/,GET /v0/transactions/{transaction_id},GET /v0/transactions/{external_id}/receipt - Optional params:
from_date,to_date(unix seconds) - Tier: Standard · KYC required: —
- Example:
sr:us:pint:transactions:read?from_date=1704067200&to_date=1735603200
from_date / to_date are set, the API enforces them by rejecting any listing or detail request for a transaction outside the declared window.
Personalisation
sr:us:pint:personalization:read
- Endpoint gated: (none yet — see registered but no enforcement site yet)
- Params: none
- Tier: Standard · KYC required: —
sr:us:pint:rules:* and sr:us:pint:budgets:* scopes cover the same surface.
Personal finance data
These scopes cover the user’s own money surface. None takes parameters, all are Standard tier, and none requires KYC.sr:us:pint:strategies:manage enrols the user and acts on run tasks. It does not authorise value movement — a strategy run that spends still needs sr:us:pint:spend:execute, which is Enhanced tier.Approvals
These scopes let a holder inspect and withdraw the user’s own approvals. Both are Standard tier, take no parameters, and require no KYC.sr:us:pint:pints:read— read the approvals the user has granted, including what each one permits.sr:us:pint:pints:revoke— revoke an approval the user has granted. Revoking is permanent and withdraws every credential issued from that approval.
CLI
Two provenance markers used by the Sumvin CLI. Both are Standard tier, take no parameters, and require no KYC. Each records who signed the mandate, and PINT exchange rejects any mandate whose marker disagrees with its signer.sr:us:pint:cli:delegate_sign— marks a mandate signed by the developer’s local key via the CLI (caller-supplied signature). Exchange rejects the marker when the mandate was server-agent-signed.sr:us:pint:cli:add_signer— marks a mandate that adds a signing key to the user’s Safe. Exchange rejects the marker unless the mandate was server-agent-signed.
Cards
sr:us:pint:cards:read
- Endpoints gated:
GET /v0/card/,GET /v0/card/{card_id} - Params: none
- Tier: Standard · KYC required: ✓
sr:us:pint:cards:manage
- Endpoints gated:
POST /v0/card/{card_id}/freeze,POST /v0/card/{card_id}/unfreeze,POST /v0/card/{card_id}/lost,POST /v0/card/{card_id}/stolen,POST /v0/card/{card_id}/activate; funding wallet change - Params: none
- Tier: Standard · KYC required: ✓
sr:us:pint:cards:manage is strictly about card lifecycle, not value transfer.
Scope Validation
Scopes are validated at two points:- Creation time (schema). When a Stamped Mandate is created at token exchange, every scope string is parsed and validated. Malformed grammar, unknown scope names, and malformed params are rejected before the Stamped Mandate is persisted.
- Enforcement time (semantic). When a request carries a
PINTtoken, the gated endpoint enforces per-param limits (amount caps, asset match, provider match, date range, …) against the actual request.
Error Codes
All error responses follow RFC 7807 Problem Details. See Errors for the full error catalog.
Scope Combinations
A single Stamped Mandate can request multiple scopes:scopes claim, and the verification tier is the highest tier present — if any scope is Enhanced, the entire JWT is issued at Enhanced tier.
Two scopes with the same name but different params (e.g. sr:us:pint:spend:execute?max=100000000 and sr:us:pint:spend:execute?max=200000000) are treated as distinct capability envelopes — both are retained in the signed array. Exact duplicates are collapsed.
Deprecated aliases
Five scope names remain in the registry only so that already-issued Stamped Mandates keep working. They parse and enforce exactly like their canonical counterpart, but new integrations should request the canonical name.A verifier reading the
scopes claim may still receive a deprecated alias from an in-flight credential. Treat an alias and its canonical scope as the same capability.Post-MVP Scopes
The following scopes are not yet generally available. They fall into two categories.Reserved for future releases
These scopes are not in the registry today. Requesting any of them during token exchange is rejected withPINT-400-004.
Wildcard scopes such as
sr:us:pint:sigil:* are not part of the grammar. Every scope is requested by its exact name.Registered but no enforcement site yet
These scopes are in the registry — requesting them parses successfully and they appear in the issued JWT — but no API endpoint consumes them yet.Scope definitions are versioned alongside the EIP-712 specification. See EIP-712 & Purchase Intents for the canonical type definitions and SRI for the underlying URI family.