curl --request POST \
--url https://verification.didit.me/v3/id-verification/wallets/idin/ \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Idempotency-Key: your-unique-attempt-key' \
--header 'Content-Type: application/json' \
--data '{
"country": "NLD",
"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_idin(
vendor_data="your-customer-reference",
metadata={"reference": "example"},
country="NLD",
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.startIdin({
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "NLD",
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.StartIdin(ctx, didit.IDWalletsStartIdinParams{
Body: didit.DigitalIDWalletAPIIdinWalletVerificationStartRequest{
VendorData: didit.String("your-customer-reference"),
Metadata: didit.Some(map[string]any{"reference": "example"}),
Country: didit.Some(didit.DigitalIDWalletAPIIdinWalletVerificationStartCountryEnum("NLD")),
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.DigitalIdWalletApiIdinWalletVerificationStartCountryEnum;
import me.didit.types.DigitalIdWalletApiIdinWalletVerificationStartRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.idWallets().startIdin(DigitalIdWalletApiIdinWalletVerificationStartRequest.builder()
.vendorData("your-customer-reference")
.metadata(Map.of("reference", "example"))
.country(DigitalIdWalletApiIdinWalletVerificationStartCountryEnum.of("NLD"))
.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->startIdin([
'vendor_data' => 'your-customer-reference',
'metadata' => ['reference' => 'example'],
'country' => 'NLD',
'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_idin(
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "NLD",
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.StartIdinAsync(new DigitalIdWalletApiIdinWalletVerificationStartRequest
{
VendorData = "your-customer-reference",
Metadata = new Dictionary<string, object> { ["reference"] = "example" },
Country = new DigitalIdWalletApiIdinWalletVerificationStartCountryEnum("NLD"),
ReturnUrl = "https://app.example.com/identity/complete",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "00000000-0000-4000-8000-000000000001",
"wallet_verification": {
"wallet": {
"id": "idin",
"name": "iDIN",
"issuing_authority": "Dutch banks (Currence iDIN)"
},
"country": "NLD",
"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>"
}iDINフル本人確認 認証API
DiditのAPIで、iDINフル本人確認による本人確認を自社アプリケーションに連携できます。対応国、認証ステップ、結果、料金を確認できます。
curl --request POST \
--url https://verification.didit.me/v3/id-verification/wallets/idin/ \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Idempotency-Key: your-unique-attempt-key' \
--header 'Content-Type: application/json' \
--data '{
"country": "NLD",
"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_idin(
vendor_data="your-customer-reference",
metadata={"reference": "example"},
country="NLD",
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.startIdin({
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "NLD",
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.StartIdin(ctx, didit.IDWalletsStartIdinParams{
Body: didit.DigitalIDWalletAPIIdinWalletVerificationStartRequest{
VendorData: didit.String("your-customer-reference"),
Metadata: didit.Some(map[string]any{"reference": "example"}),
Country: didit.Some(didit.DigitalIDWalletAPIIdinWalletVerificationStartCountryEnum("NLD")),
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.DigitalIdWalletApiIdinWalletVerificationStartCountryEnum;
import me.didit.types.DigitalIdWalletApiIdinWalletVerificationStartRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.idWallets().startIdin(DigitalIdWalletApiIdinWalletVerificationStartRequest.builder()
.vendorData("your-customer-reference")
.metadata(Map.of("reference", "example"))
.country(DigitalIdWalletApiIdinWalletVerificationStartCountryEnum.of("NLD"))
.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->startIdin([
'vendor_data' => 'your-customer-reference',
'metadata' => ['reference' => 'example'],
'country' => 'NLD',
'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_idin(
vendor_data: "your-customer-reference",
metadata: { reference: "example" },
country: "NLD",
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.StartIdinAsync(new DigitalIdWalletApiIdinWalletVerificationStartRequest
{
VendorData = "your-customer-reference",
Metadata = new Dictionary<string, object> { ["reference"] = "example" },
Country = new DigitalIdWalletApiIdinWalletVerificationStartCountryEnum("NLD"),
ReturnUrl = "https://app.example.com/identity/complete",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "00000000-0000-4000-8000-000000000001",
"wallet_verification": {
"wallet": {
"id": "idin",
"name": "iDIN",
"issuing_authority": "Dutch banks (Currence iDIN)"
},
"country": "NLD",
"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は必要ありません。
開始レスポンスは次に行う認証アクションを示すものであり、承認済みの本人確認結果ではありません。
対応範囲と有効化
| 項目 | 値 |
|---|---|
| ウォレット | iDINフル本人確認 |
| ウォレットID | idin |
| 対象国 | |
| 本番環境でのウォレット有効化 | ✅ 利用可能 |
| 公開されているウォレット料金 | 完了した認証1件あたり$0.95 |
本人が行う操作
本人は参加しているオランダの銀行を選択し、iDINを通じて本人情報を共有することを承認します。 Diditは、法律上の姓、イニシャル、生年月日を含む本人確認情報一式をリクエストします。 銀行の認証情報や認証コードは銀行側にとどまり、お客様のAPIに送信されることはありません。 iDINは名をフルスペルではなくイニシャルで返す場合があります。イニシャルを検証済みの名として扱わないでください。結果の受け取り
デジタルIDウォレットAPIガイドに従って、検証の追跡と結果の取得を行ってください。 ウォレットが本人を認証したことの証明として扱えるのは、完了し検証済みとなった結果のみです。 返される本人属性はウォレットによって異なります。住所、顔写真、またはリクエストしたすべての属性が含まれていると想定しないでください。関連情報
承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ヘッダー
任意の再試行安全キーです(最大255文字)。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。
ボディ
iDINによる認証を開始します(NLD)。
ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションの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/で確認できます。
1iDIN IDの国を示すISO 3166-1 alpha-3コード。デフォルトはNLDで、iDINが対応する唯一の国です。
NLD- NLD
NLD ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合(例:BankIDのQRコード)はcross_device。
same_device- same_devicecross_device- cross_device
same_device, cross_device