The Problem: Wallet Addresses Are Not Identity
When an agent makes an MPP payment today, thesource field is a wallet address. That is it. No human name, no organization, no authorization chain. The merchant knows someone paid, but not:
- Who sent this agent? Is there a human behind it, or is it a rogue bot?
- Was it authorized? Does the agent have permission to spend this amount on this category?
- By whom? Which organization is liable if something goes wrong?
- For what scope? Is an inference agent accidentally buying storage?
The Proprietary Trap
Visa and Mastercard see this gap. Visa’s Trusted Agent Protocol and Mastercard’s AgentPay are both building agent identity networks. But these are:- Closed — tied to their card networks
- Non-interoperable — a Visa-verified agent cannot present credentials to a Mastercard merchant
- Permission-gated — you need network approval to participate
The Solution: AgentPassportCredential
We builtAgentPassportCredential — a W3C Verifiable Credential (VC 2.0) that binds agent identity, human delegation, spending limits, and payment categories into a single offline-verifiable document.
Here is the flow:
| Field | What It Tells the Merchant |
|---|---|
humanPrincipal | The DID of the human who authorized this agent |
organizationDID | The org responsible (e.g., did:web:acme.com) |
allowedMPPCategories | What the agent can buy: inference, compute, data, etc. |
maxTransactionAmount | Spending ceiling per transaction (e.g., 50 USDC) |
delegationDepth | How many hops from the original human grant (0 = direct) |
grantId | Links back to the full Grantex audit trail |
credentialStatus | StatusList2021 revocation — check if passport is still valid |
What Makes This Different
1. Offline Verification in Under 50ms
The passport is a self-contained JWT signed with the issuer’s key. Merchants fetch the JWKS once, cache it, and verify every subsequent passport locally. No API call to Grantex. No latency added to the payment flow.2. Category-Scoped Permissions
MPP defines service categories: inference, compute, data, storage, search, media, delivery, browser, general. Each maps to a Grantex scope (payments:mpp:inference, etc.). If an inference agent tries to buy storage, the passport verification fails with CATEGORY_MISMATCH before any money moves.
This is not a convention. It is enforced cryptographically. The categories are signed into the credential at issuance time.
3. Delegation-Aware
Agents delegate to sub-agents. A “procurement agent” might delegate to a “compute buyer” sub-agent with a narrower budget. The passport carriesdelegationDepth and the full chain is traceable through grantId. The four delegation invariants from the DAAP spec apply:
- Sub-agent categories must be a subset of the parent’s
- Spending limits can only narrow, never widen
- Expiry is bounded by the parent’s expiry
- Revoking a parent cascades to all descendants
4. Instant Revocation
Passports use StatusList2021 — a compressed bitstring where each credential has an index. Revoking a passport flips one bit. Merchants checking revocation status can fetch the status list and verify locally. No webhook needed, no polling, no race conditions.5. Public Trust Registry
Before fulfilling a high-value request, merchants can check the organization’s trust level:basic (self-declared), verified (DNS TXT proof), soc2 (audited). The endpoint is public — no auth required.
The Agent-Side Integration
Issuing a passport is three lines:onRefresh() in the background.
What Happens When Things Go Wrong
Every failure mode has a typed error code:| Scenario | Error Code | What Happens |
|---|---|---|
| Passport expired | PASSPORT_EXPIRED | 403 — agent must re-issue |
| Passport revoked by human | PASSPORT_REVOKED | 403 — human pulled the plug |
| Inference agent tries to buy storage | CATEGORY_MISMATCH | 403 — wrong category |
| 50 limit | AMOUNT_EXCEEDED | 403 — over budget |
| Tampered credential | INVALID_SIGNATURE | 403 — cryptographic proof failed |
| Unknown issuer | UNTRUSTED_ISSUER | 403 — not a recognized authority |
Standards Alignment
This is not a proprietary format. The entire stack is built on open standards:- W3C Verifiable Credentials Data Model v2.0 — the credential format
- Ed25519Signature2020 — the proof type
- StatusList2021 — revocation mechanism
- did:web — issuer identity resolution
- IETF draft-mishra-oauth-agent-grants-01 — the underlying authorization protocol
did:web:grantex.dev. No SDK required. No Grantex account required. Just fetch the public key and verify the JWT.
Try It Now
The entire implementation is open source and live in production. Install:packages/mpp/
MPP solved how agents pay. Grantex solves who authorized the payment. Together, they make agentic commerce auditable, revocable, and compliant — without locking anyone into a proprietary network.