curl --request POST \
--url https://verification.didit.me/v3/id-verification/wallets/mobile-id/ \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Idempotency-Key: your-unique-attempt-key' \
--header 'Content-Type: application/json' \
--data '{
"country": "EST",
"vendor_data": "your-customer-reference",
"metadata": {
"reference": "example"
},
"personal_code": "00000000000",
"phone_number": "+37200000000"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.id_wallets.start_mobile_id(
vendor_data="your-customer-reference",
metadata={"reference": "example"},
country="EST",
personal_code="00000000000",
phone_number="+37200000000",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.idWallets.startMobileId({
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "EST",
personal_code: "00000000000",
phone_number: "+37200000000",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.IDWallets.StartMobileID(ctx, didit.IDWalletsStartMobileIDParams{
Body: didit.DigitalIDWalletAPIMobileIDWalletVerificationStartRequest{
VendorData: didit.String("your-customer-reference"),
Metadata: didit.Some(map[string]any{"reference": "example"}),
Country: didit.DigitalIDWalletAPIMobileIDWalletVerificationStartCountryEnum("EST"),
PersonalCode: "00000000000",
PhoneNumber: "+37200000000",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.Map;
import me.didit.Didit;
import me.didit.types.DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum;
import me.didit.types.DigitalIdWalletApiMobileIdWalletVerificationStartRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.idWallets().startMobileId(DigitalIdWalletApiMobileIdWalletVerificationStartRequest.builder()
.vendorData("your-customer-reference")
.metadata(Map.of("reference", "example"))
.country(DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum.of("EST"))
.personalCode("00000000000")
.phoneNumber("+37200000000")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->idWallets->startMobileId([
'vendor_data' => 'your-customer-reference',
'metadata' => ['reference' => 'example'],
'country' => 'EST',
'personal_code' => '00000000000',
'phone_number' => '+37200000000',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.id_wallets.start_mobile_id(
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "EST",
personal_code: "00000000000",
phone_number: "+37200000000"
)
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.StartMobileIdAsync(new DigitalIdWalletApiMobileIdWalletVerificationStartRequest
{
VendorData = "your-customer-reference",
Metadata = new Dictionary<string, object> { ["reference"] = "example" },
Country = "EST",
PersonalCode = "00000000000",
PhoneNumber = "+37200000000",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "00000000-0000-4000-8000-000000000001",
"wallet_verification": {
"wallet": {
"id": "mobile_id",
"name": "Mobile-ID",
"issuing_authority": "SK ID Solutions with the national mobile operators"
},
"country": "EST",
"status": "Not Finished",
"outcome": "pending",
"error": null,
"interaction": "in_app",
"simulated": true,
"expires_at": "2026-01-01T10:10:00Z",
"next_action": {
"type": "confirm_in_app",
"verification_code": "1234",
"poll_interval_seconds": 2
},
"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>"
}Mobile-ID 身份验证 API
使用 Didit Mobile-ID 身份验证 API,将身份验证集成到您的应用中,并查看国家覆盖范围、认证步骤、结果与定价。
curl --request POST \
--url https://verification.didit.me/v3/id-verification/wallets/mobile-id/ \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Idempotency-Key: your-unique-attempt-key' \
--header 'Content-Type: application/json' \
--data '{
"country": "EST",
"vendor_data": "your-customer-reference",
"metadata": {
"reference": "example"
},
"personal_code": "00000000000",
"phone_number": "+37200000000"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.id_wallets.start_mobile_id(
vendor_data="your-customer-reference",
metadata={"reference": "example"},
country="EST",
personal_code="00000000000",
phone_number="+37200000000",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.idWallets.startMobileId({
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "EST",
personal_code: "00000000000",
phone_number: "+37200000000",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.IDWallets.StartMobileID(ctx, didit.IDWalletsStartMobileIDParams{
Body: didit.DigitalIDWalletAPIMobileIDWalletVerificationStartRequest{
VendorData: didit.String("your-customer-reference"),
Metadata: didit.Some(map[string]any{"reference": "example"}),
Country: didit.DigitalIDWalletAPIMobileIDWalletVerificationStartCountryEnum("EST"),
PersonalCode: "00000000000",
PhoneNumber: "+37200000000",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.Map;
import me.didit.Didit;
import me.didit.types.DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum;
import me.didit.types.DigitalIdWalletApiMobileIdWalletVerificationStartRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.idWallets().startMobileId(DigitalIdWalletApiMobileIdWalletVerificationStartRequest.builder()
.vendorData("your-customer-reference")
.metadata(Map.of("reference", "example"))
.country(DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum.of("EST"))
.personalCode("00000000000")
.phoneNumber("+37200000000")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->idWallets->startMobileId([
'vendor_data' => 'your-customer-reference',
'metadata' => ['reference' => 'example'],
'country' => 'EST',
'personal_code' => '00000000000',
'phone_number' => '+37200000000',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.id_wallets.start_mobile_id(
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "EST",
personal_code: "00000000000",
phone_number: "+37200000000"
)
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.StartMobileIdAsync(new DigitalIdWalletApiMobileIdWalletVerificationStartRequest
{
VendorData = "your-customer-reference",
Metadata = new Dictionary<string, object> { ["reference"] = "example" },
Country = "EST",
PersonalCode = "00000000000",
PhoneNumber = "+37200000000",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "00000000-0000-4000-8000-000000000001",
"wallet_verification": {
"wallet": {
"id": "mobile_id",
"name": "Mobile-ID",
"issuing_authority": "SK ID Solutions with the national mobile operators"
},
"country": "EST",
"status": "Not Finished",
"outcome": "pending",
"error": null,
"interaction": "in_app",
"simulated": true,
"expires_at": "2026-01-01T10:10:00Z",
"next_action": {
"type": "confirm_in_app",
"verification_code": "1234",
"poll_interval_seconds": 2
},
"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。
启动响应描述的是下一步认证操作,并不是已通过的身份结果。
覆盖范围与激活
| 属性 | 值 |
|---|---|
| 钱包 | Mobile-ID |
| 钱包 ID | mobile_id |
| 国家/地区 | |
| 生产环境钱包激活 | ✅ 可用 |
| 公布的钱包价格 | 每次完成验证收费 $0.21 |
用户需要完成的操作
在您的应用中显示比对码,并等待用户在手机上批准。 用户在手机上输入 PIN 码,切勿在您的应用或 API 请求中输入。 请求示例中全为零的标识符仅用于 Didit 沙盒模拟;进行实际认证时,请使用用户注册的信息。接收结果
请按照数字身份钱包 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。
请求体
启动 Mobile-ID 验证(EST、LTU)。
Mobile-ID 身份的 ISO 3166-1 alpha-3 国家/地区。
EST- ESTLTU- LTU
EST, LTU 用户的国家个人身份识别码。它用于寻址用户的 Mobile-ID 应用;用户在应用中确认比对码并输入其 PIN。切勿收集该 PIN。
1^[0-9-]{6,20}$采用 E.164 格式(+372... 或 +370...)的 Mobile-ID 电话号码。
1 - 16您为此验证指定的自身参考编号(例如您的用户 ID)。在结果和 Webhook 中返回。
与验证一同存储并在结果和 Webhook 中返回的可选 JSON 对象。
Show child attributes
Show child attributes
仅限沙盒应用:模拟结果,可为 'wallet_cancelled'、'wallet_timeout' 或 'wallet_provider_error';任何其他场景(或无场景)均通过验证。在生产环境应用上会被拒绝。完整目录可在 GET /v1/sandbox/scenarios/ 获取。
1