MPP ist das Machine Payments Protocol: ein IETF-Draft (Documentation Index
Fetch the complete documentation index at: https://docs.getovra.com/llms.txt
Use this file to discover all available pages before exploring further.
draft-httpauth-payment-00, co-authored Tempo Labs + Stripe, siehe paymentauth.org) der HTTP 402 Payment Required in eine echte, maschinenlesbare Challenge verwandelt. Ovra implementiert die card-Methode als Credential-Issuer.
Wenn ein Merchant WWW-Authenticate: Payment ... returnt, kann dein Agent zahlen — ohne ein Formular zu rendern, einen Browser zu öffnen oder eine Kartennummer zu sehen.
Code-complete (Phase 7). Sandbox-only End-to-End. Das Credential-Envelope ist ein echtes JWE; Merchants liefern in ihrem MPP-Onboarding einen Private Key zum Entschlüsseln.
Wire-Flow
Merchant returnt 402
Agent mintet Credential
Agent ruft
POST /v1/mpp/credentials/mint mit der rohen Challenge plus genehmigtem Intent und einer Karte. Ovra mintet ein JWE-wrapped Network-Token gebunden an den Intent.Merchant entschlüsselt und settlet
Merchant verwendet eigenen Private Key (RSA-OAEP-256 + A256GCM) zum Unwrap von DPAN + Cryptogram, settlet via eigenen Acquirer.
High-Level-Convenience: POST /v1/mpp/pay
Für die meisten Agent-Code-Pfade willst du den Roundtrip nicht selbst orchestrieren. Der High-Level-Endpoint macht alles:
GETdie URL, erwartet402mit MPP-Challenge.- Mintet eine Credential gebunden an
intentId+cardId. - Wiederholt den Request mit
Authorization: Payment <cred>. - Empfängt
Payment-Receipt, ruft Verify, schreibt die Transaktion.
Low-Level: Mint + Verify
Error-Matrix
| Status | Code | Bedeutung |
|---|---|---|
| 400 | E_MPP_CRED_MALFORMED_CHALLENGE | Challenge nicht parsbar |
| 400 | E_MPP_CRED_AMOUNT_MISMATCH | Intent-Amount ≠ Challenge-Amount |
| 400 | E_MPP_CRED_MERCHANT_MISMATCH | Intent-Merchant ≠ Challenge-payTo |
| 400 | E_MPP_CRED_PAR_REQUIRED | PAR ist mandatory aber fehlt |
| 403 | E_MPP_CRED_INTENT_NOT_APPROVED | Intent nicht in approved-State |
| 403 | E_MPP_CRED_INTENT_MISMATCH | Intent-Owner ≠ Caller |
| 404 | E_MPP_CRED_MERCHANT_NOT_FOUND | Kein Merchant für die Challenge-Realm registriert |
| 410 | E_MPP_CRED_INTENT_EXPIRED | Intent jenseits expiresAt |
| 410 | E_MPP_CRED_CARD_CONSUMED | Single-use-Card bereits verbrannt |
| 502 | E_UPSTREAM_ERROR | Card-Issuer- oder PCI-Proxy-Upstream-Failure |
application/problem+json) mit Type-URIs invalid-challenge oder verification-failed — niemals ein Oracle. Replays returnen 402 invalid-challenge egal welche Underlying-Cause.
Merchant-Onboarding
Wenn du einen Merchant betreibst der MPP akzeptieren möchte, registriere viaPOST /v1/merchants mit Invite-Code:
mer_sk_* zum Aufruf von /verify verwenden. Der JWK validiert ausschließlich als RSA-OAEP-256 + A256GCM; Downgrades werden zur Write-Time abgelehnt.
Webhooks
| Event | Wann |
|---|---|
mpp.credential.minted | Credential via /mint ausgestellt |
mpp.credential.consumed | Credential erfolgreich verifiziert |
mpp.credential.expired | Reserviert (Sweep ist Future Work; Expiry surfaced heute via 410 von Mint und 402 von Verify) |
mpp.transaction.completed | Verifizierte MPP-Transaktion settled |
Sacred Guarantees
- Null Card-Data im Agent-Kontext. Das Credential-Envelope ist eine base64url-nopad JWE; nur der Private Key des Merchants kann sie entschlüsseln. Selbst wenn der Agent die volle Mint-Response loggt blutet kein PAN/DPAN/Cryptogram.
- Single-use. CAS-Consume bei Verify — Replay returnt 402.
- Gebunden an einen Intent. Wiederverwendete Intent-IDs über Challenges hinweg werden mit
E_MPP_CRED_INTENT_MISMATCHabgelehnt.
Weiter
CUA
Der andere Pay-Modus — für Merchants ohne MPP.
Pay-Übersicht
Wie MPP und CUA ein Produktnarrativ teilen.
Intents
Die Approval-Primitive an die jede Credential bindet.
Webhooks
mpp.* Events für Echtzeit-Updates abonnieren.