Product · EU Digital Identity Wallet · Intermediary

CodeB Wallet Intermediary: the EU Wallet for many relying parties

Offer the EU Digital Identity Wallet to your customers as a service: practices, shops, brokers, municipalities, associations. Each customer appears in the wallet under its own name and purpose – you run one installation, one access certificate and one register.

In one sentence: CodeB Wallet Intermediary makes your installation an intermediary as described in the ARF: every wallet request is signed with your access certificate and carries the registration certificate of the relying party you act for – with its name, its purpose and you as intermediary, per ETSI TS 119 475.

ARF 3.0 · ETSI TS 119 475 · CIR (EU) 2025/848 · OpenID4VP 1.0 · HAIP 1.0 · OpenID Connect

Closed beta, in testing. Not certified.

In short

What
An intermediary module: your installation talks to the EU Digital Identity Wallet on behalf of your customers.
For whom
Trust service providers, identity verification providers, payment providers, public service providers and IT service providers who want to offer the wallet to many smaller organisations.
Certificates
One access certificate for you as intermediary; for each customer a registration certificate with intermediary and act.sub, with a status list.
Register
One entry per customer with the data of Annex I of Implementing Regulation (EU) 2025/848, including points 14 and 15 (intermediary); publicly retrievable.
Customer integration
Standard OpenID Connect – samples for Node.js, Python, PHP and ASP.NET Core.
How to get it
As a hosted service run by Aloaha or as a module of your own CodeB installation. Pricing on request.

How it works

Four steps; the first two only once per customer.

Run the intermediary

Your installation holds one access certificate (as intermediary) and a registrar signer for registration certificates, both from the access-certificate CA.

Register each relying party

For every customer: a register entry with its legal name, identifier, purpose, privacy policy and contact, marked “uses this site as intermediary” and linked to its gateway client.

The relying party integrates

Standard OpenID Connect with acr_values=urn:codeb:acr:eudi-wallet. Nothing wallet-specific on its side.

The wallet sees both

Each request is signed with the intermediary’s access certificate and carries the customer’s own registration certificate naming the intermediary. The person approves; the customer receives a signed id_token.

What the module does

Two certificates per request

Your access certificate authenticates the intermediary; the customer’s registration certificate names the recipient, the purpose and the intermediary – exactly what a wallet needs for “who is asking, on whose behalf”.

A register per relying party

Official name, identifier, country, purpose, privacy policy, contact, supervisory authority and intermediary. Changes are logged; the entry is public, the client identifier is not.

Suspend in seconds

Suspending or cancelling a registration stops new sign-ins for that customer at once and marks its registration certificates in the status list.

Only what is asked

The registration certificate lists exactly the credentials and attributes of each request; the wallet discloses only those, by selective disclosure.

Wallet protocols included

OpenID4VP 1.0 with DCQL, HAIP 1.0, SD-JWT VC and ISO mdoc, trusted lists and revocation – the same engine as the CodeB Relying Party Gateway.

Customers without registration

Gateway clients without an intermediary registration keep signing in with your installation as the relying party – you move customers over one by one.

Who becomes an intermediary

Trust service providers

Wallet acceptance for your signature and seal customers, bundled with your existing services.

Identity verification providers

The PID from the wallet as an alternative to video and document checks, for many clients from one installation.

Public service providers

One gateway to the wallet for municipalities and agencies, each with its own name and purpose in the wallet.

IT service providers for SMEs

Practices, law firms, shops and associations get wallet sign-in without running certificates and protocols themselves.

Security, privacy, limits

Designed for ARF 3.0

Follows the ARF 3.0, ETSI TS 119 475, OpenID4VP 1.0 and HAIP 1.0. Not certified.

No profiles, no trackers

Presented attributes go to the relying party and are kept only for the sign-in; no third-party analytics.

Trust scope

Certificates come today from the CodeB access-certificate CA and its register – not from a national register. Wallets accept them where they trust that CA.

Data subject rights

The relying party’s contact, privacy policy and supervisory authority are in its registration certificate; deletion requests go through the ARF endpoint.

For developers

Register, certificate and customer integration in four snippets.

Register a relying party

Once per customer: a register entry with “uses this site as intermediary” and the gateway client it signs in through.

shell
# Register a relying party that uses your site as intermediary (admin API of the
# access-certificate CA; the same form is on the admin page "Access-certificate CA").
curl -s https://YOUR-SITE/wrpac-ca.ashx?rp \
  -H "Authorization: Bearer ADMIN_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "example-shop",
    "official_name": "Example Shop Ltd",
    "trade_name": "Example Shop",
    "org_id": "VATMT-00000000",
    "country": "MT",
    "url": "https://shop.example",
    "email": "privacy@shop.example",
    "privacy_policy": "https://shop.example/privacy",
    "intended_use": "Age check at checkout",
    "uses_intermediary": true,
    "oidc_client_id": "example-shop-web"
  }'

What the wallet receives

