Target picture: Scoped Mandate on ARF, PaSO and SPAA

Public version, status 23 October 2026 (design revision v3, live since 22 October 2026: the mandate is a credential issued by the bank; categories as Google Product Taxonomy IDs since 23 October 2026). Describes where the proof of concept leads: an agent purchase that rests entirely on the European trust framework. What already runs today is listed at the end.

The idea in one paragraph

A customer grants their bank one limited mandate: this much per purchase, this much in total, for this long, at these merchants, for these product categories. The approval is a strong customer authentication in the EUDI wallet. Afterwards an AI agent shops on the customer's behalf. At every purchase two parties check independently: the merchant checks the goods, the bank checks the money. Neither the wallet nor the agent decides about payments. Every rejection names the party and the reason; revocation takes effect immediately.

Roles according to the Architecture Reference Framework (ARF)

ARF role In Scoped Mandate What it does
Wallet User customer grants and revokes the mandate
Wallet Unit EUDIPal on the iPhone holds credentials, performs presentations, displays
Wallet Provider operator of the wallet provides the wallet unit, wallet unit attestation
Attestation Provider, (Q)EAA the bank as issuer issues the customer's SCA credential (the "Konto Karte", SD-JWT VC) and the mandate credential after the approval (SD-JWT VC bound to the agent's key)
Relying Party, verifier the bank receives and verifies the mandate approval as a presentation
Relying Party, verifier merchant verifies the bank-issued mandate credential and the agent identity at purchase
Attestation Provider for legal persons the agent's operator with a European Business Wallet (EBW); in the PoC a dedicated operator service, operator.s-you.me issues the agent's identity credential, after the customer has identified with the Konto Karte
Holder, second key in the wallet unit agent own key in the Secure Enclave, own credential, signs payment orders
Trusted Lists EU trusted lists anchors for issuers and relying parties, status lists for revocation

Two things are deliberate: the bank is both issuer of the SCA credential and verifier of the mandate approval, because it holds the mandate — and, since v3, it is also the issuer of the mandate itself. And the agent is not a separate wallet but a second holder key in the same wallet unit, with two credentials bound to that key: its identity from the operator, its mandate from the bank. Nothing in the chain is self-attested.

Protocols and formats

Every credential field by field: Credentials.

Purpose Standard Used for
Issue credentials OpenID for Verifiable Credential Issuance (OpenID4VCI) Konto Karte to the customer, agent credential to the agent, mandate credential to the agent
Present credentials OpenID for Verifiable Presentations (OpenID4VP) with DCQL mandate approval to the bank, identification to the operator, mandate credential and agent identity to the merchant
Credential format SD-JWT VC with key binding (KB-JWT) selective disclosure, proof of possession with nonce and audience; revocation via token status list
Interoperability profile HAIP signed requests with x5c, encrypted responses, trust anchors
Strong customer authentication PaSO (Payments and SCA for OpenID) mandate as transaction_data, hash in the KB-JWT, the PaSO SCA claims
Mandate scheme SPAA Dynamic Recurring Payment the bank-held, scope-limited mandate
Settlement SEPA Instant Credit Transfer (SCT Inst) every payment under the mandate
Operator identity European Business Wallet, eIDAS seal legal person identification, seal over the agent credential

The flow in the target picture

Interaction on OpenID4VC: credentials, mandate, purchase, revocation

Sequence of the mandate approval (bank as PaSO verifier, the only approval path): Sequence mandate approval

A · Obtain credentials (once). The customer fetches the Konto Karte from their bank via OpenID4VCI after logging in to online banking (authorization code, PAR, PKCE). The agent generates its key pair in the Secure Enclave. The customer identifies to the operator with the Konto Karte (OpenID4VP); only then does the operator issue the agent's credential via OpenID4VCI with a pre-authorized code: agent id, operator with register number, role, validity, key as proof of possession. In the target picture the credential is sealed from the operator's EBW.

B · Grant the mandate (one SCA). The mandate lives at the bank and has two parts. The payment part is in the clear: limits, validity, permitted merchants. The checkout part — product categories (Google Product Taxonomy IDs) and age rule — stays with wallet and agent; the bank only ever sees its hash. The agent sends the request and identifies with its credential (key binding over a bank nonce). The bank issues an OpenID4VP request in the PaSO profile with the payment part as transaction_data, which carries the hash of the checkout part, not its content. The wallet shows both parts, the customer confirms with Face ID, the wallet presents the Konto Karte, the bank verifies, creates the mandate and issues it as a credential: an SD-JWT VC bound to the agent's key with the payment part in the clear, the checkout hash, how the approval was made, and a status-list entry for revocation. The agent fetches it via OpenID4VCI with a pre-authorized code from the approval session. There is no other approval path.

