Run the intermediary
Your installation holds one access certificate (as intermediary) and a registrar signer for registration certificates, both from the access-certificate CA.
Product · EU Digital Identity Wallet · Intermediary
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.
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.
intermediary and act.sub, with a status list.Four steps; the first two only once per customer.
Your installation holds one access certificate (as intermediary) and a registrar signer for registration certificates, both from the access-certificate CA.
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.
Standard OpenID Connect with acr_values=urn:codeb:acr:eudi-wallet. Nothing wallet-specific on its side.
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.
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”.
Official name, identifier, country, purpose, privacy policy, contact, supervisory authority and intermediary. Changes are logged; the entry is public, the client identifier is not.
Suspending or cancelling a registration stops new sign-ins for that customer at once and marks its registration certificates in the status list.
The registration certificate lists exactly the credentials and attributes of each request; the wallet discloses only those, by selective disclosure.
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.
Gateway clients without an intermediary registration keep signing in with your installation as the relying party – you move customers over one by one.
Wallet acceptance for your signature and seal customers, bundled with your existing services.
The PID from the wallet as an alternative to video and document checks, for many clients from one installation.
One gateway to the wallet for municipalities and agencies, each with its own name and purpose in the wallet.
Practices, law firms, shops and associations get wallet sign-in without running certificates and protocols themselves.
Follows the ARF 3.0, ETSI TS 119 475, OpenID4VP 1.0 and HAIP 1.0. Not certified.
Presented attributes go to the relying party and are kept only for the sign-in; no third-party analytics.
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.
The relying party’s contact, privacy policy and supervisory authority are in its registration certificate; deletion requests go through the ARF endpoint.
Register, certificate and customer integration in four snippets.
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"
}'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
}# 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 (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" }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.
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”.
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.
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.
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.
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.
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.
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.
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.
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.
Accept the EU Wallet on your own website.
OpenID Connect code for relying parties.
How access and registration certificates are issued.
OpenID4VP endpoints, registration certificate, deletion requests.
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.