What Are Mandates and Delegations?
A mandate (Visa) or delegation (Stripe) is a scoped spending authorization tied to an enrolled payment card. It defines the boundaries of what an agent can charge: the maximum amount per transaction, how many transactions are allowed, and when the authorization expires. Think of it as a controlled allowance: you’re giving an agent permission to spend within strict limits, rather than handing over your card.Mandates and delegations are the same concept for different providers. Visa calls them mandates, Stripe calls them delegations. The spending controls, API key linking, and selection logic work identically for both.
Authorization Properties
Both mandates and delegations support the same core controls, though the field names differ slightly:| Control | Visa (Mandate) | Stripe (Delegation) | Description |
|---|---|---|---|
| Spending limit | amount | spendingLimitCents | Maximum amount per transaction |
| Max transactions | maxUsage | maxTransactions | Total transactions allowed |
| Expiration | expiresAt (ISO date) | durationSecs (seconds from creation) | When the authorization expires |
| Currency | currency (default: USD) | currency (default: usd) | Payment currency |
| API key link | apiKeyId | apiKeyId | Link to a specific NVM API key for automatic selection |
Creating an Authorization
Via the Nevermined Pay Dashboard
After enrolling a card, create a mandate or delegation from the Nevermined Pay dashboard:- Visa Mandate
- Stripe Delegation
- Navigate to your enrolled Visa card
- Click Create Mandate
- Set the spending ceiling (amount per transaction)
- Set the maximum number of transactions
- Set an expiration date
- Optionally link an NVM API key (recommended if you have multiple mandates)
- Complete passkey authentication to authorize
Via the API
- Visa Mandate
- Stripe Delegation
instructionId, the Visa instruction that enables agent charging.Spending Controls
Both mandates and delegations enforce multiple layers of spending control:Per-Transaction Amount
The spending limit sets the maximum a single transaction can charge. If an agent requests more than this amount, the payment is rejected.Usage Limits
The max transactions cap limits the total number of transactions. NVM Pay tracks usage against this limit. Once the limit is reached, the authorization is exhausted and can’t be used for further payments.Time-Based Expiration
After the expiration time, the authorization can’t be used regardless of remaining usage. Visa mandates use an explicitexpiresAt date. Stripe delegations calculate expiration from durationSecs added to the creation timestamp.
Card Spending Ceiling
Each card has a cumulative spending ceiling (default $10.00). The sum of all active authorization amounts on a card can’t exceed this ceiling. This applies to both Visa and Stripe cards. Example:| Card Ceiling | Authorization A | Authorization B | Remaining |
|---|---|---|---|
| $10.00 | $5.00 | $3.00 | $2.00 |
Updating an Authorization
- Visa Mandate
- Stripe Delegation
You can update a mandate’s amount, usage limit, expiration, or API key link.The request targets an existing mandate’s
instructionId.Cancelling an Authorization
- Visa Mandate
- Stripe Delegation
Cancel a mandate to revoke the agent’s spending authorization:Cancellation requires passkey authentication, just like creation.
Status Lifecycle
Both mandate and delegation statuses follow the same pattern:active authorizations can be used for payments. NVM Pay checks status, usage, and expiration on every verify and settle request.
Stripe delegations track additional status detail:
remainingBudgetCents (spending limit minus amount already spent) and transactionCount (current usage).API Key Linking
You can optionally link a mandate or delegation to a specific NVM API key. This tells NVM Pay “when this API key is used, charge this authorization.” This is especially useful when you have multiple active authorizations and want deterministic routing. Instead of the agent guessing which one to use, the API key determines it automatically. Both Visa mandates and Stripe delegations support API key linking. See Mandate Selection for the full resolution algorithm.Transaction History
Every payment processed through a mandate or delegation is recorded as a transaction:| Field | Description |
|---|---|
amount | Transaction amount |
currency | Currency code |
status | completed or failed |
providerTransactionId | Stripe charge ID |
failureReason | Error details (if failed) |
createdAt | When the transaction occurred |
- Visa
- Stripe
Provider Comparison
| Visa Mandate | Stripe Delegation | |
|---|---|---|
| Create | POST /payment-mandate | POST /api/v1/delegation/create |
| Update | PUT /payment-mandate (revoke + recreate internally) | Revoke + create new (explicit two-step) |
| Cancel | POST /cancel-purchase-instruction | DELETE /api/v1/delegation/{id} |
| Auth required | Passkey (FIDO2) for create, update, cancel | API credentials only |
| Expiration format | ISO date (expiresAt) | Duration in seconds (durationSecs) |
| Spending limit format | USD amount (amount: 5.00) | Cents (spendingLimitCents: 500) |
| Budget tracking | usageCount / maxUsage | amountSpentCents / remainingBudgetCents + transactionCount / maxTransactions |
What’s Next?
If you have multiple mandates or delegations, you’ll want to understand how NVM Pay decides which one to use for a given payment request.Mandate Selection
Learn the three-tier resolution algorithm for automatic mandate and delegation selection