The relying party’s registration certificate names the intermediary; the request itself is signed with the intermediary’s access certificate.

json
// Payload of the registration certificate the wallet receives (typ rc-wrp+jwt,
// signed by the registrar signer; values illustrative, abridged).
{
  "sub": "VATMT-00000000",            // the relying party - not the intermediary
  "name": "Example Shop",
  "sub_ln": "Example Shop Ltd",
  "country": "MT",
  "intermediary": { "sub": "VATMT-99999999", "sname": "CodeB" },   // ETSI TS 119 475 Table 10
  "act": { "sub": "VATMT-99999999" },                               // GEN-5.2.4-09
  "credentials": [ { "format": "dc+sd-jwt", "meta": { "vct_values": ["urn:eudi:pid:1"] },
                     "claim": [ { "path": ["age_equal_or_over", "18"] } ] } ],
  "purpose": [ { "lang": "en", "value": "Age check at checkout" } ],
  "privacy_policy": "https://shop.example/privacy",
  "registry_uri": "https://YOUR-SITE/wrpac-ca.ashx?registry=example-shop",
  "status": { "status_list": { "idx": 7, "uri": "https://YOUR-SITE/wrpac-ca.ashx?rc-status" } },
  "iat": 1792540800, "exp": 1792627200
}

What the relying party integrates

http
# The relying party itself only does a standard OpenID Connect sign-in
# (authorization code + PKCE) with its gateway client and asks for the wallet:
https://YOUR-SITE/oauth2/v1/authorize?response_type=code
  &client_id=example-shop-web
  &redirect_uri=https%3A%2F%2Fshop.example%2Fcallback
  &scope=openid
  &acr_values=urn%3Acodeb%3Aacr%3Aeudi-wallet
  &state=...&nonce=...&code_challenge=...&code_challenge_method=S256
# Complete samples for Node.js, Python, PHP and ASP.NET Core: relying-party-quickstart.html

Public register entry

shell
# Public register entry (the registry_uri in the certificate) - shows that the
# relying party uses an intermediary and which one (CIR (EU) 2025/848 Annex I points 14-15):
curl -s "https://YOUR-SITE/wrpac-ca.ashx?registry=example-shop"
# { "id": "example-shop", "official_name": "Example Shop Ltd", ...,
#   "uses_intermediary": true,
#   "intermediary": { "sub": "VATMT-99999999", "sname": "CodeB" }, "status": "valid" }

Frequently asked questions

What is an EUDI Wallet intermediary?

An intermediary is a relying party that talks to the EU Digital Identity Wallet on behalf of other relying parties. Under the revised eIDAS Regulation intermediaries are treated as relying parties themselves and must not store data about the content of the transactions they handle. The Architecture and Reference Framework (ARF) describes the role next to relying parties and relying party instances.

What changes for the person using the wallet?

Every request carries two certificates: the intermediary’s access certificate, which proves who is handling the request, and the relying party’s registration certificate, which states who receives the data, for which purpose, and names the intermediary. A wallet can therefore show both “who is asking” and “on whose behalf”.

Does each relying party still need its own registration?

Yes. Implementing Regulation (EU) 2025/848 asks a relying party to state in its registration whether it relies on an intermediary and which one (Annex I points 14 and 15). The module keeps that register entry per relying party and issues its registration certificate with the intermediary fields of ETSI TS 119 475.

How is this different from the CodeB Relying Party Gateway?

The Relying Party Gateway lets one organisation accept the wallet on its own website. The Wallet Intermediary lets you offer that to many organisations under their own names: each one is registered separately, appears in the wallet as itself, and can be suspended on its own – while you run one installation and one access certificate.

Can we rent or license it?

Yes. CodeB Wallet Intermediary is offered as a hosted service run by Aloaha, or as a module of a CodeB installation you operate under your own name. Pricing on request.

What does the relying party have to build?

A standard OpenID Connect sign-in (authorization code with PKCE) and one check of the acr claim. No wallet protocols, no certificates, no trust lists. The developer quickstart has complete samples.

Does the intermediary keep the presented data?

Presented attributes are passed to the relying party in the sign-in and kept only for that sign-in and the tokens handed over; they are not added to any profile. There is no third-party analytics.

Which wallets accept it?

Wallets that implement OpenID for Verifiable Presentations 1.0 and trust the certificates used. Today the access and registration certificates come from the CodeB access-certificate CA and its relying-party register, which is not a Member State’s national register; wallets accept them where they trust that CA.

What happens when a customer leaves or misbehaves?

Suspend or cancel its registration: new sign-ins for that relying party stop at once, and its registration certificates show as suspended or invalid in the status list that wallets check.

Is it certified?

No. The module is designed to follow the ARF 3.0, OpenID4VP 1.0, HAIP 1.0 and ETSI TS 119 475; it is not certified and does not claim an eIDAS level of assurance.

Become an intermediary?

Write to us: hosted service or a module of your own installation – we set up the register, the certificates and your first customer with you.