curl --request POST \
--url https://verification.didit.me/v3/id-verification/wallets/eudi/ \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Idempotency-Key: your-unique-attempt-key' \
--header 'Content-Type: application/json' \
--data '{
"country": "AUT",
"vendor_data": "your-customer-reference",
"metadata": {
"reference": "example"
},
"return_url": "https://app.example.com/identity/complete"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.id_wallets.start_eudi(
vendor_data="your-customer-reference",
metadata={"reference": "example"},
country="AUT",
return_url="https://app.example.com/identity/complete",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.idWallets.startEudi({
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "AUT",
return_url: "https://app.example.com/identity/complete",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.IDWallets.StartEudi(ctx, didit.IDWalletsStartEudiParams{
Body: didit.DigitalIDWalletAPIEudiWalletVerificationStartRequest{
VendorData: didit.String("your-customer-reference"),
Metadata: didit.Some(map[string]any{"reference": "example"}),
Country: didit.DigitalIDWalletAPIEudiWalletVerificationStartCountryEnum("AUT"),
ReturnURL: "https://app.example.com/identity/complete",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.Map;
import me.didit.Didit;
import me.didit.types.DigitalIdWalletApiEudiWalletVerificationStartCountryEnum;
import me.didit.types.DigitalIdWalletApiEudiWalletVerificationStartRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.idWallets().startEudi(DigitalIdWalletApiEudiWalletVerificationStartRequest.builder()
.vendorData("your-customer-reference")
.metadata(Map.of("reference", "example"))
.country(DigitalIdWalletApiEudiWalletVerificationStartCountryEnum.of("AUT"))
.returnUrl("https://app.example.com/identity/complete")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->idWallets->startEudi([
'vendor_data' => 'your-customer-reference',
'metadata' => ['reference' => 'example'],
'country' => 'AUT',
'return_url' => 'https://app.example.com/identity/complete',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.id_wallets.start_eudi(
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "AUT",
return_url: "https://app.example.com/identity/complete"
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.IdWallets.StartEudiAsync(new DigitalIdWalletApiEudiWalletVerificationStartRequest
{
VendorData = "your-customer-reference",
Metadata = new Dictionary<string, object> { ["reference"] = "example" },
Country = "AUT",
ReturnUrl = "https://app.example.com/identity/complete",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "00000000-0000-4000-8000-000000000001",
"wallet_verification": {
"wallet": {
"id": "eudi",
"name": "EUDI Wallet",
"issuing_authority": "The user's own member state; the issuer differs per country"
},
"country": "AUT",
"status": "Not Finished",
"outcome": "pending",
"error": null,
"interaction": "redirect",
"simulated": false,
"expires_at": "2026-01-01T10:10:00Z",
"next_action": {
"type": "redirect",
"url": "https://wallet.example.com/authorize"
},
"identity": null,
"attributes": null,
"level_of_assurance": null,
"verified_at": null,
"signature_valid": null,
"credential_type": "person_identification"
},
"vendor_data": "your-customer-reference",
"metadata": {
"reference": "example"
},
"created_at": "2026-01-01T10:00:00Z"
}{
"error": "<string>",
"detail": "<string>"
}{
"detail": "Forbidden - User doesn't have permission"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}EUDI 钱包验证 API
借助 Didit 将 EUDI 钱包身份验证集成到您自己的应用中。查看国家/地区覆盖范围、认证步骤、结果和定价。
curl --request POST \
--url https://verification.didit.me/v3/id-verification/wallets/eudi/ \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Idempotency-Key: your-unique-attempt-key' \
--header 'Content-Type: application/json' \
--data '{
"country": "AUT",
"vendor_data": "your-customer-reference",
"metadata": {
"reference": "example"
},
"return_url": "https://app.example.com/identity/complete"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.id_wallets.start_eudi(
vendor_data="your-customer-reference",
metadata={"reference": "example"},
country="AUT",
return_url="https://app.example.com/identity/complete",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.idWallets.startEudi({
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "AUT",
return_url: "https://app.example.com/identity/complete",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.IDWallets.StartEudi(ctx, didit.IDWalletsStartEudiParams{
Body: didit.DigitalIDWalletAPIEudiWalletVerificationStartRequest{
VendorData: didit.String("your-customer-reference"),
Metadata: didit.Some(map[string]any{"reference": "example"}),
Country: didit.DigitalIDWalletAPIEudiWalletVerificationStartCountryEnum("AUT"),
ReturnURL: "https://app.example.com/identity/complete",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.Map;
import me.didit.Didit;
import me.didit.types.DigitalIdWalletApiEudiWalletVerificationStartCountryEnum;
import me.didit.types.DigitalIdWalletApiEudiWalletVerificationStartRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.idWallets().startEudi(DigitalIdWalletApiEudiWalletVerificationStartRequest.builder()
.vendorData("your-customer-reference")
.metadata(Map.of("reference", "example"))
.country(DigitalIdWalletApiEudiWalletVerificationStartCountryEnum.of("AUT"))
.returnUrl("https://app.example.com/identity/complete")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->idWallets->startEudi([
'vendor_data' => 'your-customer-reference',
'metadata' => ['reference' => 'example'],
'country' => 'AUT',
'return_url' => 'https://app.example.com/identity/complete',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.id_wallets.start_eudi(
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "AUT",
return_url: "https://app.example.com/identity/complete"
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.IdWallets.StartEudiAsync(new DigitalIdWalletApiEudiWalletVerificationStartRequest
{
VendorData = "your-customer-reference",
Metadata = new Dictionary<string, object> { ["reference"] = "example" },
Country = "AUT",
ReturnUrl = "https://app.example.com/identity/complete",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "00000000-0000-4000-8000-000000000001",
"wallet_verification": {
"wallet": {
"id": "eudi",
"name": "EUDI Wallet",
"issuing_authority": "The user's own member state; the issuer differs per country"
},
"country": "AUT",
"status": "Not Finished",
"outcome": "pending",
"error": null,
"interaction": "redirect",
"simulated": false,
"expires_at": "2026-01-01T10:10:00Z",
"next_action": {
"type": "redirect",
"url": "https://wallet.example.com/authorize"
},
"identity": null,
"attributes": null,
"level_of_assurance": null,
"verified_at": null,
"signature_valid": null,
"credential_type": "person_identification"
},
"vendor_data": "your-customer-reference",
"metadata": {
"reference": "example"
},
"created_at": "2026-01-01T10:00:00Z"
}{
"error": "<string>",
"detail": "<string>"
}{
"detail": "Forbidden - User doesn't have permission"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}workflow_id。
开始请求的响应描述的是下一步身份认证操作,并不是已通过的身份认证结果。
覆盖范围与激活
| 属性 | 值 |
|---|---|
| 钱包 | EUDI Wallet |
| 钱包 ID | eudi |
| 国家/地区 | |
| 生产环境钱包激活 | ⏳ 即将推出 |
| 已发布的钱包价格 | 即将推出 |
用户需要做什么
按照启动请求返回的下一步操作执行。 钱包的认证体验决定用户使用浏览器、其他设备还是应用。接收结果
请参阅数字身份钱包 API 指南,以跟踪验证进度并获取其结果。 只有已完成且已验证的结果,才能作为钱包已完成对用户身份认证的证明。 返回的身份属性因钱包而异;请勿假设一定会返回地址、肖像或所有所请求的属性。相关内容
授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求头
可选的重试安全密钥(最多 255 个字符)。使用相同的密钥、钱包和请求体进行重试将返回原始验证结果,而不会发起第二次登录;若将相同密钥用于其他钱包或请求体,则返回 409 idempotency_key_reused。
请求体
发起 EUDI Wallet 验证(AUT, BEL, BGR, HRV, CYP, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, IRL, ITA, LVA, LTU, LUX, MLT, NLD, POL, PRT, ROU, SVK, SVN, ESP, SWE, ISL, LIE, NOR)。
EUDI Wallet 身份的 ISO 3166-1 alpha-3 国家/地区代码。
AUT- AUTBEL- BELBGR- BGRHRV- HRVCYP- CYPCZE- CZEDNK- DNKEST- ESTFIN- FINFRA- FRADEU- DEUGRC- GRCHUN- HUNIRL- IRLITA- ITALVA- LVALTU- LTULUX- LUXMLT- MLTNLD- NLDPOL- POLPRT- PRTROU- ROUSVK- SVKSVN- SVNESP- ESPSWE- SWEISL- ISLLIE- LIENOR- NOR
AUT, BEL, BGR, HRV, CYP, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, IRL, ITA, LVA, LTU, LUX, MLT, NLD, POL, PRT, ROU, SVK, SVN, ESP, SWE, ISL, LIE, NOR 用户浏览器在钱包操作后返回的 https URL,末尾会附加 request_id 和 result。其 host 必须在应用的 allowed_return_hosts 中注册(或为其白标域名)。切勿仅信任 result:请通过 GET .../verifications/{request_id}/ 或 Webhook 读取最终结果。
1 - 2048您为此验证指定的自身参考编号(例如您的用户 ID)。在结果和 Webhook 中返回。
与验证一同存储并在结果和 Webhook 中返回的可选 JSON 对象。
Show child attributes
Show child attributes
仅限沙盒应用:模拟结果,可为 'wallet_cancelled'、'wallet_timeout' 或 'wallet_provider_error';任何其他场景(或无场景)均通过验证。在生产环境应用上会被拒绝。完整目录可在 GET /v1/sandbox/scenarios/ 获取。
1用户在显示您页面的设备上登录时为 same_device,使用另一台设备(例如 BankID 二维码)时为 cross_device。
same_device- same_devicecross_device- cross_device
same_device, cross_device