C · Purchase (no further prompt). The agent presents its agent credential and the bank-issued mandate credential to the merchant via OpenID4VP, with the basket hash as transaction_data, and hands over the checkout part in the clear. The merchant verifies both credentials against the roots of operator and bank, checks the status list, recomputes the checkout hash and compares it with the bank-signed claim, checks the basket against the categories and confirms with a signed attestation bound to hash C and the basket. No call to the bank. The agent submits a payment order to the bank referencing mandate and attestation. The bank verifies merchant, limits, validity and merchant signature, then settles via SCT Inst.

D · Say no and revoke. If the goods do not fit, the merchant rejects. If the money does not fit, the bank rejects. Every rejection names party and reason; nothing is paid. The customer revokes at one place, at the bank in the app or the bank's own app: the bank flips the status bit of the mandate credential and rejects every further payment; agent and merchant see the status without asking. An agent the customer cannot stop does not belong with consumers.

Evidence after the fact. A dispute never needs the customer's phone: the merchant keeps the presented credentials and the checkout part, the bank keeps the SCA session with the customer's key-bound signature over the hash. Anyone with the bank's root can recompute that the categories matched what the customer approved. The item-to-category mapping follows a shared scheme, the Google Product Taxonomy: the merchant logs taxonomy ID and path per line, so a third party can follow the decision.

Where SPAA sits

SPAA is not a service anyone calls but the European Payments Council's rulebook for account access beyond the PSD2 obligations. It defines the Dynamic Recurring Payment: a mandate under which many payments of variable amount run within fixed limits, set up with a strong customer authentication with dynamic linking and executed without further SCA. That mandate is the payment part of Scoped Mandate.

SPAA governs the traffic between the third party (asset broker) and the account-servicing bank (asset holder). Here the third party is the agent's operator: the agent speaks SPAA to the bank. Three things are outside SPAA and unchanged in the target picture: the customer's approval (OpenID4VP in the PaSO profile between wallet and bank), the merchant with checkout part and attestation (an addition above SPAA, carried as a reference in the payment order), and settlement (SCT Inst). Since 19 October 2026 the bank's mandate service also offers the same mandate in SPAA form as a façade following the Berlin Group openFinance structure under /spaa/v1 (Interface Specification §1.17).

What the separation of powers guarantees

Party Sees Decides on
customer, wallet everything, on their own device the one approval, the revocation
agent, AI wish, basket, prices, checkout part; holds the mandate credential nothing about money
merchant basket, checkout part with categories, the bank-signed mandate credential categories, age restriction
bank payment part: amount, limits, merchants, hashes; of the checkout part only the hash limits, merchants, validity, revocation
operator that a bank customer onboarded this agent who counts as its agent

The bank never sees the basket or the categories, the AI never sees the account. The merchant sees the payment part of the mandate — limits, validity, permitted merchants — because it is in the clear in the bank's credential; it does not see the account, the customer's name or the remaining budget. The intelligence is replaceable; the security lies in the mandate and in the checks of bank and merchant.

What runs today, what is target picture

Building block Today in the PoC Target picture
Konto Karte via OpenID4VCI the bank is the issuer: credential only from a logged-in online-banking session, own trust root, revocation via status list same, with qualified certificates from a trust service provider
Mandate approval OpenID4VP in the PaSO profile, bank as verifier, the only path same
Mandate as a credential v3, live since 22 October 2026: the bank mock issues the approved mandate as SD-JWT VC to the agent key, offer from the approval session, status list for revocation; older app builds (≤ 792) still use, as legacy, a customer-signed checkout credential plus notary query same, from the bank's production issuer with a qualified certificate
Agent identity issued by the operator service after identification with the Konto Karte; bank and merchant trust the operator via list and root same, operator credential from the EBW with eIDAS seal, EU trusted list instead of configuration
Purchase at the merchant OpenID4VP with agent credential and mandate credential, checkout part in the clear, HAIP-encrypted response, no call to the bank; categories as Google Product Taxonomy IDs (since 23 October 2026, matched by ancestry, exclusion wins) same
Trust anchors configured lists with binding of the certificate to the issuer; wallet accepts well-formed chains EU trusted lists in wallet and verifiers
Mandate scheme and settlement SPAA DRP, SCT Inst, simulated; SPAA façade live same, connected to real systems

Bank, merchant and operator are mocks with stable, documented interfaces. The path from today to the target picture replaces the mocks and transport protocols, not the interface contracts and not the distribution of roles.