Run eID verification with five national eIDs, live in seven countries: MitID, BankID Sweden, Finnish Trust Network, Smart-ID and Mobile-ID. Each returns a signed name, date of birth and scheme identifier, such as the Swedish personnummer (MitID returns a pseudonymised one). Anyone without an eID finishes with a document check in 220+ countries and territories, in the same workflow.
Signed resultMitID · DNKverification_method: wallet
Full nameFreja Nielsen
Date of birth1988-03-02
CPR alias (pseudonymised)b0f1c2d3-e4f5-…
Level of assuranceSubstantial
Issuer signatureValid
No address or portrait is shared. Add liveness and face match if you need a selfie.
What an eID sign-in gives you
Signed by the issuer. Checked by Didit.
An eID (electronic identification) sign-in replaces a photo of a document with data the scheme signs. Didit checks the signature and puts the result on the session.
01Full name and date of birth, signed by the scheme
02A scheme identifier: personnummer, personal identity code or personal code (MitID returns a pseudonymised identifier)
03The level of assurance the scheme asserted
04A signature check on every result: signature_valid
05No document photo, no PIN shared with Didit, and no charge unless the sign-in completes
How it works
From national eID to a verified customer in four steps.
Step 01 / 04
01
Pick the eIDs per country
In the workflow builder, open the ID Verification step, choose a country and tick the eIDs you accept under Wallets accepted. Then choose what happens when a sign-in fails: fall back to document capture, or decline.
Send the user to the flow
Create a session with one API call and redirect to the hosted flow, or open it in the Web, iOS, Android, React Native or Flutter SDK. The chooser shows only the eIDs you accepted for the user's country.
The user approves in their eID app
Same-device hand-off or a QR code on desktop for MitID, BankID and Finnish Trust Network, or a comparison code approved on the phone for Smart-ID and Mobile-ID. The PIN stays in the eID app.
You get the signed result
A signed webhook tells you the status changed. The decision carries the scheme, the signed attributes, the level of assurance and the signature check, with verification_method set to wallet.
eID verification · Six parts
National eIDs and a document route, in one workflow.
Each row is one part of the same workflow. Turn on what your onboarding needs, country by country, and keep one integration.
MitID in Denmark, BankID in Sweden, the Finnish Trust Network in Finland, Smart-ID in Estonia, Latvia, Lithuania and Belgium, and Mobile-ID in Estonia and Lithuania. Each returns a full name, a date of birth and the scheme's own identifier: the Swedish personnummer, the Finnish personal identity code, the Baltic personal code, or a pseudonymised CPR alias for MitID. No live eID shares an address or a portrait.
One workflow, with a document route for everyone else.
Not everyone has an eID, and many customers live where none is live yet. Set the fallback per country and the same session moves to a document check: 14,000+ document types, chip (NFC) reading of e-passports and eID cards for $0.15, passive liveness and face match. A full KYC (know your customer) check with a document costs $0.33.
Art. 22(6)(a)Identity documentPassportChip readLivenessFace matchFor people without a live eID
Identity verifiedName · date of birth · identifierRoute usedMitID
03 · Signed data
Signed data you can act on.
Every eID result lands in a wallet_verification object on the session: the scheme, the issuing country, the level of assurance, the attributes and signature_valid. If a scheme returns a weaker level than the one you requested, the sign-in fails instead of quietly downgrading. Only completed sign-ins are billed. Cancelled, timed-out and failed ones are free.
An eID sign-in returns a date of birth signed by the scheme, so it proves age without a document photo. For high volume, a recommended design is age estimation first, at $0.10 per check with passive liveness, and an eID or document check only for borderline results.
Add AML (anti-money laundering) screening after the eID step and the verified name and date of birth go straight into sanctions, PEP (politically exposed person) and watchlist checks across 1,300+ lists, for $0.20 per check. Ongoing monitoring re-screens every day for $0.07 per person per year. A possible match goes to your reviewer.
iDIN, the German eID card, Freja eID, the Estonian ID card, eParaksts, BankID Norway, Vipps, Buypass, itsme, OneID, ConnectID, UAE PASS, gov.br, GOV.UK Wallet, Bank iD, MojeID, Diia, FranceConnect and Auðkenni are on our roadmap, and EUDI Wallet (EU Digital Identity Wallet) acceptance is coming soon. For any other scheme, talk to us: Didit adds schemes on request, and the document route already works in that country.
Coverage follows the catalog country by country. A flag here means a wallet is listed for that country, not that it is live.
eID coverage
Every national eID, country by country.
The national and bank eIDs across Europe and the main digital ID schemes elsewhere: what each asks of the user, its level of assurance and what it returns. Status and prices come from Didit's live wallet catalog.
136 of 136 schemes
Scheme
Country
Didit status
Level of assurance
What the user does
Data returned to you
Price per sign-in
MitID
Country
Denmark
Didit status
Live
Level of assurance
Substantial, High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Name, date of birth, pseudonymised CPR alias, level of assurance, signature check
Price per sign-in
$0.25
Mobile-ID
Country
Estonia
Didit status
Live
Level of assurance
High · EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Name, date of birth, personal code, signature check
Price per sign-in
$0.20
Smart-ID
Country
Estonia
Didit status
Live
Level of assurance
High · not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Name, date of birth, personal code, signature check
Price per sign-in
$0.20
Estonian ID card and Digi-ID
Country
Estonia
Didit status
Coming soon
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Finnish Trust Network (bank IDs)
Country
Finland
Didit status
Live
Level of assurance
Substantial · not EU-notified
What the user does
Signs in on the scheme's page
Data returned to you
Name, date of birth, personal identity code, signature check
Price per sign-in
$0.25
FINeID citizen certificate (ID card)
Country
Finland
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Mobiilivarmenne
Country
Finland
Didit status
On request
Level of assurance
Substantial · not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Per scheme
Price per sign-in
On request
Auðkenni (app, SIM and card)
Country
Iceland
Didit status
Coming soon
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Mobile-ID
Country
Lithuania
Didit status
Live
Level of assurance
High · not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Name, date of birth, personal code, signature check
Price per sign-in
$0.20
Smart-ID
Country
Lithuania
Didit status
Live
Level of assurance
High · not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Name, date of birth, personal code, signature check
Price per sign-in
$0.20
Asmens tapatybės kortelė (identity card)
Country
Lithuania
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Smart-ID
Country
Latvia
Didit status
Live
Level of assurance
not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Name, date of birth, personal code, signature check
Price per sign-in
$0.20
eParaksts mobile
Country
Latvia
Didit status
Coming soon
Level of assurance
Substantial, High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eID karte (identity card)
Country
Latvia
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
eParaksts karte
Country
Latvia
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
BankID (Norway)
Country
Norway
Didit status
Coming soon
Level of assurance
High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Buypass ID
Country
Norway
Didit status
Coming soon
Level of assurance
High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Vipps
Country
Norway
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Commfides eID
Country
Norway
Didit status
On request
Level of assurance
High · not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
MinID
Country
Norway
Didit status
On request
Level of assurance
Substantial · not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
BankID Sweden
Country
Sweden
Didit status
Live
Level of assurance
Substantial · EU-notified
What the user does
Approves in the eID app
Data returned to you
Name, date of birth, personnummer, signature check
Price per sign-in
$0.20
Freja eID
Country
Sweden
Didit status
Coming soon
Level of assurance
Substantial · EU-notified (Freja+ via ATG agent route only)
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
SverigeID
Not launched yet
Country
Sweden
Didit status
On request
Level of assurance
not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
ID Austria
Country
Austria
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Smart-ID
Country
Belgium
Didit status
Live
Level of assurance
High · not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Name, date of birth, personal code, signature check
Price per sign-in
$0.20
itsme
Country
Belgium
Didit status
Coming soon
Level of assurance
High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Belgian eID card
Country
Belgium
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
MyGov.be key
Country
Belgium
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Swiss E-ID (swiyu)
Not launched yet
Country
Switzerland
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
SwissID
Country
Switzerland
Didit status
On request
Level of assurance
not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Online-Ausweisfunktion (Personalausweis)
Country
Germany
Didit status
Coming soon
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
d-you
Not launched yet
Country
Germany
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
FranceConnect
Country
France
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
France Identité
Country
France
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
L'Identité Numérique La Poste
Country
France
Didit status
On request
Level of assurance
Substantial · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eID.li
Country
Liechtenstein
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
itsme
Country
Luxembourg
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Luxembourg eID card
Country
Luxembourg
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
LuxTrust
Country
Luxembourg
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
iDIN
Country
Netherlands
Didit status
Coming soon
Level of assurance
not EU-notified
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
itsme
Country
Netherlands
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
DigiD
Country
Netherlands
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eHerkenning (business login)
Country
Netherlands
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Yivi
Country
Netherlands
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
GOV.UK Wallet
Country
United Kingdom
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
OneID
Country
United Kingdom
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
GOV.UK One Login
Country
United Kingdom
Didit status
On request
Level of assurance
not EU-notified · GPG 45 medium
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Government Digital Wallet
Not launched yet
Country
Ireland
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
MyGovID
Country
Ireland
Didit status
On request
Level of assurance
not EU-notified · SAFE 2
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Digital Identity (IdentiTek)
Not launched yet
Country
Albania
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
e-Albania
Country
Albania
Didit status
On request
Level of assurance
not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
B-Trust Mobile
Country
Bulgaria
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eAuth
Country
Bulgaria
Didit status
On request
Level of assurance
not EU-notified
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Electronic identity certificate (identity card)
Not launched yet
Country
Bulgaria
Didit status
On request
Level of assurance
not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Evrotrust eID
Country
Bulgaria
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Cyprus national eID
Country
Cyprus
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Bank iD
Country
Czechia
Didit status
Coming soon
Level of assurance
not EU-notified
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
MojeID
Country
Czechia
Didit status
Coming soon
Level of assurance
Low, Substantial, High · EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
eDoklady
Country
Czechia
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eObčanka (identity card)
Country
Czechia
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Identita občana (NIA)
Country
Czechia
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Mobilní klíč eGovernmentu
Country
Czechia
Didit status
On request
Level of assurance
Low, Substantial, High · EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
Cartera Digital Beta
Not launched yet
Country
Spain
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
Cl@ve
Country
Spain
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
DNIe (DNI 3.0 and 4.0)
Country
Spain
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
MiDNI
Country
Spain
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
Gov.gr Wallet
Country
Greece
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
TAXISnet credentials
Country
Greece
Didit status
On request
Level of assurance
not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Certilia mobile.ID
Country
Croatia
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eOI (identity card)
Country
Croatia
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
NIAS (e-Građani)
Country
Croatia
Didit status
On request
Level of assurance
not EU-notified (uses eOI, which is EU-notified at High)
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
DÁP (Digitális Állampolgárság)
Country
Hungary
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
Ügyfélkapu+
Country
Hungary
Didit status
On request
Level of assurance
not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
CIE and CieID
Country
Italy
Didit status
On request
Level of assurance
Low, Substantial, High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
IT-Wallet
Country
Italy
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
SPID
Country
Italy
Didit status
On request
Level of assurance
Low, Substantial, High · EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Carte de identitate (identity card)
Country
Moldova
Didit status
On request
Level of assurance
not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
EVO
Country
Moldova
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
EVOSign
Country
Moldova
Didit status
On request
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
MPass
Country
Moldova
Didit status
On request
Level of assurance
not EU-notified
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Semnătura Mobilă
Country
Moldova
Didit status
On request
Level of assurance
not EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Per scheme
Price per sign-in
On request
Evrotrust eID
Country
North Macedonia
Didit status
On request
Level of assurance
High · not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
m.Uslugi
Not launched yet
Country
North Macedonia
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
OneID (KIBS)
Country
North Macedonia
Didit status
On request
Level of assurance
High · not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
uslugi.gov.mk eID
Country
North Macedonia
Didit status
On request
Level of assurance
not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Maltese e-ID
Country
Malta
Didit status
On request
Level of assurance
High · EU-notified (eID card and e-residence documents only)
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
e-dowód (identity card)
Country
Poland
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
login.gov.pl
Country
Poland
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
mObywatel
Country
Poland
Didit status
On request
Level of assurance
not EU-notified
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
Profil Zaufany
Country
Poland
Didit status
On request
Level of assurance
Substantial, High · EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
Autenticação.gov
Country
Portugal
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Cartão de Cidadão
Country
Portugal
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Chave Móvel Digital
Country
Portugal
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Confirms a code on the phone
Data returned to you
Per scheme
Price per sign-in
On request
Carte electronică de identitate
Country
Romania
Didit status
On request
Level of assurance
not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
ROeID
Country
Romania
Didit status
On request
Level of assurance
Substantial · EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
eID.gov.rs (ConsentID)
Country
Serbia
Didit status
On request
Level of assurance
High · not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Lična karta (identity card)
Country
Serbia
Didit status
On request
Level of assurance
High · not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
eOI and eOsebna
Country
Slovenia
Didit status
On request
Level of assurance
High · EU-notified (ID card only)
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
SI-PASS
Country
Slovenia
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
eID karta (identity card)
Country
Slovakia
Didit status
On request
Level of assurance
High · EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
MeID
Country
Slovakia
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Slovensko v mobile
Country
Slovakia
Didit status
On request
Level of assurance
Not stated
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
e-Devlet
Country
Türkiye
Didit status
On request
Level of assurance
not EU-notified
What the user does
Password plus a one-time code
Data returned to you
Per scheme
Price per sign-in
On request
T.C. Kimlik Kartı (identity card)
Country
Türkiye
Didit status
On request
Level of assurance
not EU-notified
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Diia
Country
Ukraine
Didit status
Coming soon
Level of assurance
not EU-notified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
BankID NBU
Country
Ukraine
Didit status
On request
Level of assurance
not EU-notified
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
UAE PASS
Country
United Arab Emirates
Didit status
Coming soon
Level of assurance
Basic, Verified
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Kuwait Mobile ID (Hawyti)
Country
Kuwait
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Absher
Country
Saudi Arabia
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Nafath
Country
Saudi Arabia
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
ConnectID
Country
Australia
Didit status
Coming soon
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
myID
Country
Australia
Didit status
On request
Level of assurance
Per scheme rules
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
National Online Identity Authentication
Country
China
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Identitas Kependudukan Digital (IKD)
Country
Indonesia
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Aadhaar e-KYC
Country
India
Didit status
On request
Level of assurance
Not stated
What the user does
Confirms a code on the phone
Data returned to you
Per scheme
Price per sign-in
On request
DigiLocker
Country
India
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
My Number Card (JPKI)
Country
Japan
Didit status
On request
Level of assurance
Not stated
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Mobile ID
Country
South Korea
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
RealMe verified identity
Country
New Zealand
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
PhilSys (PhilID, ePhilID)
Country
Philippines
Didit status
On request
Level of assurance
Not stated
What the user does
Scans a QR code with the app
Data returned to you
Per scheme
Price per sign-in
On request
Singpass (Myinfo)
Country
Singapore
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
NDID
Country
Thailand
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
ThaID
Country
Thailand
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Mi Argentina
Country
Argentina
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
gov.br
Country
Brazil
Didit status
Coming soon
Level of assurance
Per scheme rules
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Service d'authentification gouvernementale
Country
Canada
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Llave MX
Country
Mexico
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
DNIe 3.0
Country
Peru
Didit status
On request
Level of assurance
Not stated
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Apple Wallet Digital ID
Country
United States
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Google Wallet ID Pass
Country
United States
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
ID.me
Country
United States
Didit status
On request
Level of assurance
NIST IAL2
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
Login.gov
Country
United States
Didit status
On request
Level of assurance
Not stated
What the user does
Signs in on the scheme's page
Data returned to you
Per scheme
Price per sign-in
On request
State mobile driver's licences (mDL)
Country
United States
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
Cédula digital wallet
Not launched yet
Country
Uruguay
Didit status
On request
Level of assurance
Not stated
What the user does
Approves in the eID app
Data returned to you
Per scheme
Price per sign-in
On request
National Identification Number (NIN)
Country
Nigeria
Didit status
On request
Level of assurance
Not stated
What the user does
Confirms a code on the phone
Data returned to you
Per scheme
Price per sign-in
On request
Smart ID card
Country
South Africa
Didit status
On request
Level of assurance
Not stated
What the user does
Taps the ID card (NFC) or uses a card reader
Data returned to you
Per scheme
Price per sign-in
On request
Last reviewed: 5 October 2026. Not legal advice. The level of assurance is the scheme's own level under eIDAS (the EU regulation on electronic identification) or national rules, as the issuer or the EU list of notified schemes publishes it. Prices are per completed sign-in. For any scheme marked On request, talk to us: the document route with chip reading already works in that country.
See the flow
Three screens, no document photo.
What your customer sees with Smart-ID: pick the eID, confirm a code in the app, come back verified. MitID, BankID and Finnish Trust Network hand off to the app on the same phone, or show a QR code on desktop.
Verify with your eID
MitID
BankID
Finnish Trust Network
Smart-ID
Mobile-ID
01
Choose your eID
The chooser lists the eIDs you accept for the user's country, with their official marks.
Your verification code
4821
Check that your app shows the same code, then confirm.
02
Approve in the app
The user checks that the code matches, then confirms with their PIN in the eID app. Didit never sees the PIN.
Identity verified
Returning you to the app
03
Verified
The flow returns the user to you, and the signed result arrives by webhook.
Integrate
Turn eIDs on. Read the signed result.
Enable eIDs per country in the workflow, with the document route as the fallback, then read the signed result from the session decision or the webhook.
Copy this prompt into your coding agent and describe your stack. It covers the workflow config per country, the session call, the signed webhook, the wallet_verification result and billing.
didit-integration-prompt.md
# Didit eID verification, integrate in 5 minutes
You are adding national eID sign-in to my_stack: the user verifies with the
eID they already use (a bank or government digital identity), and anyone
without one falls back to document capture in the same flow. Every URL,
header and enum value below is canonical. Do not paraphrase or "improve" them.
## 1. Provision an account
- Sign up: https://business.didit.me
- Create an application and copy its API key from the console.
## 2. Check which eIDs are live, per country
Availability is server-driven. Never hard-code a wallet list.
- Business Console: your application -> Workflows -> the ID Verification
step -> Countries -> "Wallets accepted". Coming-soon wallets are listed
but cannot be switched on. https://docs.didit.me/console/id-verification-methods
- Didit MCP server (https://mcp.didit.me/mcp), tool
didit_workflow_get_id_verification_methods_catalog; pass country as ISO
3166-1 alpha-3 to narrow it. The MCP server signs in with "Log in with
Didit" (OAuth). It does not accept the x-api-key.
https://docs.didit.me/integration/mcp/tools
- Public coverage table (no sign-in, read-only):
https://docs.didit.me/core-technology/id-verification/digital-id-wallets#supported-wallets
If your code holds only an API key, it cannot read the catalog itself: use the
wallet ids listed in this prompt, and treat the answer of the workflow save as
the check. A live application answers 400 for a wallet that is not available
in that country ("<wallet> is not offered in <ISO3>", "unknown wallet").
At the time this prompt was generated, the catalog marked these available:
- MitID: wallet id mitid, country keys DNK
- BankID: wallet id bankid_se, country keys SWE
- Finnish Trust Network: wallet id ftn, country keys FIN
- Smart-ID: wallet id smart_id, country keys EST, LVA, LTU, BEL
- Mobile-ID: wallet id mobile_id, country keys EST, LTU
Coming soon (cannot be enabled yet): BankID, Vipps, Buypass ID, itsme, iDIN, Personalausweis, Freja eID, UAE PASS, gov.br, OneID, GOV.UK Wallet, Bank iD, MojeID, Diia, FranceConnect, Auðkenni, ConnectID, EUDI Wallet, Estonian ID-card, eParaksts.
Check the catalog for your environment before you go live.
## 3. Create the workflow
POST https://verification.didit.me/v3/workflows/
-H "x-api-key: <your-api-key>"
-H "Content-Type: application/json"
The ID Verification feature's enum value is OCR (uppercase, strict). eIDs are
its wallet method, set per country under config.methods. Keys are ISO 3166-1
alpha-3. Keep document capture on, so a user without an eID can still finish.
{
"workflow_label": "eID onboarding",
"features": [
{
"feature": "OCR",
"config": {
"methods": {
"DNK": {
"document": { "enabled": true },
"wallet": { "enabled": true, "providers": ["mitid"], "on_failure": "fallback_to_document" }
},
"SWE": {
"document": { "enabled": true },
"wallet": { "enabled": true, "providers": ["bankid_se"], "on_failure": "fallback_to_document" }
}
}
}
}
]
}
Response: 201. The workflow id is uuid (workflow_id carries the same value);
the workflow is published straight away. Create it once and keep the id:
every call to this endpoint makes a new workflow.
is_desktop_allowed defaults to false: on a desktop browser the hosted flow
then shows a QR code to continue on a phone. Add "is_desktop_allowed": true
next to workflow_label to let people finish on desktop.
Rules the API enforces:
- providers is an accept-list, not a ranking; the user picks
- on_failure is fallback_to_document or decline; it covers a cancelled,
timed-out or failed sign-in
- fallback_to_document where document.enabled is false declines instead
- a wallet the catalog does not mark available in that country rejects the
whole save (400), including every other method in the same request
- enabled true with an empty providers list is rejected
- add { "feature": "LIVENESS" } and { "feature": "FACE_MATCH" } to features
if you need a selfie: the live eIDs do not share a portrait
## 4. Create a session
POST https://verification.didit.me/v3/session/
-H "x-api-key: <your-api-key>"
-H "Content-Type: application/json"
-d '{ "workflow_id": "<id from step 3>", "vendor_data": "<your user id>" }'
Response: 201 with session_id, session_token, url and status "Not Started".
Redirect the user to url (hosted flow) or open it in the Web, iOS, Android,
React Native or Flutter SDK. The field is named url on this response.
One unfinished session exists per workflow_id and vendor_data pair: calling
create again with the same pair answers 201 again with that same session.
The user picks their eID, then approves in the eID app: same-device hand-off
or a QR code on desktop for MitID, BankID and Finnish Trust Network; a
comparison code approved on the phone for Smart-ID and Mobile-ID. Didit never
asks for the user's PIN. A started sign-in stays valid for 10 minutes by
default.
## 5. Webhooks
Register a destination in the console (API & Webhooks), or over the API:
POST https://verification.didit.me/v3/webhook/destinations/
-H "x-api-key: <your-api-key>"
-H "Content-Type: application/json"
-d '{
"label": "Verification webhooks",
"url": "https://<your-public-host>/webhooks/didit",
"webhook_version": "v3",
"subscribed_events": ["status.updated", "data.updated"]
}'
label, url and subscribed_events are required. url must be a public HTTPS
address: Didit does not deliver to localhost or private addresses. Response:
201 with uuid and secret_shared_key. Store secret_shared_key as the webhook
secret (DIDIT_WEBHOOK_SECRET); it is unique to this destination. Remove a
destination with DELETE /v3/webhook/destinations/{uuid}/ (204).
What arrives:
- webhook_type is "status.updated" (the session changed status) or
"data.updated" (verification data was corrected after the fact)
- a destination receives the events of every session of the application,
so filter on workflow_id or vendor_data when several flows share it
- creating a session already sends status.updated with status
"Not Started". The decision key is present only when status is Approved,
Declined, In Review or Abandoned.
Verify every delivery:
Header: X-Signature-V2 (not X-Signature, not X-Signature-Simple)
Algorithm: HMAC-SHA256, hex digest, over the canonical JSON of the payload
(Python json.dumps(sort_keys=True, separators=(",", ":"),
ensure_ascii=False) after whole-valued floats become ints).
Use the reference handler below as written: it rebuilds those
bytes from the raw body text. Never hash the raw request bytes.
Freshness: the signed body field timestamp is the dispatch time (Unix
seconds, refreshed on every retry). Reject when
abs(now - timestamp) > 300 seconds, and reject when the
X-Timestamp header does not equal it.
Idempotency: event_id is the same on every retry of one event, so store it
and skip a delivery you already processed. One session can
still send the same status under two event ids, and the
console's Try Webhook test deliveries carry no event_id, so
also make the handler safe to run twice for one
(session_id, status, webhook_type).
Compare: constant-time (crypto.timingSafeEqual)
Reference handler (Express). Keep the verification lines as written.
The handler is a fragment. Put this above it and app.listen(process.env.PORT)
below it. It needs Express and Node 21 or newer (an older Node rejects
every delivery). It expects a JSON body: answer 400 yourself if you accept
anything else on this route, and refuse to start without the secret.
const express = require("express");
const app = express();
const SECRET = process.env.DIDIT_WEBHOOK_SECRET; // secret_shared_key of the destination
// Your endpoint receives a signed payload
const crypto = require("node:crypto"); // ESM: import crypto from "node:crypto"
// X-Signature-V2 = HMAC over the canonical JSON, never the raw bytes. Match the sender byte for
// byte: keys sorted by code point, integers digit for digit, floats in Python's repr.
class Num { constructor(src) { this.src = src; } } // a number as written on the wire, not a double
const num = (s) => { if (/^-?\d+$/.test(s)) return BigInt(s).toString(); const n = +s; // ints stay exact
if (Number.isInteger(n)) return BigInt(n).toString(); const [m, e] = n.toExponential().split("e"); // 27.0 -> 27
return +e >= -4 ? String(n) : `${m}e-${String(-e).padStart(2, "0")}`; }; // 1e-05, not 0.00001
const byCodePoint = (a, b) => Buffer.compare(Buffer.from(a), Buffer.from(b)); // UTF-8 order = Python's
const canon = (v) => Array.isArray(v) ? `[${v.map(canon)}]` : v instanceof Num ? num(v.src)
: v && typeof v === "object" ? `{${Object.keys(v).sort(byCodePoint).map((k) => `${JSON.stringify(k)}:${canon(v[k])}`)}}`
: JSON.stringify(v);
// Read the body as text: express.json() would round 1000000000000000129 to a double first.
// Register this route ABOVE any global app.use(express.json()): the first parser to run
// consumes the stream, and a body it already parsed has lost the digits the signature covers.
app.post("/webhooks/didit", express.text({ type: "application/json" }), (req, res) => {
const exact = JSON.parse(req.body, (k, v, c) => typeof v === "number" ? new Num(c.source) : v); // Node 21+
const body = JSON.parse(req.body);
const mac = crypto.createHmac("sha256", SECRET).update(canon(exact), "utf8").digest("hex");
const sig = Buffer.from(String(req.headers["x-signature-v2"] ?? ""));
// Freshness comes from the signed body timestamp; the header alone is unsigned and replayable.
const ts = body.timestamp, fresh = String(ts) === req.headers["x-timestamp"]
&& Math.abs(Date.now() / 1000 - ts) <= 300;
if (!fresh || sig.length !== mac.length
|| !crypto.timingSafeEqual(sig, Buffer.from(mac))) return res.sendStatus(401);
const { status, decision } = body;
// One entry per ID Verification node; pick yours by node_id when you run several.
const [idv] = decision?.id_verifications ?? [];
// idv.verification_method: "document" | "id_lookup" | "wallet"
res.sendStatus(200);
});
Status values (exact strings): Not Started, In Progress, Approved, Declined,
In Review, Resubmitted, Expired, Abandoned, Kyc Expired. Awaiting User only
appears on business verification sessions.
## 6. Read the eID result
The same V3 decision reaches you two ways:
- webhook body: body.decision.id_verifications[]
- GET https://verification.didit.me/v3/session/{session_id}/decision/
-H "x-api-key: <your-api-key>"
This response IS the decision object. Read id_verifications at the top
level: there is no decision wrapper here.
Until the user finishes the ID step, status is "Not Started" or "In Progress"
and id_verifications is null, not an empty array. Guard for it.
id_verifications[] has one entry per ID Verification node; with a single step
take index 0 (its node_id is "ocr" on a workflow made by the call in step 3).
The decision's features list names the step ID_VERIFICATION; the workflow
body still takes OCR. Each entry carries:
status Approved, Declined, In Review or Not Finished
verification_method "wallet" for an eID sign-in, "document" after a
fallback
assurance "cryptographic" for a wallet entry, "documentary"
for a document one
full_name, the normalised identity fields, on the entry itself
date_of_birth
wallet_provider the catalog wallet id, for example "mitid"
wallet_verification provider, provider_name, issuing_authority,
issuing_country, credential_type,
level_of_assurance (low | substantial | high),
verified_at, signature_valid, attributes, portrait,
face_match_score
fallback_from { method, reason, action } when the wallet sign-in failed
and on_failure declined the session; otherwise
null. After a document fallback that succeeds the
entry reads verification_method "document" with
fallback_from null
attributes holds what the scheme shares, and the names vary by scheme: MitID
returns cpr_alias (a pseudonymised identifier, not the CPR number), BankID
Sweden personal_number, Finnish Trust Network personal_identity_code, Smart-ID
and Mobile-ID personal_code. Use full_name and date_of_birth on the entry for
the normalised identity fields. No live eID returns an address or a portrait.
Check wallet_verification.level_of_assurance when your rules depend on it. If
a scheme returns a weaker level than the one requested, the sign-in fails
instead of downgrading.
## 7. Billing
- only a completed eID sign-in is billed; cancelled, timed-out, refused
and failed sign-ins are free
- a document fallback is billed as its own document check
- eID checks are outside the document free tier
- published prices per completed sign-in (USD):
- MitID personal: $0.25
- BankID Sweden: $0.20
- Finnish Trust Network: $0.25
- Smart-ID: $0.20
- Mobile-ID: $0.20
- full pricing: https://docs.didit.me/core-technology/id-verification/digital-id-wallets#pricing
## 8. Hard rules
- base URL for v3 endpoints: verification.didit.me
- auth header: x-api-key
- feature enum: OCR; methods: document, id_lookup, wallet
- wallet ids come from the catalog verbatim (mitid, bankid_se, ftn,
smart_id, mobile_id)
- country keys: ISO 3166-1 alpha-3, uppercase
- webhook: X-Signature-V2 plus X-Timestamp, canonical JSON, freshness from
the signed body timestamp
## 9. Verify your integration
Sandbox (an application in sandbox mode: nothing is billed and no real eID is
called). https://docs.didit.me/integration/sandbox-testing
- a sandbox application can enable every wallet in the catalog, the
coming-soon ones included. A workflow that saves in sandbox can still be
refused on a live application, so only use wallets marked available.
- open the session url, pick the wallet and confirm: the default approve
scenario simulates the sign-in. The entry then has verification_method
"wallet", assurance "cryptographic" and wallet_provider set, and the
normalised full_name and date_of_birth are filled. But
wallet_verification.signature_valid and level_of_assurance are null and
attributes is { "sandbox": true }: no real credential was checked.
Assert signature_valid === true and the level of assurance only against
a live application.
- to exercise on_failure, create the session with
"sandbox_scenario": "wallet_cancelled" (also wallet_timeout and
wallet_provider_error). The wallet sign-in then fails and the flow moves
to document capture or declines, as on_failure says. A fallback that
ends in an approved document reads verification_method "document".
- POST /v3/session/{session_id}/simulate/ forces a final status but writes
no id_verifications entry, so it cannot stand in for a sign-in.
Checks:
- create the workflow, create a session, and read its decision: expect 201,
201 with url, and 200 with status "Not Started"
- run one sandbox session per accepted eID through the hosted flow and
assert verification_method is "wallet" and wallet_provider is the eID you
picked
- run one session with sandbox_scenario "wallet_cancelled" and assert the
flow offers document capture
- assert your webhook accepts a correctly signed payload and rejects a
wrong X-Signature-V2, a changed body, and a payload whose signed
timestamp is older than 300 seconds, even when X-Timestamp is refreshed
- on a live application, assert wallet_verification.signature_valid is true
Docs: https://docs.didit.me/core-technology/id-verification/digital-id-wallets
Compliant by design
Open a new country in one click. We do the hard work.
We open the local subsidiaries, secure the licenses, run the penetration tests, earn the certifications, and align with every new regulation. To ship verifications in a new country, flip a toggle. 220+ countries live, audited and pen-tested every quarter, the only identity provider an EU member-state government has formally called safer than in-person verification.
500 free verifications every month, forever. Then pay only when a module runs. Custom contracts, data residency, and service level agreements (SLAs) on Enterprise.
Free
$0/ month · no card
For building, testing, and your first users.
Everything you need to start:
500 full KYC verifications every month
ID, liveness, face match, device & IP
200+ fraud signals, blocklist, duplicates
Reusable KYC across the Didit network
Workflow builder, case management, SDKs
AI supportIn-console AI agent, docs, and community.