PAN and CVV never enter the agent’s context in any runtime — the credential boundary is enforced by JWE wrapping (MPP) or the harness boundary (CUA).
Runtime 1 — MPP
For merchants that speak MPP:1
Intent approved
Standard intent flow with
expectedMerchant set.2
Mint credential
POST /v1/mpp/credentials/mint (or POST /v1/mpp/pay for one-shot).3
Present
Merchant call with
Authorization: Payment <cred>.4
Verify
Merchant calls
POST /v1/mpp/credentials/:id/verify with their merchant key.transactions row on verify.
Runtime 2 — CUA
For merchants that only have a checkout form (CUA):1
Intent approved
Standard intent flow with
expectedAmountEuros.2
Mint autofill token
POST /v1/cua/autofill-tokens returns aft_* (30s TTL, single-use, intent + card + merchant origin + amount cap).3
Hand off to harness
Pass
aft_id to your CUA harness over your own internal channel — not the LLM context.4
Harness redeems + fills
Harness calls
GET /v1/cua/autofill-tokens/:id/redeem with X-CUA-Harness-Secret, gets DPAN, fills the form via CDP Input.insertText.5
LLM clicks submit
LLM only sees
{ status: "filled", masked_last4: "1234" }. Merchant settles.Runtime 3 — direct API execute (legacy)
For server-to-server flows where Ovra is the gateway:targetUrl must be HTTPS and SSRF-safe. Ovra resolves credentials, executes the merchant call via the PCI-proxy Forward Pull, returns the result.
Security layers
Choosing a runtime
Next
MPP
Wire flow, error matrix, merchant onboarding.
CUA
Threat model, harness boundary, JWKS prep.
Pay
The Pay pillar overview.
