Human-to-Agent Travel Budget — MPCP Reference Flow
This document describes a complete end-to-end reference scenario for using the Machine Payment Control Protocol (MPCP) in a human-to-AI-agent delegation context.
Chain overview: Authorization Chain — the canonical visual diagram.
The goal is to illustrate:
- who the actors are
- which MPCP artifacts are issued
- when each artifact is created
- where artifacts are stored
- how verification occurs
- how the human principal retains control and can revoke mid-trip
This scenario is intended as a reference implementation narrative for developers, integrators, and auditors building human-to-agent payment delegation.
See also: Human-Agent Profile for the normative profile specification.
Scenario Overview
Alice is planning a 3-day trip to Paris (Apr 10–12 2026). Instead of manually booking each service, she delegates execution to an AI agent — but keeps strict control over what the agent is allowed to spend, where, and under which conditions.
Using MPCP, Alice does not give the agent access to her funds directly. Instead, she issues a cryptographically signed PolicyGrant that defines:
- total budget ($800)
- allowed spending categories (hotel, transport, flight)
- allowed payment rails and assets (XRPL / RLUSD)
- revocation controls
The AI agent operates under this policy and cannot exceed it.
This creates a constrained delegation model:
- Alice defines intent and limits
- the AI agent executes within those limits
- service providers independently verify that each payment is authorized
- the settlement rail executes only after verification
What This Scenario Demonstrates
This reference flow demonstrates the full MPCP lifecycle in a human-to-agent setting:
- how a human delegates authority without surrendering control
- how an AI agent enforces policy locally (not the merchant)
- how merchants verify authorization without trusting the agent
- how revocation works mid-flight
- how auditability is preserved end-to-end
Authorization Chain (Conceptual)
Alice (human principal)
│ signs PolicyGrant (TRIP scope, $800, allowed purposes)
▼
AI Trip Planner v2
│ enforces policy + cumulative spend
│ issues SBA (trip budget)
│ issues SPA per booking
▼
Service Providers
│ verify MPCP chain (no trust in agent required)
▼
Settlement Rail (XRPL / RLUSD)
Key property:
Every payment must be explainable as a valid derivation of Alice’s original signed intent.
Why This Matters
Without MPCP:
- agents need direct wallet access (high risk)
- merchants must trust the agent
- audit trails are weak or incomplete
With MPCP:
- authority is delegated but bounded
- verification is stateless and deterministic
- trust is replaced by cryptographic proof
This scenario shows how MPCP enables safe, auditable autonomy for AI-driven commerce.
Actors
See: Actors for a standalone overview.
Human Principal (Alice)
Alice is a human user who owns the payment budget and sets spending policy.
Responsibilities:
- defines the travel budget and constraints via a PolicyGrant
- signs the PolicyGrant with her DID key
- optionally anchors the policy to Hedera HCS for audit
- can revoke the delegation mid-trip via her wallet service's revocation endpoint
Alice's identity is expressed as a DID (did:key:..., did:xrpl:..., did:hedera:..., or any W3C-compatible DID method). The PolicyGrant issuer field contains her DID; her public key is used to verify all PolicyGrant signatures.
In this reference flow:
issuer: did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK
issuerKeyId: alice-did-key-1
Alice's wallet service hosts the revocation endpoint at:
https://wallet.alice.example.com/revoke
AI Agent (AI Trip Planner v2)
The AI agent acts as Alice's authorized payment delegate for the duration of the trip.
Responsibilities:
- enforces
allowedPurposes— refuses to sign SPAs for merchant categories not permitted in the PolicyGrant - tracks cumulative spend across all sessions within the TRIP scope
- issues a SignedBudgetAuthorization (SBA) with
budgetScope: "TRIP"that covers the full trip - issues a SignedPaymentAuthorization (SPA) for each approved service
- checks revocation status before each payment
The agent uses actorId as its identity in MPCP artifacts:
actorId: ai-trip-planner-v2
The agent holds two signing keys:
- SBA key (
agent-sba-key-1) — authorizes the trip budget - SPA key (
agent-spa-key-1) — authorizes each individual payment
Service Providers
Service providers supply accommodation, transport, and other travel services.
In this scenario:
| Stop | Provider | Purpose | Amount |
|---|---|---|---|
| 1 | Mercure Paris (hotel) | travel:hotel | $250 |
| 2 | Eurostar (rail) | travel:flight | $120 |
| 3 | Le Jules Verne (restaurant) | travel:dining | — (skipped) |
| 4 | Europcar (car rental) | travel:transport | $180 |
| 5 | Hotel extra night | travel:hotel | $300 (rejected) |
Responsibilities:
- send a payment quote to the AI agent
- receive and verify the MPCP authorization bundle (PolicyGrant, SBA, SPA)
- optionally check revocation status at
revocationEndpoint - provide the service once verification passes
Settlement Rail
The settlement layer executes the payment.
In this scenario:
- Rail: XRPL
- Asset: RLUSD (IOU, 6 decimal places)
- Settlement model: per-service payment at time of booking confirmation
MPCP does not replace the settlement rail. It controls authorization above it.
MPCP Verifier
The verifier checks the full authorization chain.
In this scenario the verifier runs at the service provider's backend (or an MPCP-aware proxy). It checks:
- PolicyGrant signature (Alice's DID key)
- SBA signature and TRIP scope budget constraints
- SPA signature and payment parameters
Verification may also occur during post-trip auditing using the stored artifact bundles.
Key Concepts
TRIP Scope
The SBA budgetScope field is set to "TRIP", indicating the budget covers multiple sessions across multiple days. This contrasts with "SESSION" scope used in single-session flows (e.g., fleet EV charging).
The AI agent is responsible for tracking cumulative spend across all individual bookings. The TRIP budget is not enforced per-session but across the entire delegation window.
budgetScope: "TRIP"
maxAmountMinor: "80000" // $800.00 (USD minor units = cents)
allowedPurposes
The PolicyGrant includes an allowedPurposes field restricting which merchant categories the agent may pay:
"allowedPurposes": ["travel:hotel", "travel:flight", "travel:transport"]
The agent refuses to sign an SPA for any service whose purpose falls outside this list. In this scenario, Stop 3 (restaurant travel:dining) is silently refused — no SBA check, no payment, no exception propagated to the provider.
This gives Alice fine-grained categorical control beyond just the total budget.
revocationEndpoint
The PolicyGrant includes a revocationEndpoint where any service provider or the agent itself can check whether Alice has cancelled the delegation:
revocationEndpoint: https://wallet.alice.example.com/revoke
The revocation check is online and performed at the service provider's discretion before confirming service. The MPCP verifier itself remains stateless — revocation is a separate application-layer check layered on top.
When checkRevocation(endpoint, grantId) returns { revoked: true }, service providers should refuse further payments against that grant.
High-Level Sequence Diagram
The following diagram summarizes the runtime interaction flow between Alice's wallet, the AI agent, service providers, and the settlement rail.
This diagram highlights the separation of roles:
- human principal (Alice) controls policy and revocation
- AI agent enforces allowedPurposes and cumulative budget
- service providers verify the authorization chain
- settlement rail executes payment
MPCP Artifacts Used in This Scenario
| Artifact | Issued By | Purpose |
|---|---|---|
| PolicyGrant | Alice (human principal, DID key or PA server) | Defines budget, purposes, revocation endpoint |
| SignedBudgetAuthorization | AI Agent (SBA key) | Authorizes $800 TRIP budget |
| SignedPaymentAuthorization | AI Agent (SPA key) | Authorizes each individual service payment |
| SettlementIntent | AI Agent | Defines settlement parameters for each payment |
| Settlement Result | Settlement rail | Confirms payment execution |
These artifacts form the authorization chain from human principal to on-chain settlement.
Artifact Storage Matrix
| Artifact | Alice's Wallet | AI Agent | Service Provider | Settlement Rail |
|---|---|---|---|---|
| PolicyGrant | Authoritative copy | Operational copy | Received for verification | — |
| SBA | Optional audit | Active trip artifact | Received in bundle | — |
| SPA | Optional audit | Issued per stop | Received and verified | — |
| SettlementIntent | Optional audit | Runtime artifact | Optional | — |
| Settlement Result | Reconciliation | Stored receipt | Stored receipt | Authoritative record |
Artifact Lifecycle
PolicyGrant
Issued by:
Alice (human principal, DID key)
Contains:
- allowed rails and assets
- spending scope (TRIP)
- total budget (via associated policy document / policyHash)
- allowed purposes (merchant category filter)
- revocation endpoint
- expiry time
Stored by:
- Alice's wallet (authoritative)
- AI agent (operational copy)
- service providers (received per authorization bundle)
The PolicyGrant is issued before the trip and covers the entire trip duration.
PolicyGrant Signature Model
A PolicyGrant is a signed JSON authorization artifact signed by Alice's DID key.
issuer: did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK
issuerKeyId: alice-did-key-1
Key resolution: service providers and verifiers resolve Alice's DID to retrieve her public verification key. For did:key DIDs, the key material is embedded in the DID itself. For other DID methods (did:xrpl, did:hedera, etc.), resolution follows the method-specific resolver defined by the W3C DID Core specification.
Example PolicyGrant structure:
{
"grantId": "pg-alice-paris-2026",
"policyHash": "a1b2c3d4e5f6",
"allowedRails": ["xrpl"],
"allowedAssets": [
{ "kind": "IOU", "currency": "RLUSD", "issuer": "rIssuer" }
],
"allowedPurposes": ["travel:hotel", "travel:flight", "travel:transport"],
"revocationEndpoint": "https://wallet.alice.example.com/revoke",
"expiresAt": "2026-04-13T00:00:00Z"
}
The issuer, issuerKeyId, and signature fields belong to the signed envelope that wraps the grant payload.
Policy Authority Server — Common Deployment Pattern
This reference flow shows Alice signing the PolicyGrant with her DID key directly. In practice, many deployments use a Policy Authority (PA) server — a backend service that issues grants on Alice's behalf.
In this model:
- Alice authenticates to her PA server (via session token, API key, or OAuth)
- The PA server issues the PolicyGrant, signing with a domain key (e.g.
wallet.alice.example.com) issueris the PA server's domain rather than Alice's personal DID- Key resolution uses HTTPS well-known:
https://wallet.alice.example.com/.well-known/mpcp-keys.json - The
revocationEndpointis also hosted by the PA server
issuer: wallet.alice.example.com
issuerKeyId: pa-grant-key-1
The MPCP artifact chain is identical — only the issuer value and key resolution method differ. This pattern is operationally simpler than requiring users to manage DID private keys and is the recommended starting point for most production deployments. The PA server also handles revocation, audit log storage, and grant lifecycle management centrally.
See: Integration Guide — Grant Issuer path for a step-by-step walkthrough of deploying the PA server and issuing grants.
Optional On-Chain Policy Anchoring
Alice may optionally anchor the policy document to Hedera Consensus Service at issuance time. This produces an anchorRef field on the PolicyGrant:
anchorRef: "hcs:0.0.12345:42"
The anchor provides a tamper-evident, timestamped record of the policy on a public ledger. Any third party can verify that the policy document was published before the trip began.
See: Policy Anchoring for details.
SignedBudgetAuthorization (TRIP scope)
Issued by:
AI Agent (SBA key)
The SBA is issued once for the entire trip before the first service booking. It covers all stops within the delegation window.
budgetScope: TRIP
maxAmountMinor: "80000" ($800.00)
sessionId: paris-trip-2026-alice
actorId: ai-trip-planner-v2
destinationAllowlist: [rHotelMercureParis, rEurostar, rEuropcarParis]
The agent tracks cumulative spend internally; each SPA reduces the remaining available budget.
Stored by:
- AI agent (active trip artifact)
- service provider authorization bundle
- Alice's audit log (optional)
SettlementIntent
Issued by:
AI Agent
Created per booking, after the service provider sends a quote.
Contains:
- rail
- asset
- destination
- amount (atomic units)
- timestamp
An intentHash (SHA-256 of the SettlementIntent) may be included in the SPA for tamper-evident binding.
SignedPaymentAuthorization (SPA)
Issued by:
AI Agent (SPA key)
Issued per service booking. Authorizes a specific payment amount to a specific destination.
Contains:
- session reference
- settlement parameters (rail, asset, amount, destination)
- intentHash (optional)
- decisionId
- signature
Stored by:
- AI agent
- service provider
- audit log
Settlement Result
Issued by:
Settlement Rail (XRPL)
Produced when the XRPL payment transaction executes.
Contains:
- transaction hash
- amount
- destination
- timestamp
End-to-End Trip Timeline
T-48h — Alice Issues PolicyGrant
Alice's wallet generates the delegation:
principal: Alice
did: did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK
budget: $800 TRIP scope
rail: XRPL / RLUSD
allowedPurposes: travel:hotel, travel:flight, travel:transport
revocationEndpoint: https://wallet.alice.example.com/revoke
expires: 2026-04-13T00:00:00Z
The PolicyGrant is signed with Alice's DID key and delivered to the AI agent.
Optionally: Alice's wallet anchors the policy document to HCS and stores the anchorRef in the grant.
T-1h — Agent Pre-loads SBA
The AI agent issues a SignedBudgetAuthorization for the full trip before any bookings begin.
budgetScope: TRIP
maxAmountMinor: "80000" ($800.00)
sessionId: paris-trip-2026-alice
actorId: ai-trip-planner-v2
grantId: pg-alice-paris-2026
destinationAllowlist: [rHotelMercureParis, rEurostar, rEuropcarParis]
expiresAt: 2026-04-13T00:00:00Z
This SBA is included in every subsequent authorization bundle.
Apr 10 — Stop 1: Hotel (Mercure Paris)
Provider sends quote
provider: Mercure Paris
purpose: travel:hotel
amount: $250.00
destination: rHotelMercureParis
quoteId: q-hotel-001
Agent validates
- purpose
travel:hotelis inallowedPurposes— permitted - cumulative spend: $0 + $250 = $250 ≤ $800 — within budget
- destination
rHotelMercureParisis on SBAdestinationAllowlist
Agent issues SPA
decisionId: dec-hotel-001
amount: 250000000 RLUSD (6 decimals)
destination: rHotelMercureParis
Provider verifies
- Resolves Alice's DID key
- Verifies PolicyGrant signature
- Confirms
travel:hotelis inallowedPurposes - Verifies SBA signature and TRIP budget
- Verifies SPA signature and parameters match quote
- Checks revocation:
{ revoked: false }→ grant active
Service confirmed. Settlement executes on XRPL.
Cumulative: $250 / $800
Apr 11 — Stop 2: Eurostar Tickets
Provider sends quote
provider: Eurostar
purpose: travel:flight
amount: $120.00
destination: rEurostar
quoteId: q-train-001
Agent validates
- purpose
travel:flightis inallowedPurposes— permitted - cumulative spend: $250 + $120 = $370 ≤ $800 — within budget
- destination
rEurostaris on SBAdestinationAllowlist
Agent issues SPA
decisionId: dec-train-001
amount: 120000000 RLUSD
destination: rEurostar
Provider verifies and confirms
Service confirmed. Settlement executes on XRPL.
Cumulative: $370 / $800
Apr 11 (mid-trip) — Alice Revokes
Alice decides to cancel the remainder of the delegation.
Her wallet service marks the grant as revoked:
grantId: pg-alice-paris-2026
revokedAt: 2026-04-11T18:30:00Z
The revocation endpoint at https://wallet.alice.example.com/revoke now returns:
{ "revoked": true, "revokedAt": "2026-04-11T18:30:00Z" }
Any subsequent checkRevocation(endpoint, grantId) call returns { revoked: true }.
Apr 12 — Stop 4: Car Rental (Europcar)
The car rental booking was made before Alice revoked (workflow pre-authorization). The agent had pre-authorized this booking in an earlier session before revocation occurred. The settlement executes on Apr 12 against the existing SPA.
Note: In implementations that check revocation at settlement time (not just at authorization time), this booking would be blocked. The reference flow assumes the SPA was issued before revocation and settlement completes.
provider: Europcar Paris
purpose: travel:transport
amount: $180.00
destination: rEuropcarParis
Settlement executes. Cumulative: $550 / $800
Apr 12 — Stop 5: Extra Hotel Night — REJECTED
The agent attempts to book an additional hotel night ($300) but checks cumulative spend:
$550 + $300 = $850 > $800 budget
The agent refuses to sign the SPA. Payment is refused.
The agent also checks revocation:
checkRevocation() → { revoked: true }
Even if the budget were available, the revoked grant would prevent new authorizations.
Post-Trip Audit
All three settled bundles (hotel, Eurostar, car rental) can be independently verified after the trip using the stored artifact bundles.
Each bundle contains:
- PolicyGrant (Alice's signed delegation)
- SBA (TRIP-scope trip authorization)
- SPA (individual booking authorization)
- SettlementIntent
- Settlement result
Any auditor with Alice's public key can reconstruct and verify the full authorization chain.
Data Storage Model
Alice's Wallet
- PolicyGrant (authoritative)
- revocation state
- optional: trip audit log
AI Agent Stores
- active PolicyGrant
- active SBA (TRIP scope)
- issued SPAs (per booking)
- SettlementIntents
- settlement receipts
- cumulative spend tracker
Service Provider Stores
- payment quote
- received authorization bundle (PolicyGrant + SBA + SPA)
- verification result
- settlement reference
- booking record
Verification Points
Key Resolution and Trust Model
Service providers verify the PolicyGrant signature using Alice's DID public key.
For did:key DIDs, the public key is derived directly from the DID string — no network call required.
For other DID methods (did:xrpl, did:hedera, etc.), the verifier uses the method-specific resolver to retrieve the DID Document and extract the verificationMethod[].publicKeyJwk. See Key Resolution for the did:xrpl example and W3C DID Core for the standard.
issuerKeyId (Alice's DID)
↓
DID resolver (did:key — inline; other methods — method-specific resolver)
↓
public verification key
↓
verify PolicyGrant signature
Agent Verification (before issuing SPA)
Before signing each SPA, the agent checks:
allowedPurposescontains the service purpose- cumulative spend + this payment ≤
maxAmountMinor - destination is on SBA
destinationAllowlist - settlement rail and asset are allowed
- PolicyGrant is not expired
- revocation status via
revocationEndpoint
Service Provider Verification
Before confirming service:
- resolve Alice's DID key and verify PolicyGrant signature
- PolicyGrant not expired;
allowedPurposesincludes the requested category - SBA signature valid; TRIP budget sufficient
- SPA signature valid; payment parameters match the quote
- check
revocationEndpoint(optional but recommended)
Post-Trip Audit Verification
After trip:
- each bundle independently verifiable
- settlement amounts match SPA amounts
- cumulative spend within TRIP budget
- no SPAs issued for revoked grant (post-revocation-timestamp check)
Failure Scenarios
Purpose Not Allowed
Agent refuses to issue SPA. Service provider receives no authorization. No payment.
Budget Exceeded
Agent checks cumulative spend before signing SPA. If cumulative + amount > maxAmountMinor, agent refuses. No SPA, no payment.
Grant Revoked
checkRevocation() returns { revoked: true }. Agent refuses further SPAs. Service provider rejects authorization bundle.
PolicyGrant Expired
Service provider rejects authorization (expired grant). Agent should not issue new SPAs against an expired grant.
Destination Not on Allowlist
SBA destinationAllowlist does not include the destination. Agent refuses to sign SPA.
Signature Verification Failure
DID resolution fails or PolicyGrant/SBA/SPA signature is invalid. Service provider rejects the bundle.
Audit Bundle
For audit or dispute resolution, the following bundle may be stored per service booking:
- PolicyGrant (Alice's signed delegation)
- SBA (TRIP-scope authorization)
- SPA (booking-specific authorization)
- SettlementIntent
- Payment quote metadata
- Settlement receipt (XRPL transaction hash)
- Optional: revocation check result at time of authorization
- Optional: anchorRef (HCS policy anchor, if Alice published the policy on-chain)
This bundle allows full replay of the authorization chain from Alice's delegation to on-chain settlement.
Full Artifact Bundle Example
The following example shows the self-contained authorization bundle for Stop 1 (Hotel Mercure Paris).
This illustrates the TRIP-scoped delegation chain: Alice → AI Agent → Hotel → XRPL settlement.
Amounts are in atomic units.
"250000000"represents 250.00 RLUSD with 6 decimal places (XRPL IOU convention).
{
"policyGrant": {
"grantId": "pg-alice-paris-2026",
"policyHash": "a1b2c3d4e5f6",
"allowedRails": ["xrpl"],
"allowedAssets": [
{ "kind": "IOU", "currency": "RLUSD", "issuer": "rIssuer" }
],
"allowedPurposes": ["travel:hotel", "travel:flight", "travel:transport"],
"revocationEndpoint": "https://wallet.alice.example.com/revoke",
"expiresAt": "2026-04-13T00:00:00Z",
"issuer": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
"issuerKeyId": "alice-did-key-1",
"signature": "base64encodedAliceSignature..."
},
"sba": {
"authorization": {
"version": "1.0",
"budgetId": "bud-paris-trip-2026",
"grantId": "pg-alice-paris-2026",
"sessionId": "paris-trip-2026-alice",
"actorId": "ai-trip-planner-v2",
"policyHash": "a1b2c3d4e5f6",
"currency": "USD",
"minorUnit": 2,
"budgetScope": "TRIP",
"maxAmountMinor": "80000",
"allowedRails": ["xrpl"],
"allowedAssets": [
{ "kind": "IOU", "currency": "RLUSD", "issuer": "rIssuer" }
],
"destinationAllowlist": [
"rHotelMercureParis",
"rEurostar",
"rEuropcarParis"
],
"expiresAt": "2026-04-13T00:00:00Z"
},
"issuerKeyId": "agent-sba-key-1",
"signature": "base64encodedSbaSignature..."
},
"settlementIntent": {
"version": "1.0",
"rail": "xrpl",
"amount": "250000000",
"destination": "rHotelMercureParis",
"asset": { "kind": "IOU", "currency": "RLUSD", "issuer": "rIssuer" },
"createdAt": "2026-04-10T15:00:00Z"
},
"spa": {
"authorization": {
"version": "1.0",
"decisionId": "dec-hotel-001",
"sessionId": "paris-trip-2026-alice",
"policyHash": "a1b2c3d4e5f6",
"budgetId": "bud-paris-trip-2026",
"quoteId": "q-hotel-001",
"rail": "xrpl",
"asset": { "kind": "IOU", "currency": "RLUSD", "issuer": "rIssuer" },
"amount": "250000000",
"destination": "rHotelMercureParis",
"intentHash": "sha256ofSettlementIntent...",
"expiresAt": "2026-04-13T00:00:00Z"
},
"issuerKeyId": "agent-spa-key-1",
"signature": "base64encodedSpaSignature..."
},
"settlement": {
"rail": "xrpl",
"amount": "250000000",
"asset": { "kind": "IOU", "currency": "RLUSD", "issuer": "rIssuer" },
"destination": "rHotelMercureParis",
"nowISO": "2026-04-10T15:00:00Z"
}
}
Notes on the Example Bundle
policyGrant.issueris Alice's DID — the human principal who signed the delegationsba.authorization.budgetScopeis"TRIP"— the budget covers the full 3-day trip, not just this sessionsba.authorization.actorIdis the AI agent identifier — works for vehicles, AI agents, robots, or any autonomous payment actorspa.authorization.budgetIdlinks tosba.authorization.budgetId— tying the payment to the trip-level budgetpolicyGrant.allowedPurposesis enforced by the agent before signing any SPA — the hotel (travel:hotel) is permitted; the restaurant (travel:dining) would not be- amounts are in atomic units:
"250000000"= 250.00 RLUSD with 6 decimal places
Differences from Fleet EV Charging Bundle
| Dimension | Fleet EV | Human-Agent Trip |
|---|---|---|
| PolicyGrant issuer | Fleet Operator (organization or domain) | Alice (DID key or PA server domain) |
| SBA budgetScope | SESSION (per-shift, multi-merchant) | TRIP (multi-day, multi-session) |
| Spend enforcement | On-vehicle wallet Session (shift ceiling) | Cumulative across trip, by agent |
| allowedPurposes | Not typically used | Core control mechanism |
| Revocation | revocationEndpoint — fleet disables vehicle mid-shift |
revocationEndpoint — human cancels delegation |
| Key resolution | Trust Bundle (offline, pre-loaded at merchants) | DID or HTTPS well-known (PA server) |
Summary
This scenario demonstrates how MPCP enables safe human-to-AI-agent payment delegation.
Alice retains meaningful control throughout:
- the PolicyGrant defines exactly which categories of spend are permitted
- the TRIP budget is enforced cumulatively across all bookings
- revocation is available at any time via Alice's wallet service
Service providers can cryptographically verify that every payment was authorized by Alice — even when the immediate counterparty is an AI agent acting autonomously.
The critical audit question is the same as in all MPCP deployments:
Was this payment actually authorized by the human principal?
MPCP provides the cryptographic proof required to answer that question — from Alice's DID-signed PolicyGrant through to XRPL settlement.