{
  "openapi": "3.0.0",
  "info": {
    "version": "3.0.0",
    "title": "Didit Verification API",
    "description": "本人確認API。x-api-keyヘッダーで認証します。"
  },
  "servers": [
    {
      "url": "https://verification.didit.me"
    }
  ],
  "tags": [],
  "paths": {
    "/system/healthcheck": {
      "get": {
        "summary": "サービスのヘルスチェック(公開、認証不要)",
        "description": "認証不要で公開されているライブネスプローブです。サービス、DB、キャッシュ、ブローカーがすべて正常な場合、`{status: \"ok\", timestamp}`とともに`HTTP 200`を返します。",
        "operationId": "get_system_healthcheck",
        "x-didit-sdk": {
          "resource": "system",
          "method": "healthcheck",
          "auth": "public",
          "server": false
        },
        "tags": [
          "System"
        ],
        "security": [
          {}
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "サービスは正常で、リクエストを受け付けています。ボディは常に`{\"status\": \"ok\", \"timestamp\": \"<iso8601>\"}`です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "status",
                    "timestamp"
                  ],
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "ok"
                      ],
                      "description": "死活確認用のマーカーです。200レスポンスでは常にリテラル文字列`\"ok\"`になります。",
                      "example": "ok"
                    },
                    "timestamp": {
                      "type": "string",
                      "format": "date-time",
                      "description": "ヘルスチェックが評価されたサーバー時刻です。ミリ秒精度で`Z`(UTC)サフィックス付きのISO 8601形式で表されます。",
                      "example": "2026-04-21T16:42:50.445Z"
                    }
                  }
                },
                "examples": {
                  "Healthy": {
                    "summary": "サービスは稼働中です",
                    "value": {
                      "status": "ok",
                      "timestamp": "2026-04-21T16:42:50.445Z"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "サービスが正常ではありません。設定されたヘルスチェックプラグイン（データベース、キャッシュ、ブローカー）のいずれかが失敗しています。レスポンスボディは意図的に最小限にしており、判断材料となるのはHTTPステータスです。指数バックオフで再試行してください。"
          },
          "5XX": {
            "description": "認証サービスの性能が低下しているか、到達できません。2xx以外のレスポンスはすべて「unhealthy」として扱い、指数バックオフで再試行してください。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -i https://verification.didit.me/system/healthcheck"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nresp = requests.get(\"https://verification.didit.me/system/healthcheck\", timeout=5)\nresp.raise_for_status()\nprint(resp.json())  # {'status': 'ok', 'timestamp': '2026-04-21T16:42:50.445Z'}"
          },
          {
            "lang": "JavaScript",
            "label": "Node.js (fetch)",
            "source": "const res = await fetch(\"https://verification.didit.me/system/healthcheck\");\nif (!res.ok) throw new Error(`Didit unhealthy: ${res.status}`);\nconst body = await res.json();\nconsole.log(body); // { status: 'ok', timestamp: '2026-04-21T16:42:50.445Z' }"
          }
        ]
      }
    },
    "/v3/email/risk/": {
      "post": {
        "summary": "メールアドレスのリスクをスコアリングする",
        "description": "OTPを送信せずに、到達可能性、使い捨てアドレス、情報漏えい、セッション横断の一致、正規化されたリスクインテリジェンスのシグナルを返します。このエンドポイントはAPIセッションを作成し、そのIDを`request_id`として返します。\n\n**判定。** 最上位の`status`は`email.status`と同じ値になります。通常は`Approved`ですが、リスク評価によって`In Review`または`Declined`になる場合があります。\n\n**互換性のためのエイリアス。** 本番環境のレスポンスでは、正規化されたインテリジェンスオブジェクトが`email.email_intelligence`と`email.enrichment`の両方で公開されます。値は同一です。新規の連携では`email.enrichment`を読み取ることができます。利用可能なインテリジェンスデータが返されなかった場合、どちらのキーも存在しません。\n\n**請求。** 本番環境での呼び出しにはEmail Risk APIの料金が適用されます。一部のベストエフォートのフィールドが取得できない場合でも、照会が開始された時点でリクエストは課金対象になります。\n\n**サンドボックス。** サンドボックスのキーはリクエストを検証し、メールの送信、クレジットの消費、セッションの作成、Networksへの寄与を行わずに、決定論的な承認済みデータを返します。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`で送信してください。認証情報がない場合や無効な場合は`403`が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに1分あたり300リクエストです。\n\n**ソーシャルフットプリント。** `enable_social`を`true`に設定すると、`email_social`ブロックが追加されます。このブロックには、このアドレスが登録されているオンラインプラットフォーム、カテゴリーごとの件数、取得可能なプロフィール詳細が含まれます。`profiles_registered: 0`は、プラットフォームを確認した結果、どのプラットフォームでもこのアドレスが見つからなかったことを意味し、有効かつ課金対象の回答です。アドオンがリクエストされなかった場合やチェックを完了できなかった場合、このブロックは存在せず、その場合は課金されません。請求では、このエンドポイント自体の料金に加えて、リクエストごとに`email_social`が1単位加算されます。",
        "operationId": "post_v3email_risk",
        "x-didit-sdk": {
          "resource": "email",
          "method": "assess_risk",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/email/risk/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"alice@example.com\",\n    \"country_code\": \"US\",\n    \"vendor_data\": \"lead-123\",\n    \"metadata\": {\"source\": \"signup_prescreen\"}\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.email.assess_risk(\n    email=\"alice@example.com\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.email.assessRisk({\n  email: \"alice@example.com\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Email.AssessRisk(ctx, didit.EmailRiskRequest{\n\tEmail: \"alice@example.com\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.EmailRiskRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.email().assessRisk(EmailRiskRequest.builder()\n        .email(\"alice@example.com\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->email->assessRisk([\n    'email' => 'alice@example.com',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.email.assess_risk(email: \"alice@example.com\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Email.AssessRiskAsync(new EmailRiskRequest\n{\n    Email = \"alice@example.com\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailRiskRequest"
              },
              "examples": {
                "Minimal": {
                  "summary": "デフォルト設定で住所をスコアリング",
                  "value": {
                    "email": "alice@example.com"
                  }
                },
                "Full context": {
                  "summary": "シグナル、国のヒント、相関IDを指定してスコアリング",
                  "value": {
                    "email": "alice@example.com",
                    "country_code": "US",
                    "signals": {
                      "ip": "192.0.2.1",
                      "device_id": "8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2",
                      "device_platform": "web",
                      "os_version": "14.4",
                      "app_version": "1.2.34",
                      "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15"
                    },
                    "vendor_data": "lead-123",
                    "metadata": {
                      "source": "signup_prescreen"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "リスク評価が完了しました。判定は`status`で確認してください。完了したルックアップでは、HTTPは常に`200`です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailRiskResponse"
                },
                "examples": {
                  "Clean address": {
                    "summary": "データ侵害での露出がない配信可能なアドレス",
                    "value": {
                      "request_id": "82397be9-5921-4970-a979-2d5b43e08b33",
                      "status": "Approved",
                      "email": {
                        "status": "Approved",
                        "email": "alice@example.com",
                        "is_breached": false,
                        "breaches": [],
                        "is_disposable": false,
                        "is_undeliverable": false,
                        "verification_attempts": 0,
                        "verified_at": null,
                        "warnings": [],
                        "lifecycle": [],
                        "matches": [],
                        "email_intelligence": {
                          "score": 4.0,
                          "deliverable": "high",
                          "breach_risk_level": "Low",
                          "breach_risk_index": 4,
                          "is_recent_breach": false,
                          "is_frequent_breached": false,
                          "is_disposable": false,
                          "is_free_domain": false,
                          "is_breached": false,
                          "no_of_breaches": 0,
                          "reason_codes": []
                        },
                        "enrichment": {
                          "score": 4.0,
                          "deliverable": "high",
                          "breach_risk_level": "Low",
                          "breach_risk_index": 4,
                          "is_recent_breach": false,
                          "is_frequent_breached": false,
                          "is_disposable": false,
                          "is_free_domain": false,
                          "is_breached": false,
                          "no_of_breaches": 0,
                          "reason_codes": []
                        }
                      },
                      "vendor_data": "lead-123",
                      "metadata": {
                        "source": "signup_prescreen"
                      },
                      "created_at": "2026-09-01T10:30:00.123456+00:00"
                    }
                  },
                  "Breached address": {
                    "summary": "アドレスが既知の情報漏えいで見つかりました",
                    "value": {
                      "request_id": "d1e5c2a8-6f30-4c1a-8b2d-3e4f5a6b7c8d",
                      "status": "In Review",
                      "email": {
                        "status": "In Review",
                        "email": "bob@example.org",
                        "is_breached": true,
                        "breaches": [
                          {
                            "name": "ExampleBreach2023",
                            "domain": "example.org",
                            "breach_date": "2023-06-01",
                            "breach_emails_count": 1200000,
                            "description": "A data breach affecting example.org accounts.",
                            "logo_path": "https://logos.example.org/example.png",
                            "data_classes": [
                              "email_addresses",
                              "passwords"
                            ],
                            "is_verified": true
                          }
                        ],
                        "is_disposable": false,
                        "is_undeliverable": false,
                        "verification_attempts": 0,
                        "verified_at": null,
                        "warnings": [],
                        "lifecycle": [],
                        "matches": [],
                        "email_intelligence": {
                          "score": 58.0,
                          "deliverable": "high",
                          "breach_risk_level": "High",
                          "breach_risk_index": 72,
                          "is_recent_breach": true,
                          "is_frequent_breached": true,
                          "is_disposable": false,
                          "is_free_domain": true,
                          "is_breached": true,
                          "no_of_breaches": 4,
                          "reason_codes": [
                            {
                              "code": "IR-F784B630",
                              "direction": "risk",
                              "message": "Email's digital footprint diversity is Very Low",
                              "impact_level": "low"
                            }
                          ]
                        },
                        "enrichment": {
                          "score": 58.0,
                          "deliverable": "high",
                          "breach_risk_level": "High",
                          "breach_risk_index": 72,
                          "is_recent_breach": true,
                          "is_frequent_breached": true,
                          "is_disposable": false,
                          "is_free_domain": true,
                          "is_breached": true,
                          "no_of_breaches": 4,
                          "reason_codes": [
                            {
                              "code": "IR-F784B630",
                              "direction": "risk",
                              "message": "Email's digital footprint diversity is Very Low",
                              "impact_level": "low"
                            }
                          ]
                        }
                      },
                      "vendor_data": "lead-125",
                      "metadata": null,
                      "created_at": "2026-09-01T10:30:00.123456+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/EmailRiskValidationError"
          },
          "403": {
            "$ref": "#/components/responses/RiskPermissionDenied"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/ip/risk/": {
      "post": {
        "summary": "IPアドレスのリスクをスコアリングする",
        "description": "指定されたIPアドレスについて、位置情報、ネットワークの所有構造、VPN/Torおよびデータセンターのフラグ、脅威データ、`country_mismatch`を返します。このエンドポイントはAPIセッションを作成し、そのIDを`request_id`として返します。\n\n**判定。** 特定された国が`claimed_country`と矛盾する場合、またはアドレスがVPN、Tor、データセンターのインフラに関連付けられている場合、`status`は`In Review`になります。それ以外の場合は`Approved`です。\n\n**ベストエフォート。** IPのエンリッチメントはベストエフォートで行われます。どのエンリッチメントソースからも利用可能なデータが返されなかった場合、このエンドポイントは`ip.ip_address: null`、`ip.country_mismatch: null`、空の`ip.threat`オブジェクトを含む承認済みのレスポンスを返します。\n\n**請求。** 本番環境での呼び出しにはIP Risk APIの料金が適用されます。照会が開始された時点でリクエストは課金対象になります。\n\n**サンドボックス。** サンドボックスのキーはリクエストを検証し、クレジットの消費、セッションの作成、Networksへの寄与を行わずに、決定論的な承認済みデータを返します。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`で送信してください。認証情報がない場合や無効な場合は`403`が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに1分あたり300リクエストです。",
        "operationId": "post_v3ip_risk",
        "x-didit-sdk": {
          "resource": "ip",
          "method": "assess_risk",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/ip/risk/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"ip_address\": \"8.8.8.8\",\n    \"claimed_country\": \"ESP\",\n    \"user_agent\": \"Mozilla/5.0\",\n    \"vendor_data\": \"lead-123\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.ip.assess_risk(\n    ip_address=\"8.8.8.8\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.ip.assessRisk({\n  ip_address: \"8.8.8.8\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IP.AssessRisk(ctx, didit.IPRiskRequest{\n\tIPAddress: \"8.8.8.8\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.IPRiskRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.ip().assessRisk(IPRiskRequest.builder()\n        .ipAddress(\"8.8.8.8\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->ip->assessRisk([\n    'ip_address' => '8.8.8.8',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.ip.assess_risk(ip_address: \"8.8.8.8\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Ip.AssessRiskAsync(new IPRiskRequest\n{\n    IpAddress = \"8.8.8.8\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPRiskRequest"
              },
              "examples": {
                "Minimal": {
                  "summary": "デフォルト設定で住所をスコアリング",
                  "value": {
                    "ip_address": "8.8.8.8"
                  }
                },
                "With claimed country": {
                  "summary": "不一致検出のために申告された国を指定してスコアリング",
                  "value": {
                    "ip_address": "8.8.8.8",
                    "claimed_country": "ESP",
                    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
                    "vendor_data": "lead-123"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "リスク評価が完了しました。判定は`status`で確認してください。完了したルックアップでは、HTTPは常に`200`です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPRiskResponse"
                },
                "examples": {
                  "Clean residential IP": {
                    "summary": "居住住所、申告された国が一致",
                    "value": {
                      "request_id": "9a96ed2a-721e-4b86-8cbf-d61eda529279",
                      "status": "Approved",
                      "ip": {
                        "status": "Approved",
                        "ip_address": "192.0.2.10",
                        "ip_country": "Spain",
                        "ip_country_code": "ES",
                        "ip_state": "Madrid",
                        "ip_city": "Madrid",
                        "latitude": 40.4168,
                        "longitude": -3.7038,
                        "isp": "Example Telecom",
                        "organization": "Example Telecom SA",
                        "is_vpn_or_tor": false,
                        "is_data_center": false,
                        "time_zone": "Europe/Madrid",
                        "time_zone_offset": "+0200",
                        "asn_number": 3352,
                        "asn_organization": "EXAMPLE-TELECOM",
                        "connection_type": "broadband",
                        "carrier": "Example Telecom",
                        "proxy_type": null,
                        "claimed_country": "ESP",
                        "country_mismatch": false,
                        "threat": {}
                      },
                      "vendor_data": "lead-123",
                      "metadata": null,
                      "created_at": "2026-09-01T10:30:00.123456+00:00"
                    }
                  },
                  "Datacenter mismatch": {
                    "summary": "申告された国と矛盾するデータセンターの住所",
                    "value": {
                      "request_id": "5b1d4e9a-3c7b-4f8e-9a2d-1b0c9d8e7f6a",
                      "status": "In Review",
                      "ip": {
                        "status": "In Review",
                        "ip_address": "8.8.8.8",
                        "ip_country": "United States",
                        "ip_country_code": "US",
                        "ip_state": "California",
                        "ip_city": "Mountain View",
                        "latitude": 37.386,
                        "longitude": -122.0838,
                        "isp": "Google",
                        "organization": "Google LLC",
                        "is_vpn_or_tor": true,
                        "is_data_center": true,
                        "time_zone": "America/Los_Angeles",
                        "time_zone_offset": "-0700",
                        "asn_number": 15169,
                        "asn_organization": "GOOGLE, US",
                        "connection_type": "hosting",
                        "carrier": null,
                        "proxy_type": "VPN",
                        "claimed_country": "ESP",
                        "country_mismatch": true,
                        "threat": {
                          "is_proxy": true,
                          "is_data_center": true,
                          "is_tor": false
                        }
                      },
                      "vendor_data": "lead-126",
                      "metadata": null,
                      "created_at": "2026-09-01T10:30:00.123456+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/IPRiskValidationError"
          },
          "403": {
            "$ref": "#/components/responses/RiskPermissionDenied"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/phone/risk/": {
      "post": {
        "summary": "電話番号のリスクをスコアリングする",
        "description": "OTPを送信せずに電話番号を照会し、通信事業者、回線種別、番号ポータビリティ、使い捨て番号、セッション間の一致、正規化されたリスクインテリジェンスのシグナルを返します。このエンドポイントはAPIセッションを作成し、そのIDを`request_id`として返します。\n\n**判定。** トップレベルの`status`は`phone.status`と同じ値になります。通常は`Approved`ですが、リスク評価の結果、`In Review`または`Declined`になる場合があります。\n\n**互換性のためのエイリアス。** 本番環境のレスポンスでは、正規化されたインテリジェンスオブジェクトが`phone.phone_intelligence`と`phone.enrichment`の両方で返されます。値は同一です。新規の連携では`phone.enrichment`を参照できます。利用可能なインテリジェンスデータが返されなかった場合、どちらのキーも含まれません。\n\n**請求。** 本番環境での呼び出しにはPhone Risk APIの料金が適用されます。照会が開始された時点でリクエストは課金対象となり、ベストエフォートで取得する一部のフィールドが取得できない場合でも同様です。\n\n**サンドボックス。** サンドボックスキーではリクエストが検証され、OTPの送信、クレジットの消費、セッションの作成、Networksへのデータ提供を行わずに、決定論的な承認済みデータが返されます。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`で送信してください。認証情報がない場合や無効な場合は`403`が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに1分あたり300リクエストです。\n\n**ソーシャルフットプリント。** `enable_social`を`true`に設定すると、`phone_social`ブロックが追加されます。このブロックには、この番号が登録されているオンラインプラットフォームが、カテゴリごとの件数と取得可能なプロフィール詳細とともに含まれます。`profiles_registered: 0`は、プラットフォームを確認した結果、この番号がいずれにも登録されていなかったことを意味し、有効かつ課金対象の回答です。アドオンがリクエストされなかった場合やチェックを完了できなかった場合、このブロックは含まれず、その場合は課金されません。請求では、このエンドポイント自体の料金に加えて、リクエストごとに`phone_social`が1ユニット加算されます。",
        "operationId": "post_v3phone_risk",
        "x-didit-sdk": {
          "resource": "phone",
          "method": "assess_risk",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/phone/risk/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"phone_number\": \"+14155552671\",\n    \"country_code\": \"US\",\n    \"vendor_data\": \"lead-123\",\n    \"metadata\": {\"source\": \"signup_prescreen\"}\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.phone.assess_risk(\n    phone_number=\"+14155552671\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.phone.assessRisk({\n  phone_number: \"+14155552671\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Phone.AssessRisk(ctx, didit.PhoneRiskRequest{\n\tPhoneNumber: \"+14155552671\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.PhoneRiskRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.phone().assessRisk(PhoneRiskRequest.builder()\n        .phoneNumber(\"+14155552671\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->phone->assessRisk([\n    'phone_number' => '+14155552671',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.phone.assess_risk(phone_number: \"+14155552671\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Phone.AssessRiskAsync(new PhoneRiskRequest\n{\n    PhoneNumber = \"+14155552671\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PhoneRiskRequest"
              },
              "examples": {
                "Minimal": {
                  "summary": "デフォルト設定で番号をスコアリング",
                  "value": {
                    "phone_number": "+14155552671"
                  }
                },
                "Full context": {
                  "summary": "シグナル、国のヒント、相関IDを指定してスコアリング",
                  "value": {
                    "phone_number": "+14155552671",
                    "country_code": "US",
                    "signals": {
                      "ip": "192.0.2.1",
                      "device_id": "8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2",
                      "device_platform": "ios",
                      "device_model": "iPhone17,2",
                      "os_version": "18.0.1",
                      "app_version": "1.2.34",
                      "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"
                    },
                    "vendor_data": "lead-123",
                    "metadata": {
                      "source": "signup_prescreen"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "リスク評価が完了しました。判定は`status`で確認してください。完了したルックアップでは、HTTPは常に`200`です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhoneRiskResponse"
                },
                "examples": {
                  "Clean mobile number": {
                    "summary": "インテリジェンスの対象となるクリーンな携帯電話番号",
                    "value": {
                      "request_id": "4fd09d2e-9bc9-4c4e-9c46-7f625ac0ab62",
                      "status": "Approved",
                      "phone": {
                        "status": "Approved",
                        "phone_number_prefix": "+1",
                        "phone_number": "4155552671",
                        "full_number": "+14155552671",
                        "country_code": "US",
                        "country_name": "United States",
                        "carrier": {
                          "name": "Example Mobile",
                          "type": "mobile"
                        },
                        "is_disposable": false,
                        "is_virtual": false,
                        "verification_method": null,
                        "verification_attempts": 0,
                        "verified_at": null,
                        "warnings": [],
                        "lifecycle": [],
                        "matches": [],
                        "phone_intelligence": {
                          "score": 3.0,
                          "phone_type_risk": "Low",
                          "phone_trust_index": 97,
                          "network_stability_index": 95,
                          "is_disposable": false,
                          "is_ported": false,
                          "is_recently_ported": false,
                          "carrier_type": "mobile",
                          "reason_codes": []
                        },
                        "enrichment": {
                          "score": 3.0,
                          "phone_type_risk": "Low",
                          "phone_trust_index": 97,
                          "network_stability_index": 95,
                          "is_disposable": false,
                          "is_ported": false,
                          "is_recently_ported": false,
                          "carrier_type": "mobile",
                          "reason_codes": []
                        }
                      },
                      "vendor_data": "lead-123",
                      "metadata": {
                        "source": "signup_prescreen"
                      },
                      "created_at": "2026-09-01T10:30:00.123456+00:00"
                    }
                  },
                  "Number in review": {
                    "summary": "レビュー対象としてフラグ付けされた使い捨て番号または仮想番号",
                    "value": {
                      "request_id": "8c22e1f0-4b3d-4a3a-9d1e-2f6b7c8d9e0f",
                      "status": "In Review",
                      "phone": {
                        "status": "In Review",
                        "phone_number_prefix": "+44",
                        "phone_number": "7700900123",
                        "full_number": "+447700900123",
                        "country_code": "GB",
                        "country_name": "United Kingdom",
                        "carrier": {
                          "name": "Example VoIP",
                          "type": "voip"
                        },
                        "is_disposable": true,
                        "is_virtual": true,
                        "verification_method": null,
                        "verification_attempts": 0,
                        "verified_at": null,
                        "warnings": [],
                        "lifecycle": [],
                        "matches": [],
                        "phone_intelligence": {
                          "score": 72.0,
                          "phone_type_risk": "High",
                          "phone_trust_index": 28,
                          "network_stability_index": 40,
                          "is_disposable": true,
                          "is_ported": true,
                          "is_recently_ported": true,
                          "carrier_type": "voip",
                          "reason_codes": [
                            {
                              "code": "IR-5AC67A32",
                              "direction": "risk",
                              "message": "Phone type identified as non-mobile",
                              "impact_level": "medium"
                            }
                          ]
                        },
                        "enrichment": {
                          "score": 72.0,
                          "phone_type_risk": "High",
                          "phone_trust_index": 28,
                          "network_stability_index": 40,
                          "is_disposable": true,
                          "is_ported": true,
                          "is_recently_ported": true,
                          "carrier_type": "voip",
                          "reason_codes": [
                            {
                              "code": "IR-5AC67A32",
                              "direction": "risk",
                              "message": "Phone type identified as non-mobile",
                              "impact_level": "medium"
                            }
                          ]
                        }
                      },
                      "vendor_data": "lead-124",
                      "metadata": null,
                      "created_at": "2026-09-01T10:30:00.123456+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/PhoneRiskValidationError"
          },
          "403": {
            "$ref": "#/components/responses/RiskPermissionDenied"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/": {
      "post": {
        "summary": "認証セッションを作成",
        "description": "ユーザー認証（KYC）または法人確認（KYB）のセッションを作成し、エンドユーザーのリダイレクト先または埋め込み用として、ホスト型検証`url`と`session_token`を受け取ります。`workflow_id`によって、実行される検証ステップと、セッションがKYCかKYBかが決まります。\n\nこのエンドポイントはバックエンドから呼び出してください（APIキーはシークレットのため、ブラウザからは決して呼び出さないでください）。ユーザーや企業の認証が必要になったとき、たとえばサインアップ時、機密性の高いアクションの前、再検証が必要なときに呼び出します。前提条件: 公開済みのワークフロー（コンソールの[ワークフロー](https://docs.didit.me/ja/console/workflows)ページで作成）と、利用可能なクレジットがあるアプリケーションのAPIキー。サンドボックスのアプリケーションではクレジットチェックは行われません。\n\n**冪等性:** `vendor_data`が指定され、同じ`vendor_data`を持つ未完了のセッション（`Not Started`、`In Progress`、`Resubmitted`、`Awaiting User`）がワークフローの**現在の最新公開バージョン**上にすでに存在する場合（かつそのセッションにホスト型検証URLがすでにある場合）、重複を作成せずに既存のセッションが返されます（ステータスは`201`のまま）。その際、`callback`と`metadata`は新たに指定された値に更新されます。ワークフローの古いバージョン（その後に再公開されたもの）で作成された未完了のセッションは再利用**されません**。代わりに、最新公開バージョンに固定された新しいセッションが作成されます。`Approved`、`Declined`、`In Review`、`Expired`、`Abandoned`、`Kyc Expired`のセッションが再利用されることはありません。\n\n**副作用:** ホスト型検証URLが生成され、保存されます。`contact_details.send_notification_emails`が`true`でメールアドレスが指定されている場合は、認証の招待メールが送信されます。セッションは、ワークフローで設定されたセッション有効期限が経過すると期限切れになります。KYBワークフローでは、`contact_details.phone`と`expected_details`は無視されます。",
        "operationId": "post_v3_session_create",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "responses": {
          "201": {
            "description": "セッションが作成されました（ワークフローの最新公開バージョンに同じ`vendor_data`の未完了セッションが既に存在する場合は、そのセッションが返されます）。レスポンスはシリアライズされたセッションで、ユーザーのリダイレクト先となるホスト型検証ページの`url`を含みます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "session_id",
                    "session_number",
                    "session_token",
                    "url",
                    "vendor_data",
                    "metadata",
                    "status",
                    "workflow_id",
                    "workflow_version",
                    "callback"
                  ],
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "認証セッションの一意の識別子。`GET /v3/session/{sessionId}/decision/`を呼び出す際にこのIDを使用します。",
                      "example": "11111111-2222-3333-4444-555555555555"
                    },
                    "session_number": {
                      "type": "integer",
                      "description": "アプリケーション内でセッションに割り当てられる、人が読みやすい連番。サポートやダッシュボードで役立ちます。",
                      "example": 43762
                    },
                    "session_token": {
                      "type": "string",
                      "description": "`url`のホスト型検証フローへのアクセスをエンドユーザーに許可する、12文字のURLセーフなトークン。セッションの有効期限まで有効です。シークレットとして扱ってください。このトークンを持つ人は誰でも、このセッションの検証フローを開くことができます。",
                      "example": "3FaJ9wLqX2Mz"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "エンドユーザーのリダイレクト先となるホスト型検証URLです。URLには`session_token`が埋め込まれ、設定されている場合はホワイトラベルドメインが使用されます。リクエストに`language`が含まれる場合、URLには言語のパスセグメントが含まれます(`https://verify.didit.me/{language}/session/{session_token}`、例: `/es/session/...`)。`language`がない場合、このセグメントは省略されます。",
                      "example": "https://verify.didit.me/session/3FaJ9wLqX2Mz"
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "自社システム内のユーザーまたは企業とセッションを紐付けるためにリクエストで渡した識別子。そのままの形で返されます。指定しなかった場合はnullです。",
                      "example": "user-123"
                    },
                    "metadata": {
                      "description": "セッション作成時に保存した任意のJSONペイロード。そのまま返されます。送信したJSON値（オブジェクト、文字列、数値、配列）は変更されずに返されますが、JSONオブジェクトの使用を推奨します。エンドユーザーには表示されません。レスポンスには常に含まれ、作成時に指定しなかった場合は`null`になります。",
                      "example": {
                        "user_type": "premium",
                        "account_id": "ABC123"
                      }
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "セッションに付いているタグ。名前で示されます。",
                      "example": [
                        "VIP",
                        "ONBOARDING Q4"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "Not Started",
                        "In Progress",
                        "Approved",
                        "Declined",
                        "In Review",
                        "Expired",
                        "Abandoned",
                        "Kyc Expired",
                        "Resubmitted",
                        "Awaiting User"
                      ],
                      "description": "セッションの現在のステータス。新規作成されたセッションは`Not Started`を返します。ワークフローの最新公開バージョンで同じ`vendor_data`の未完了セッションがすでに存在する場合、返されるステータスはその既存セッションのものです。",
                      "example": "Not Started"
                    },
                    "callback": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "フローの完了後にユーザーが送られる最終的なリダイレクトURLです。DiditはこのURLに`?verificationSessionId={session_id}&status={status}`を付加します。リクエストで指定されていない場合は、ワークフローに設定されたコールバックURLが使用されます。どちらも設定されていない場合は`null`です。アプリケーションに許可ドメインが設定されており、このURLがその範囲外のWeb URLである場合（例えば、リストが変更される前に設定されたワークフローのデフォルト）、ホスト型フローはユーザーをこのURLにリダイレクトしません。",
                      "example": "https://example.com/verification/callback"
                    },
                    "workflow_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "このセッションが実行されるワークフローの不変の識別子。常にワークフローの不変のグループ識別子です。リクエストで特定のワークフローバージョンのUUIDを参照した場合(後方互換の検索)でも、レスポンスには不変の`workflow_id`が含まれます。コンソールで設定したワークフローとセッションを関連付けるために使用します。",
                      "example": "11111111-2222-3333-4444-555555555555"
                    },
                    "workflow_version": {
                      "type": "integer",
                      "description": "セッション作成時に固定された、公開済みワークフローバージョンのバージョン番号。Diditはセッション作成時に`workflow_id`をワークフローの最新の公開バージョンに解決し、後でワークフローが再公開された場合でも、セッションはそのバージョンで実行され続けます。",
                      "example": 3
                    }
                  }
                },
                "examples": {
                  "KYC session": {
                    "summary": "KYCセッションが作成されました",
                    "value": {
                      "session_id": "11111111-2222-3333-4444-555555555555",
                      "session_number": 43762,
                      "session_token": "3FaJ9wLqX2Mz",
                      "url": "https://verify.didit.me/en/session/3FaJ9wLqX2Mz",
                      "vendor_data": "user-123",
                      "metadata": {
                        "user_type": "premium",
                        "account_id": "ABC123"
                      },
                      "status": "Not Started",
                      "workflow_id": "11111111-2222-3333-4444-555555555555",
                      "workflow_version": 3,
                      "callback": "https://example.com/verification/callback"
                    }
                  },
                  "KYB session": {
                    "summary": "KYBセッションが作成されました",
                    "value": {
                      "session_id": "22222222-3333-4444-5555-666666666666",
                      "session_number": 43763,
                      "session_token": "Yk7pQ2vN8aBc",
                      "url": "https://verify.didit.me/en/session/Yk7pQ2vN8aBc",
                      "vendor_data": "company-acme-001",
                      "metadata": {
                        "tier": "enterprise"
                      },
                      "status": "Not Started",
                      "workflow_id": "33333333-4444-5555-6666-777777777777",
                      "workflow_version": 1,
                      "callback": "https://example.com/kyb/callback"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "不正なリクエストです。ペイロードの検証に失敗した（`workflow_id`の欠落または不明、無効な`language`、ブロックリストに登録された`vendor_data`、不正な形式の`portrait_image`、`country`/`poa_country`のない`address`、無効な`sandbox_scenario`、ワークフローの電子署名ステップが受け付けない`sign`の書類・フィールド・値（`signature_document_not_supported`、`signature_document_conversion_failed`、`field_anchor_not_found`、`field_value_missing`など）など）か、組織にセッションを開始するのに十分なクレジットがありません。\n\nボディは問題のあるフィールド名（フィールド以外のエラーの場合は`detail`）をキーとするオブジェクトです。値は、入力検証の失敗（必須フィールドの欠落、無効な言語、サイズ超過のポートレート画像など）では**文字列の配列**、セッション作成中に検出された失敗（不明な`workflow_id`、ブロックリストに登録された`vendor_data`、顔照合ワークフローで参照用の顔が利用できない）では**単純な文字列**になります。両方の形式に対応してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "フィールド以外のエラー（クレジット不足など）に対する人が読めるエラーメッセージ。フィールド単位のエラーでは、代わりにフィールド名がキーとなり、値は文字列または文字列の配列になります。",
                      "example": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                },
                "examples": {
                  "Missing workflow_id": {
                    "summary": "必須フィールドが省略されています（文字列配列の形式）",
                    "value": {
                      "workflow_id": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid workflow_id": {
                    "summary": "不明なworkflow_id（プレーン文字列形式）",
                    "value": {
                      "workflow_id": "Invalid workflow_id."
                    }
                  },
                  "Insufficient credits": {
                    "summary": "組織のクレジットが不足しています",
                    "value": {
                      "detail": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  },
                  "Blocklisted vendor_data": {
                    "summary": "vendor_dataがブロックリストに登録されています",
                    "value": {
                      "vendor_data": "This user or business has been blocked and cannot create new verification sessions."
                    }
                  },
                  "Portrait image too large": {
                    "summary": "portrait_imageがサイズ検証に失敗した",
                    "value": {
                      "portrait_image": [
                        "Image size exceeds 2MB."
                      ]
                    }
                  },
                  "No stored face for vendor_data": {
                    "summary": "portrait_imageがなく、vendor_dataのユーザーに保存済みの顔もない顔照合ワークフロー",
                    "value": {
                      "portrait_image": "No stored face image was found for this user. Send a portrait_image, or complete an approved verification with face liveness or an ID document for this vendor_data first."
                    }
                  },
                  "Portrait image required without vendor_data": {
                    "summary": "portrait_imageもvendor_dataもない顔照合ワークフロー",
                    "value": {
                      "portrait_image": "A portrait image is required to perform face match for this workflow. Send a portrait_image, or provide the vendor_data of a user with a previously stored face image to reuse it."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。誤った、失効した、または期限切れのキーの場合は`401`を返します。`x-api-key`ヘッダーがない場合、またはAPIキーは有効だがクライアントにこのアプリケーションでセッションを作成する権限がない場合（たとえばAPIキーが別の組織に属している場合）、このエンドポイントは`403`を返します。これらの失敗はいずれも同じボディ`{\"detail\": \"You do not have permission to perform this action.\"}`を返します。`x-api-key`ヘッダーが存在し、対象のアプリケーションに属していることを確認し、必要に応じて[Auth API](/ja/auth-api/get-credentials)でアプリケーションのAPIキーを再取得してから再試行してください。\n\n**削除されたアプリケーション：**アプリケーションの削除後数分間は、そのAPIキーを使ったリクエストに対して`{\"detail\": \"This application was deleted.\", \"code\": \"application_deleted\"}`が返されることがあります。再試行しないでください。アプリケーションとそのAPIキーはすでに存在しません。その数分が経過した後は、他の無効なキーと同様にキーが拒否されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "You do not have permission to perform this action."
                    },
                    "code": {
                      "type": "string",
                      "description": "機械可読な理由で、一部の失敗時にのみ含まれます。`application_deleted`：APIキーが削除済みのアプリケーションに属しています。",
                      "example": "application_deleted"
                    }
                  },
                  "required": [
                    "detail"
                  ]
                },
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、APIキーが無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "No permission": {
                    "summary": "クライアントがセッションを作成できない",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Application deleted": {
                    "summary": "削除されたアプリケーションのAPIキー",
                    "value": {
                      "detail": "This application was deleted.",
                      "code": "application_deleted"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。同じAPIキー/IPから60秒間に600件を超えるセッション作成リクエストが送信されました。`Retry-After`を確認し、待機してから再試行してください。\n\n**注:** ソースコードには`PAID_SESSION_RATE_LIMIT=600`とともに、1分あたり10回の`FREE_SESSION_RATE_LIMIT`も定義されています（`sessions/serializers/session.py`）が、この無料枠の上限は**このV3エンドポイントには適用されません**。レート制限ミドルウェアは、プランに関係なく1分あたり600件の`SESSION_CREATE_RATE_LIMIT`を適用します。ここで達する可能性がある制限は1分あたり600件のみです。",
            "headers": {
              "Retry-After": {
                "description": "呼び出し元がリクエストを再試行するまでに待機する必要がある秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 42
                }
              },
              "X-RateLimit-Limit": {
                "description": "超過した制限について、現在の60秒ウィンドウで許可される最大リクエスト数（セッション作成の場合は600）です。サンドボックスのクォータに関するバリアントには含まれません。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "超過した制限について、現在のウィンドウ内でまだ送信できるリクエストの数です。サンドボックスのクォータ版には含まれません。",
                "schema": {
                  "type": "integer",
                  "minimum": 0,
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のレート制限ウィンドウがリセットされるUTCエポック秒。サンドボックスのクォータ版では含まれません。",
                "schema": {
                  "type": "integer",
                  "minimum": 0,
                  "example": 1747497600
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "レート制限超過を人が読める形で説明したもの。このメッセージを使って、3つの制限のうちどれに達したかを区別します。",
                      "example": "Session creation rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                },
                "examples": {
                  "Session-create limit": {
                    "summary": "1分あたり600件を超えるセッション作成リクエスト",
                    "value": {
                      "detail": "Session creation rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  },
                  "Sandbox session quota": {
                    "summary": "サンドボックスアプリケーションが24時間で500セッションを超えました",
                    "value": {
                      "detail": "Sandbox session quota exceeded (500 sessions per 24h). Wait for the window to reset. Expected available in 3600 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/session/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"workflow_id\": \"11111111-2222-3333-4444-555555555555\",\n    \"vendor_data\": \"user-123\",\n    \"callback\": \"https://example.com/verification/callback\",\n    \"callback_method\": \"both\",\n    \"metadata\": {\"user_type\": \"premium\", \"account_id\": \"ABC123\"},\n    \"language\": \"en\",\n    \"contact_details\": {\n      \"email\": \"john.doe@example.com\",\n      \"send_notification_emails\": true,\n      \"email_lang\": \"en\",\n      \"phone\": \"+14155552671\"\n    },\n    \"expected_details\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Doe\",\n      \"date_of_birth\": \"1990-05-15\",\n      \"id_country\": \"USA\",\n      \"expected_document_types\": [\"P\", \"ID\"]\n    }\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.create(\n    workflow_id=\"11111111-2222-3333-4444-555555555555\",\n    vendor_data=\"user-123\",\n    callback=\"https://example.com/verification/callback\",\n    callback_method=\"both\",\n    metadata={\"user_type\": \"premium\", \"account_id\": \"ABC123\"},\n    language=\"en\",\n    contact_details={\n        \"email\": \"john.doe@example.com\",\n        \"send_notification_emails\": True,\n        \"email_lang\": \"en\",\n        \"phone\": \"+14155552671\",\n    },\n    expected_details={\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"date_of_birth\": \"1990-05-15\",\n        \"nationality\": \"USA\",\n        \"id_country\": \"USA\",\n        \"expected_document_types\": [\"P\", \"ID\"],\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.create({\n  workflow_id: \"11111111-2222-3333-4444-555555555555\",\n  vendor_data: \"user-123\",\n  callback: \"https://example.com/verification/callback\",\n  callback_method: \"both\",\n  metadata: { user_type: \"premium\", account_id: \"ABC123\" },\n  language: \"en\",\n  contact_details: {\n    email: \"john.doe@example.com\",\n    send_notification_emails: true,\n    email_lang: \"en\",\n    phone: \"+14155552671\",\n  },\n  expected_details: {\n    first_name: \"John\",\n    last_name: \"Doe\",\n    date_of_birth: \"1990-05-15\",\n    nationality: \"USA\",\n    id_country: \"USA\",\n    expected_document_types: [\"P\", \"ID\"],\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Create(ctx, didit.SessionsCreateParams{\n\tWorkflowID:     \"11111111-2222-3333-4444-555555555555\",\n\tVendorData:     didit.String(\"user-123\"),\n\tCallback:       didit.String(\"https://example.com/verification/callback\"),\n\tCallbackMethod: didit.Some(didit.SessionsCreateParamsCallbackMethod(\"both\")),\n\tMetadata:       didit.Some[any](map[string]any{\"user_type\": \"premium\", \"account_id\": \"ABC123\"}),\n\tLanguage:       didit.Some(didit.SessionsCreateParamsLanguage(\"en\")),\n\tContactDetails: didit.Some(didit.SessionsCreateParamsContactDetails{\n\t\tEmail:                  didit.String(\"john.doe@example.com\"),\n\t\tSendNotificationEmails: didit.Bool(true),\n\t\tEmailLang:              didit.Some(didit.SessionsCreateParamsContactDetailsEmailLang(\"en\")),\n\t\tPhone:                  didit.String(\"+14155552671\"),\n\t}),\n\tExpectedDetails: didit.Some(didit.SessionsCreateParamsExpectedDetails{\n\t\tFirstName:             didit.String(\"John\"),\n\t\tLastName:              didit.String(\"Doe\"),\n\t\tDateOfBirth:           didit.String(\"1990-05-15\"),\n\t\tNationality:           didit.String(\"USA\"),\n\t\tIDCountry:             didit.String(\"USA\"),\n\t\tExpectedDocumentTypes: didit.Some([]didit.SessionsCreateParamsExpectedDetailsExpectedDocumentTypes{\"P\", \"ID\"}),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SessionsCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().create(SessionsCreateParams.builder()\n        .workflowId(\"11111111-2222-3333-4444-555555555555\")\n        .vendorData(\"user-123\")\n        .callback(\"https://example.com/verification/callback\")\n        .callbackMethod(SessionsCreateParams.CallbackMethod.of(\"both\"))\n        .metadata(Map.of(\"user_type\", \"premium\", \"account_id\", \"ABC123\"))\n        .language(SessionsCreateParams.Language.of(\"en\"))\n        .contactDetails(SessionsCreateParams.ContactDetails.builder()\n                .email(\"john.doe@example.com\")\n                .sendNotificationEmails(true)\n                .emailLang(SessionsCreateParams.ContactDetails.EmailLang.of(\"en\"))\n                .phone(\"+14155552671\")\n                .build())\n        .expectedDetails(SessionsCreateParams.ExpectedDetails.builder()\n                .firstName(\"John\")\n                .lastName(\"Doe\")\n                .dateOfBirth(LocalDate.parse(\"1990-05-15\"))\n                .nationality(\"USA\")\n                .idCountry(\"USA\")\n                .expectedDocumentTypes(List.of(SessionsCreateParams.ExpectedDetails.ExpectedDocumentTypes.of(\"P\"), SessionsCreateParams.ExpectedDetails.ExpectedDocumentTypes.of(\"ID\")))\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->create([\n    'workflow_id' => '11111111-2222-3333-4444-555555555555',\n    'vendor_data' => 'user-123',\n    'callback' => 'https://example.com/verification/callback',\n    'callback_method' => 'both',\n    'metadata' => ['user_type' => 'premium', 'account_id' => 'ABC123'],\n    'language' => 'en',\n    'contact_details' => [\n        'email' => 'john.doe@example.com',\n        'send_notification_emails' => true,\n        'email_lang' => 'en',\n        'phone' => '+14155552671',\n    ],\n    'expected_details' => [\n        'first_name' => 'John',\n        'last_name' => 'Doe',\n        'date_of_birth' => '1990-05-15',\n        'nationality' => 'USA',\n        'id_country' => 'USA',\n        'expected_document_types' => ['P', 'ID'],\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.create(\n  workflow_id: \"11111111-2222-3333-4444-555555555555\",\n  vendor_data: \"user-123\",\n  callback: \"https://example.com/verification/callback\",\n  callback_method: \"both\",\n  metadata: { user_type: \"premium\", account_id: \"ABC123\" },\n  language: \"en\",\n  contact_details: {\n    email: \"john.doe@example.com\",\n    send_notification_emails: true,\n    email_lang: \"en\",\n    phone: \"+14155552671\",\n  },\n  expected_details: {\n    first_name: \"John\",\n    last_name: \"Doe\",\n    date_of_birth: \"1990-05-15\",\n    nationality: \"USA\",\n    id_country: \"USA\",\n    expected_document_types: [\"P\", \"ID\"],\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.CreateAsync(new SessionsCreateParams\n{\n    WorkflowId = \"11111111-2222-3333-4444-555555555555\",\n    VendorData = \"user-123\",\n    Callback = \"https://example.com/verification/callback\",\n    CallbackMethod = new SessionsCreateParamsCallbackMethod(\"both\"),\n    Metadata = new Dictionary<string, object> { [\"user_type\"] = \"premium\", [\"account_id\"] = \"ABC123\" },\n    Language = new SessionsCreateParamsLanguage(\"en\"),\n    ContactDetails = new SessionsCreateParamsContactDetails\n    {\n        Email = \"john.doe@example.com\",\n        SendNotificationEmails = true,\n        EmailLang = new SessionsCreateParamsContactDetailsEmailLang(\"en\"),\n        Phone = \"+14155552671\",\n    },\n    ExpectedDetails = new SessionsCreateParamsExpectedDetails\n    {\n        FirstName = \"John\",\n        LastName = \"Doe\",\n        DateOfBirth = \"1990-05-15\",\n        Nationality = \"USA\",\n        IdCountry = \"USA\",\n        ExpectedDocumentTypes = new SessionsCreateParamsExpectedDetailsExpectedDocumentTypes[] { \"P\", \"ID\" },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "workflow_id"
                ],
                "properties": {
                  "workflow_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "セッションで実行する認証ステップを定義するワークフローの不変の識別子。ワークフローはコンソールの[ワークフロー](/ja/console/workflows)ページで作成・管理します。`workflow_id`によって、セッションがKYCかKYBかも暗黙的に決まります。",
                    "example": "11111111-2222-3333-4444-555555555555",
                    "x-readme-id": "0.0"
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "認証対象のユーザーの一意の識別子(UUID、メールアドレス、社内ユーザーIDなど)。このフィールドは次の用途に使用されます。(1) **ユーザーのグループ化**: 同じvendor_dataを持つセッションは、Usersタブで同じユーザープロフィールに紐付けられます。(2) **セッション間の重複検出**: 重複する顔、書類、電話番号、メールアドレス、IPアドレス、デバイスフィンガープリントを確認する際、同じvendor_dataを持つセッションは同一ユーザーとして扱われ、一致の対象から除外されます。vendor_dataがない場合、すべてのセッションが別々のユーザーとして扱われ、重複の可能性があるものがすべて表示されます。重複検出のノイズを減らすため、常にvendor_dataを指定することを強く推奨します。",
                    "example": "user-123",
                    "x-readme-id": "0.1"
                  },
                  "multi_account_segment": {
                    "type": "string",
                    "maxLength": 64,
                    "description": "組織内で重複検知を行う任意の領域（レルム）です。重複顔チェックでは、このセッションを同じセグメントを持つ他のセッションとのみ比較します。そのため、別々のアカウント基盤（個人アカウントと法人アカウント、またはB2Bのサブクライアントごと）でそれぞれ1つずつ正当にアカウントを持つ人物がフラグ付けされることはありません。省略すると単一のデフォルト領域が使用されます。現在はすべてのセッションがこの領域を使用しています。ブロックリストと許可リストの照合では、このフィールドは無視されます。",
                    "example": "business-accounts"
                  },
                  "callback": {
                    "type": "string",
                    "description": "認証完了後にユーザーをリダイレクトするURL。Diditは`verificationSessionId`と`status`(Approved、Declined、In Review)をクエリパラメーターとして自動的に付加します。モバイルのコールバックにはカスタムURLスキーム(例: `myapp://`)を使用できます。省略した場合は、ワークフローのデフォルトの`callback_url`が使用されます。アプリケーションに許可ドメイン(`PATCH /v3/webhook/`の`allowed_domains`)が設定されている場合、`http`または`https`のコールバックはそのいずれかのオリジン(同一のスキーム、ホスト、ポート)上にある必要があります。そうでない場合、リクエストは`callback`について400で失敗します: `callback must be on one of the application's allowed domains: https://app.example.com`。カスタムURLスキームは常に受け付けられます。",
                    "example": "https://example.com/verification/callback",
                    "x-readme-id": "0.2"
                  },
                  "callback_method": {
                    "type": "string",
                    "description": "指定したコールバックURLへのリダイレクトを、どのデバイスで処理するかを決定します。フローを開始したデバイスのみをリダイレクトするには`initiator`、フローを完了するデバイスをリダイレクトするには`completer`、どちらのデバイスでもコールバックをトリガーできるようにするには`both`を使用します。コールバックが確実にトリガーされない場合は、この値を`both`に設定することをおすすめします。",
                    "enum": [
                      "initiator",
                      "completer",
                      "both"
                    ],
                    "default": "initiator",
                    "example": "both",
                    "x-readme-id": "0.3"
                  },
                  "metadata": {
                    "description": "セッションとともに保存され、レスポンスとWebhookでそのまま返される任意のJSON。任意のJSON値（オブジェクト、文字列、数値、配列）を受け付けますが、キーと値のペアからなるJSONオブジェクトを推奨します。エンドユーザーには表示されません。独自の相関ID、A/Bテストのバリアント、ビジネス上のコンテキストを渡すために使用します。",
                    "example": {
                      "user_type": "premium",
                      "account_id": "ABC123"
                    },
                    "x-readme-id": "0.4"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 50
                    },
                    "maxItems": 10,
                    "description": "セッション作成時に名前で付与するタグ。最大10個、各50文字以内です。名前は大文字と小文字を区別せず、大文字で保存されます。アプリケーションにまだ存在しない名前は、新しいタグとして作成されます。タグはコンソールのセッションに表示され、タグでフィルターできます。",
                    "example": [
                      "VIP",
                      "ONBOARDING Q4"
                    ]
                  },
                  "language": {
                    "type": "string",
                    "description": "認証プロセスのインターフェースの言語コード(ISO 639-1)。認証中にエンドユーザーに表示される言語を指定します。指定しない場合、ブラウザの言語が自動的に検出されて使用されます。対応言語の一覧は[こちら](/ja/integration/supported-languages)で確認してください。",
                    "enum": [
                      "en",
                      "ar",
                      "bg",
                      "bn",
                      "bs",
                      "ca",
                      "cnr",
                      "cs",
                      "da",
                      "de",
                      "el",
                      "es",
                      "et",
                      "fa",
                      "fi",
                      "fr",
                      "he",
                      "hi",
                      "hr",
                      "hu",
                      "hy",
                      "id",
                      "it",
                      "ja",
                      "ka",
                      "kk",
                      "ko",
                      "ky",
                      "lt",
                      "lv",
                      "mk",
                      "mn",
                      "ms",
                      "nl",
                      "no",
                      "pl",
                      "pt-BR",
                      "pt",
                      "ro",
                      "ru",
                      "sk",
                      "sl",
                      "so",
                      "sq",
                      "sr",
                      "sv",
                      "th",
                      "tr",
                      "uk",
                      "uz",
                      "vi",
                      "zh-CN",
                      "zh-TW",
                      "zh"
                    ],
                    "example": "en",
                    "x-readme-id": "0.5"
                  },
                  "contact_details": {
                    "type": "object",
                    "description": "通知、認証フォームの事前入力、電話番号検証に使用できるユーザーの連絡先情報。メールアドレス、連絡に使用する希望言語、電話番号が含まれます。",
                    "example": {
                      "email": "john.doe@example.com",
                      "send_notification_emails": true,
                      "email_lang": "en",
                      "phone": "+14155552671"
                    },
                    "properties": {
                      "email": {
                        "type": "string",
                        "format": "email",
                        "description": "[メールアドレス認証](/ja/core-technology/email-verification/overview)ステップで使用されるユーザーのメールアドレス（例：\"john.doe@example.com\"）。指定しない場合、ユーザーは認証フロー中に入力する必要があります。",
                        "example": "john.doe@example.com",
                        "x-readme-id": "1.0"
                      },
                      "send_notification_emails": {
                        "type": "boolean",
                        "default": false,
                        "description": "trueに設定し、メールアドレスを指定した場合、ユーザー認証(KYC)または法人確認(KYB)のセッション作成時に、Diditは最初の「Verify your identity」メールを非同期で送信します。また、手動レビューが必要なセッションについては、認証ステータスの通知(例: 'In Review'から'Approved'または'Declined'への変更)も指定したメールアドレスに送信します。これにより、ユーザーは認証完了後にアプリケーションへ戻りやすくなります。セッションでホワイトラベルが有効な場合、送信されるメールもホワイトラベル化されます。",
                        "example": true,
                        "x-readme-id": "1.1"
                      },
                      "email_lang": {
                        "type": "string",
                        "description": "メール通知の言語コード(ISO 639-1)。すべてのメール連絡の言語を指定します(例: \"en\"、\"es\"、\"fr\")。保存されるデフォルト値はありません。省略した場合、認証招待メールは送信時に英語(`en`)にフォールバックします。以下のenumはスナップショットであり、受け付ける値の最新かつ正式な情報源は[対応言語](/ja/integration/supported-languages)のドキュメントです。特定のコードを利用する前に必ず確認してください。",
                        "enum": [
                          "en",
                          "ar",
                          "bg",
                          "bn",
                          "bs",
                          "ca",
                          "cnr",
                          "cs",
                          "da",
                          "de",
                          "el",
                          "es",
                          "et",
                          "fa",
                          "fi",
                          "fr",
                          "he",
                          "hi",
                          "hr",
                          "hu",
                          "hy",
                          "id",
                          "it",
                          "ja",
                          "ka",
                          "kk",
                          "ko",
                          "ky",
                          "lt",
                          "lv",
                          "mk",
                          "mn",
                          "ms",
                          "nl",
                          "no",
                          "pl",
                          "pt-BR",
                          "pt",
                          "ro",
                          "ru",
                          "sk",
                          "sl",
                          "so",
                          "sq",
                          "sr",
                          "sv",
                          "th",
                          "tr",
                          "uk",
                          "uz",
                          "vi",
                          "zh-CN",
                          "zh-TW",
                          "zh"
                        ],
                        "example": "en",
                        "x-readme-id": "1.2"
                      },
                      "phone": {
                        "type": "string",
                        "description": "[電話番号検証](/ja/core-technology/phone-verification/overview)ステップで使用される、E.164形式の電話番号(例: \"+14155552671\")。指定しない場合、ユーザーは検証フロー中に入力する必要があります。法人確認 (KYB)のワークフローでは無視されます。**重要:** この電話番号は、有効なE.164形式の電話番号である場合にのみ強制適用されます。指定された番号が無効または解析できない場合は無視され、ユーザーは電話番号検証ステップで任意の有効な電話番号を入力できます。",
                        "example": "+14155552671",
                        "x-readme-id": "1.3"
                      }
                    },
                    "x-readme-id": "0.4"
                  },
                  "expected_details": {
                    "type": "object",
                    "description": "ユーザーの身分証明書類、住所証明、その他の検証ステップから抽出されたデータとの照合に使用される、想定されるユーザー情報です。不一致は判定上の警告として示されます。一部のフィールド（例: `id_country`、`expected_document_types`）は、ユーザー向けのフローも変更します。法人確認 (KYB)ワークフローでは企業フィールド（`company_name`、`registry_country`、`registration_number`）のみが使用され、ユーザー向けの法人登記検索に事前入力されます。個人レベルのフィールドはすべて無視されます。",
                    "example": {
                      "first_name": "John",
                      "last_name": "Doe",
                      "date_of_birth": "1990-05-15",
                      "nationality": "USA",
                      "id_country": "USA",
                      "expected_document_types": [
                        "P",
                        "ID"
                      ]
                    },
                    "properties": {
                      "first_name": {
                        "type": "string",
                        "description": "ユーザーの名。例: `John`。照合にはあいまい比較が使用されます。本人確認書類と住所証明の両方のワークフローについて、コンソールで氏名の一致スコアのしきい値を設定することで、厳密さを調整できます。",
                        "example": "John",
                        "x-readme-id": "1.0"
                      },
                      "last_name": {
                        "type": "string",
                        "description": "ユーザーの姓。例: `Doe`。照合にはあいまい比較が使用されます。本人確認書類と住所証明の両方のワークフローについて、コンソールで氏名の一致スコアのしきい値を設定することで、厳密さを調整できます。",
                        "example": "Doe",
                        "x-readme-id": "1.1"
                      },
                      "date_of_birth": {
                        "type": "string",
                        "format": "date",
                        "description": "ユーザーの生年月日（形式: YYYY-MM-DD）。例: `1990-05-15`。",
                        "example": "1990-05-15",
                        "x-readme-id": "1.2"
                      },
                      "gender": {
                        "type": "string",
                        "nullable": true,
                        "enum": [
                          "M",
                          "F"
                        ],
                        "default": null,
                        "description": "ユーザーの性別。'M'、'F'、nullのいずれかである必要があります。",
                        "example": "M",
                        "x-readme-id": "1.3"
                      },
                      "nationality": {
                        "type": "string",
                        "description": "申請者の出身国を示すISO 3166-1 alpha-3コード。例: `USA`。[対応している国コードの一覧](https://docs.didit.me/ja/core-technology/id-verification/supported-documents-id-verification#国別の対応書類)を参照してください。",
                        "example": "USA",
                        "x-readme-id": "1.4"
                      },
                      "country": {
                        "type": "string",
                        "description": "本人確認と住所証明の両方の国の不一致チェックでフォールバックとして使用されるISO 3166-1 alpha-3コード。`address`を指定し、`id_country`と`poa_country`のどちらも設定されていない場合は必須です。",
                        "example": "USA",
                        "x-readme-id": "1.4.1"
                      },
                      "id_country": {
                        "type": "string",
                        "description": "申請者の身分証明書類の想定される国を示すISO 3166-1 alpha-3コード。国籍とは異なる場合があります。例: `GBR`。本人確認の国の不一致チェックでは`country`より優先されます。[対応している国コードの一覧](https://docs.didit.me/ja/core-technology/id-verification/supported-documents-id-verification#国別の対応書類)を参照してください。",
                        "example": "GBR",
                        "x-readme-id": "1.5"
                      },
                      "poa_country": {
                        "type": "string",
                        "description": "住所証明書類の想定される国を示すISO 3166-1 alpha-3コード。例: `USA`。住所証明の国の不一致チェックでは`country`より優先されます。[対応している国コードの一覧](https://docs.didit.me/ja/core-technology/id-verification/supported-documents-id-verification#国別の対応書類)を参照してください。",
                        "example": "USA",
                        "x-readme-id": "1.5.1"
                      },
                      "address": {
                        "type": "string",
                        "description": "人が読める形式の住所。できるだけ多くの情報を含めてください。例: `123 Main St, San Francisco, CA 94105, USA`。指定する場合は、`country`または`poa_country`も渡す必要があります。渡さない場合、リクエストは`400`で失敗します。",
                        "example": "123 Main St, San Francisco, CA 94105, USA",
                        "x-readme-id": "1.6"
                      },
                      "identification_number": {
                        "type": "string",
                        "description": "ユーザーの書類番号、個人番号、または納税者番号。例: `123456789`。",
                        "example": "123456789",
                        "x-readme-id": "1.7"
                      },
                      "ip_address": {
                        "type": "string",
                        "description": "セッションで想定されるIPアドレス（IPv4またはIPv6形式）です。実際のIPアドレスがこの値と異なる場合、警告がログに記録されます。例: `192.168.1.100`または`2001:db8::1`。",
                        "example": "192.168.1.100",
                        "x-readme-id": "1.8"
                      },
                      "expected_document_types": {
                        "type": "array",
                        "description": "本人確認（OCR）ステップでユーザーが提示できる書類の種類を制限します。設定すると、書類選択画面には指定した種類のみが表示され、返される`documents_allowed`もそれに応じて絞り込まれます。値は大文字と小文字を区別せず、重複は除外されます。不明な値は`400`で拒否されます。使用できるコード：`P`（パスポート）、`ID`（国民IDカード）、`DL`（運転免許証）、`RP`（在留カード）、`HIC`（健康保険証）、`TC`（税務カード）、`SSC`（社会保障カード）。",
                        "items": {
                          "type": "string",
                          "enum": [
                            "P",
                            "ID",
                            "DL",
                            "RP",
                            "HIC",
                            "TC",
                            "SSC"
                          ]
                        },
                        "example": [
                          "P",
                          "ID"
                        ],
                        "x-readme-id": "1.9"
                      },
                      "company_name": {
                        "type": "string",
                        "maxLength": 255,
                        "description": "確認対象企業の想定される正式名称です。例: `Tesco PLC`。法人確認 (KYB)ワークフローで、法人登記検索の企業名フィールドに事前入力されます。`registration_number`も指定されている場合、登記照会では両方の識別子を組み合わせて検索します。KYCワークフローでは無視されます。",
                        "example": "Tesco PLC",
                        "x-readme-id": "1.10"
                      },
                      "registry_country": {
                        "type": "string",
                        "maxLength": 10,
                        "description": "企業が登記されている法人登記の国を示すISO 3166-1 alpha-2コード。例: `GB`。法人登記が州や省のレベルで運営されている場合は、ISO 3166-2の地域区分コードを`XX-YY`の形式で付加します。`US-CA`はカリフォルニア州の登記を対象とします。[KYB Registry Search API](https://docs.didit.me/ja/standalone-apis/kyb-registry-search)の`country_code`と同じ形式です。法人確認 (KYB)ワークフローで登記国を事前選択します。KYCワークフローでは無視されます。",
                        "example": "US-CA",
                        "x-readme-id": "1.11"
                      },
                      "registration_number": {
                        "type": "string",
                        "maxLength": 100,
                        "description": "法人登記における企業の想定される登記番号です。例: `00445790`。法人確認 (KYB)ワークフローで、法人登記検索の登記番号フィールドに事前入力されます。`company_name`も指定されている場合、登記照会では両方の識別子を組み合わせて検索します。KYCワークフローでは無視されます。",
                        "example": "00445790",
                        "x-readme-id": "1.12"
                      }
                    },
                    "x-readme-id": "0.5"
                  },
                  "portrait_image": {
                    "type": "string",
                    "format": "byte",
                    "description": "エンドユーザーの顔のBase64エンコードされたポートレート画像です（最大2MB、JPEG、PNG、WebPまたはTIFF）。ワークフローが顔照合を有効にした`Biometric Authentication`ワークフローである場合、または本人確認（OCR）の前に顔照合を実行するグラフワークフローの場合に、ライブネスのキャプチャと照合する参照画像として使用されます。`vendor_data`のユーザーに保存済みの顔画像がある場合は任意です。Diditはその顔画像を自動的に再利用し、次の優先順位で決定します: 承認済みのライブネスの顔、ePassportのチップ写真、身分証明書の顔写真、手動で登録したプロフィールの顔（承認済みセッションの顔、またはお客様自身が登録した顔のみが再利用されます）。`portrait_image`を指定した場合は、常に保存済みの顔よりも優先されます。省略した場合に保存済みの顔が存在しないとき（または`vendor_data`を送信していないとき）は、セッションの作成が`400`で失敗します。その他のワークフロータイプでは無視されます。",
                    "example": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
                    "x-readme-id": "0.6"
                  },
                  "sandbox_scenario": {
                    "type": "string",
                    "description": "サンドボックス専用のシナリオスラッグです。APIキーがサンドボックスモードのアプリケーションに属する場合にのみ受け付けられ、本番環境のアプリケーションでは拒否されます。設定すると、作成フローはシナリオに同梱されたマジック値をセッションの入力フィールド（contact_details、expected_details）に展開し、モック化されたプロバイダーが実際のワークフローパイプラインを通じてシナリオの結果を再現します。シナリオカタログはGET /v1/sandbox/scenarios/または[サンドボックスとテストデータ](/ja/integration/sandbox-testing)を参照してください。セッションがまだ`Not Started`である限り、作成後にPOST /v3/session/{sessionId}/sandbox/arm/でシナリオを有効化（または再有効化）することもできます。書類以外の照会では、`lookup_partial_match`、`lookup_no_match`、または`lookup_provider_error`を使用して、設定された試行回数の上限とフォールバックをテストできます。IDウォレットでは、`wallet_cancelled`、`wallet_timeout`、または`wallet_provider_error`を使用します。`approve`は検証済みのウォレットをシミュレートします。カタログのすべてのウォレットは、本番環境のアプリケーションでは利用できないスキームも含め、サンドボックスでテストできます。シミュレートされた試行は課金されません。",
                    "example": "decline_document_expired"
                  },
                  "sign": {
                    "type": "object",
                    "description": "このセッションの電子署名の入力。`documents`は署名対象の書類で、電子署名ステップがセッションから書類を取得するワークフロー（`signature_documents_source`が`session`または`both`）で使用します。最大20件、合計50MBまでです。`field_values`は、`prefill`が`api.<key>`であるフィールドに値を入力します。ワークフローの書類とセッションの書類のどちらにも適用されます。同じ`workflow_id`と`vendor_data`でセッションを再度作成すると、保留中のセッションが返されます。その呼び出しで`sign`を送信する場合、書類、フィールド、値は最初のものと同一でなければならず、異なる場合は`{\"sign\": \"signature_document_changed\"}`とともに`400`が返されます。[電子署名の書類](/ja/sessions-api/create-session#電子署名の書類)を参照してください。",
                    "properties": {
                      "documents": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 20,
                        "items": {
                          "$ref": "#/components/schemas/SessionSignDocument"
                        }
                      },
                      "field_values": {
                        "type": "object",
                        "description": "各`api.<key>`事前入力ソースの`<key>`をキーとする値です。`text`および`data`フィールドには1〜500文字の文字列、`checkbox`にはブール値を指定します。どのフィールドも使用していないキーには`field_value_unknown`、値のない必須フィールドには`field_value_missing`、フィールドのバリデーションに失敗した値には`field_value_invalid`とともに`400`が返されます。",
                        "additionalProperties": {
                          "oneOf": [
                            {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 500
                            },
                            {
                              "type": "boolean"
                            }
                          ]
                        },
                        "example": {
                          "credit_limit": "3,000 EUR"
                        }
                      }
                    }
                  },
                  "user_state": {
                    "type": "string",
                    "maxLength": 16,
                    "description": "判明している場合の、本人の居住地です。ISO 3166-2の地域区分コード（`US-IL`、`ES-M`）、または米国の州コードもしくは州名（`IL`、`Illinois`）を指定します。明示的な生体認証の同意を法律で義務付けている州（イリノイ州、テキサス州、コロラド州）の場合、検証フローは顔を撮影する前に同意を求め、トリガーは`declared_state`となります。認識されない値は`400`を返します。[生体認証の同意](/ja/getting-started/biometric-consent)を参照してください。",
                    "example": "US-IL"
                  },
                  "biometric_consent": {
                    "type": "object",
                    "description": "本人からすでに取得済みの、生体認証に関する明示的な同意です。この要件を満たすため、認証フローで再度確認されることはなく、判定には`status: \"given\"`、トリガー`customer_collected`として記録されます。本人がフロー内ですでに回答した内容が置き換えられることはありません。[生体認証の同意](/ja/getting-started/biometric-consent)を参照してください。",
                    "required": [
                      "given_at",
                      "text_version"
                    ],
                    "properties": {
                      "given_at": {
                        "type": "string",
                        "format": "date-time",
                        "description": "本人が生体認証について明示的な同意を行った日時（ISO 8601）。未来の日時は指定できません。"
                      },
                      "text_version": {
                        "type": "string",
                        "maxLength": 64,
                        "description": "本人が同意した同意文の、自社の記録におけるバージョンID。"
                      }
                    }
                  }
                },
                "example": {
                  "workflow_id": "11111111-2222-3333-4444-555555555555",
                  "vendor_data": "user-123",
                  "callback": "https://example.com/verification/callback",
                  "callback_method": "both",
                  "metadata": {
                    "user_type": "premium",
                    "account_id": "ABC123"
                  },
                  "language": "en",
                  "contact_details": {
                    "email": "john.doe@example.com",
                    "send_notification_emails": true,
                    "email_lang": "en",
                    "phone": "+14155552671"
                  },
                  "expected_details": {
                    "first_name": "John",
                    "last_name": "Doe",
                    "date_of_birth": "1990-05-15",
                    "id_country": "USA",
                    "expected_document_types": [
                      "P",
                      "ID"
                    ]
                  }
                }
              },
              "examples": {
                "Create KYC session": {
                  "summary": "ユーザー認証（KYC）セッションの正常系における完全なペイロード",
                  "description": "よく設定されるすべてのフィールドを使用した、実践的な作成リクエストの例です。ワークフローの選択、ベンダーとの紐付け、コールバックのルーティング、メタデータ、ロケール、連絡先の事前入力、想定されるユーザー情報が含まれます。上記のcURLサンプルにそのままコピー&ペーストできます。",
                  "value": {
                    "workflow_id": "11111111-2222-3333-4444-555555555555",
                    "vendor_data": "user-123",
                    "callback": "https://example.com/verification/callback",
                    "callback_method": "both",
                    "metadata": {
                      "user_type": "premium",
                      "account_id": "ABC123"
                    },
                    "language": "en",
                    "contact_details": {
                      "email": "john.doe@example.com",
                      "send_notification_emails": true,
                      "email_lang": "en",
                      "phone": "+14155552671"
                    },
                    "expected_details": {
                      "first_name": "John",
                      "last_name": "Doe",
                      "date_of_birth": "1990-05-15",
                      "nationality": "USA",
                      "id_country": "USA",
                      "expected_document_types": [
                        "P",
                        "ID"
                      ]
                    }
                  }
                },
                "Create KYB session": {
                  "summary": "法人確認 (KYB)セッションの正常系ペイロード",
                  "description": "KYCの呼び出しと同じ形式です。セッションをKYBにするのは`workflow_id`です。`vendor_data`は通常、自社システム内の企業を参照し、`contact_details.email`はフローを完了する法定代理人を指定します。`expected_details`は企業のフィールド（`company_name`、`registry_country`、`registration_number`）を受け付け、これらは法人登記の検索に事前入力されます。KYBワークフローでは、個人レベルのフィールドと`contact_details.phone`は無視されます。",
                  "value": {
                    "workflow_id": "33333333-4444-5555-6666-777777777777",
                    "vendor_data": "company-acme-001",
                    "callback": "https://example.com/kyb/callback",
                    "callback_method": "both",
                    "metadata": {
                      "tier": "enterprise",
                      "company_id": "ACME-001"
                    },
                    "expected_details": {
                      "company_name": "Tesco PLC",
                      "registry_country": "GB",
                      "registration_number": "00445790"
                    },
                    "language": "en",
                    "contact_details": {
                      "email": "legal-rep@acme.example.com",
                      "send_notification_emails": true,
                      "email_lang": "en"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/session/imports/": {
      "post": {
        "summary": "認証インポートジョブを作成",
        "description": "過去のユーザー認証セッション、法人確認セッション、トランザクションモニタリングの記録、またはワークフローのカスタムステータスルールを対象とする非同期インポートジョブを作成します。他のプロバイダーから移行するには`source=provider`を設定します。DiditはSumsub、Onfido、Persona、ComplyCubeについては読み取り専用キーを使ってデータを読み込み、Veriff、iDenfy、MetaMapについては`file`でアップロードしたIDをもとにレコードを読み込み、その他のプロバイダーについてはDiditの形式のエクスポートファイルをインポートします。レコードIDはプロバイダーごとに名前空間で区別される（`sumsub:<id>`）ため、再実行時にはDiditに既に存在するものはすべてスキップされます。インポートはデフォルトで無効になっており、Diditが組織ごとに有効化する必要があります。",
        "operationId": "post_v3_session_imports_create",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "import_type": {
                    "type": "string",
                    "enum": [
                      "user_verification",
                      "business_verification",
                      "status_rules",
                      "transactions"
                    ],
                    "default": "user_verification",
                    "description": "インポートする対象です。過去のユーザー認証セッション、過去の法人確認セッション、ワークフローのカスタムステータスルール、または過去のトランザクションモニタリング記録のいずれかです。"
                  },
                  "workflow_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "インポートしたセッションまたはステータスルールを紐付けるワークフローのUUID。user_verification、business_verification、status_rulesでは必須です。transactionsでは省略してください。"
                  },
                  "source_format": {
                    "type": "string",
                    "enum": [
                      "csv",
                      "ndjson"
                    ],
                    "description": "任意。省略した場合はアップロードされたファイルの拡張子から推定されます。"
                  },
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "正規形式のCSVまたはNDJSONファイル。大規模なインポートにはNDJSONを使用してください。アップロードの最大サイズは25MBです(それより大きいファイルには`source_file_url`を使用してください)。`source_file_url`とは同時に指定できません。"
                  },
                  "source_file_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "ファイルアップロードの代替手段です。パブリックアドレスに解決されるHTTPSのURLである必要があります（プライベート/ループバックネットワークは拒否されます）。`file`とは同時に指定できません。"
                  },
                  "source": {
                    "type": "string",
                    "enum": [
                      "file",
                      "provider"
                    ],
                    "description": "`provider`を指定すると、他の本人確認プロバイダーからの移行になります。ファイルインポートの場合は省略してください。"
                  },
                  "provider": {
                    "type": "string",
                    "enum": [
                      "sumsub",
                      "jumio",
                      "veriff",
                      "onfido",
                      "persona",
                      "metamap",
                      "socure",
                      "idnow",
                      "shufti",
                      "idenfy",
                      "ondato",
                      "trulioo",
                      "au10tix",
                      "complycube",
                      "other"
                    ],
                    "description": "移行元。`GET /v3/session/imports/providers/`から取得します。`source`が`provider`の場合は必須です。"
                  },
                  "credentials": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "`credential_fields`に記載されたフィールド名を持つ、プロバイダーの読み取り専用キーです。保存時は暗号化され、返されることはなく、インポート終了時に消去されます。multipartではJSON文字列として送信してください。"
                  },
                  "options": {
                    "type": "object",
                    "properties": {
                      "region": {
                        "type": "string",
                        "description": "プロバイダーのリージョンで、`regions`のいずれかです（Onfido：`eu`、`us`、`ca`）。"
                      }
                    }
                  },
                  "status_mapping": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "enum": [
                        "Approved",
                        "Declined",
                        "In Review",
                        "Expired",
                        "Not Finished",
                        "Abandoned"
                      ]
                    },
                    "description": "プロバイダーのデフォルトのステータスマッピング（ソースのステータスからDiditのステータスへの対応）に対する変更。`Not Finished`と`Abandoned`はスキップされてカウントされ、インポートされることはありません。"
                  },
                  "dry_run": {
                    "type": "boolean",
                    "default": false,
                    "description": "移行でインポートされる件数(ステータス別、Didit登録済み、同一人物、未完了)を集計し、何も書き込みません。ジョブは`READY`で終了します。`POST /v3/session/imports/{importId}/start/`で開始してください。"
                  },
                  "face_templates": {
                    "type": "boolean",
                    "default": false,
                    "description": "インポートしたセルフィーから顔テンプレートを作成し、アプリケーションの顔とブロックリストに対して検索します。一致した場合はレビュー対象としてフラグが付けられるだけです。`lawful_basis_confirmed`が必要です。"
                  },
                  "lawful_basis_confirmed": {
                    "type": "boolean",
                    "default": false,
                    "description": "処理者であるDiditとこれらのセルフィーを共有する法的根拠があることを確認します。"
                  }
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "source_file_url"
                ],
                "properties": {
                  "import_type": {
                    "type": "string",
                    "enum": [
                      "user_verification",
                      "business_verification",
                      "status_rules",
                      "transactions"
                    ],
                    "default": "user_verification",
                    "description": "インポートする対象です。過去のユーザー認証セッション、過去の法人確認セッション、ワークフローのカスタムステータスルール、または過去のトランザクションモニタリング記録のいずれかです。"
                  },
                  "workflow_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "インポートしたセッションまたはステータスルールを紐付けるワークフローのUUID。user_verification、business_verification、status_rulesでは必須です。transactionsでは省略してください。"
                  },
                  "source_format": {
                    "type": "string",
                    "enum": [
                      "csv",
                      "ndjson"
                    ],
                    "description": "任意。省略した場合はURLのファイル拡張子から推定されます。"
                  },
                  "source_file_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "ファイルアップロードの代替手段です。パブリックアドレスに解決されるHTTPSのURLである必要があります（プライベート/ループバックネットワークは拒否されます）。`file`とは同時に指定できません。"
                  },
                  "source": {
                    "type": "string",
                    "enum": [
                      "file",
                      "provider"
                    ],
                    "description": "`provider`を指定すると、他の本人確認プロバイダーからの移行になります。ファイルインポートの場合は省略してください。"
                  },
                  "provider": {
                    "type": "string",
                    "enum": [
                      "sumsub",
                      "jumio",
                      "veriff",
                      "onfido",
                      "persona",
                      "metamap",
                      "socure",
                      "idnow",
                      "shufti",
                      "idenfy",
                      "ondato",
                      "trulioo",
                      "au10tix",
                      "complycube",
                      "other"
                    ],
                    "description": "移行元。`GET /v3/session/imports/providers/`から取得します。`source`が`provider`の場合は必須です。"
                  },
                  "credentials": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "`credential_fields`に記載されたフィールド名を持つ、プロバイダーの読み取り専用キーです。保存時は暗号化され、返されることはなく、インポート終了時に消去されます。multipartではJSON文字列として送信してください。"
                  },
                  "options": {
                    "type": "object",
                    "properties": {
                      "region": {
                        "type": "string",
                        "description": "プロバイダーのリージョンで、`regions`のいずれかです（Onfido：`eu`、`us`、`ca`）。"
                      }
                    }
                  },
                  "status_mapping": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "enum": [
                        "Approved",
                        "Declined",
                        "In Review",
                        "Expired",
                        "Not Finished",
                        "Abandoned"
                      ]
                    },
                    "description": "プロバイダーのデフォルトのステータスマッピング（ソースのステータスからDiditのステータスへの対応）に対する変更。`Not Finished`と`Abandoned`はスキップされてカウントされ、インポートされることはありません。"
                  },
                  "dry_run": {
                    "type": "boolean",
                    "default": false,
                    "description": "移行でインポートされる件数(ステータス別、Didit登録済み、同一人物、未完了)を集計し、何も書き込みません。ジョブは`READY`で終了します。`POST /v3/session/imports/{importId}/start/`で開始してください。"
                  },
                  "face_templates": {
                    "type": "boolean",
                    "default": false,
                    "description": "インポートしたセルフィーから顔テンプレートを作成し、アプリケーションの顔とブロックリストに対して検索します。一致した場合はレビュー対象としてフラグが付けられるだけです。`lawful_basis_confirmed`が必要です。"
                  },
                  "lawful_basis_confirmed": {
                    "type": "boolean",
                    "default": false,
                    "description": "処理者であるDiditとこれらのセルフィーを共有する法的根拠があることを確認します。"
                  }
                }
              },
              "examples": {
                "URL-based import": {
                  "value": {
                    "import_type": "user_verification",
                    "workflow_id": "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                    "source_file_url": "https://files.example.com/exports/sessions.ndjson"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "インポートジョブを受け付けました。`status`が`COMPLETED`または`FAILED`になるまで、返された`uuid`をポーリングしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                },
                "examples": {
                  "Job accepted": {
                    "value": {
                      "uuid": "3f9c1a2b-4d5e-4f60-8a7b-9c0d1e2f3a4b",
                      "status": "PENDING",
                      "import_type": "user_verification",
                      "source_format": "ndjson",
                      "source_filename": "sessions.ndjson",
                      "total_rows": 0,
                      "processed_rows": 0,
                      "checkpoint_row": 0,
                      "created_count": 0,
                      "updated_count": 0,
                      "skipped_count": 0,
                      "failed_count": 0,
                      "total_media_bytes": 0,
                      "last_error": null,
                      "created_at": "2026-05-17T08:42:11Z",
                      "updated_at": "2026-05-17T08:42:11Z",
                      "started_at": null,
                      "completed_at": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ワークフロー、ファイル形式、ファイルサイズ、ソースURL、またはセレクターの組み合わせが無効です。プロバイダーがキーを拒否した移行では、`code` (`invalid_credentials`、`missing_permission`、`wrong_region`、`provider_unavailable`、`rate_limited`、`ids_required`、`record_not_found`)、`missing_permissions`、`suggested_region`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid workflow": {
                    "value": {
                      "workflow_id": [
                        "Invalid workflow_id."
                      ]
                    }
                  },
                  "Workflow required": {
                    "value": {
                      "workflow_id": [
                        "This field is required for this import type."
                      ]
                    }
                  },
                  "Wrong file type": {
                    "value": {
                      "file": [
                        "Only CSV and NDJSON files are supported."
                      ]
                    }
                  },
                  "File too large": {
                    "value": {
                      "file": [
                        "Import file exceeds the maximum allowed size."
                      ]
                    }
                  },
                  "No source": {
                    "value": {
                      "file": [
                        "Upload a file or provide source_file_url."
                      ]
                    }
                  },
                  "Both sources": {
                    "value": {
                      "file": [
                        "Use either file or source_file_url, not both."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "インポートが有効化されていない、サンドボックスのアプリケーションである、またはAPIキーがありません（誤ったキー、失効したキー、期限切れのキーの場合は`401`が返されます）。認証のインポートはデフォルトで無効になっており、組織ごとにDiditが有効化する必要があります。",
            "content": {
              "application/json": {
                "examples": {
                  "Imports not enabled": {
                    "value": {
                      "detail": "Verification imports are not enabled for this organization."
                    }
                  },
                  "Sandbox": {
                    "value": {
                      "detail": "Verification imports are not enabled for sandbox applications."
                    }
                  },
                  "Bad API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このアプリケーションには、すでに有効なインポートジョブ（PENDING/PROCESSING/PAUSED）があります。別のジョブを開始する前に、完了するまでお待ちください。",
            "content": {
              "application/json": {
                "examples": {
                  "Active job": {
                    "value": {
                      "detail": "This application already has an active import job. Wait for it to finish before starting another."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.create(\n    import_type=\"user_verification\",\n    workflow_id=\"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n    source_file_url=\"https://files.example.com/exports/sessions.ndjson\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.create({\n  import_type: \"user_verification\",\n  workflow_id: \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n  source_file_url: \"https://files.example.com/exports/sessions.ndjson\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Create(ctx, didit.SessionsImportsCreateParams{\n\tImportType:    didit.Some(didit.SessionsImportsCreateParamsImportType(\"user_verification\")),\n\tWorkflowID:    didit.String(\"9f9b1234-aaaa-bbbb-cccc-1234567890ab\"),\n\tSourceFileURL: didit.String(\"https://files.example.com/exports/sessions.ndjson\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsImportsCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().create(SessionsImportsCreateParams.builder()\n        .importType(SessionsImportsCreateParams.ImportType.of(\"user_verification\"))\n        .workflowId(\"9f9b1234-aaaa-bbbb-cccc-1234567890ab\")\n        .sourceFileUrl(\"https://files.example.com/exports/sessions.ndjson\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->create([\n    'import_type' => 'user_verification',\n    'workflow_id' => '9f9b1234-aaaa-bbbb-cccc-1234567890ab',\n    'source_file_url' => 'https://files.example.com/exports/sessions.ndjson',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.create(\n  import_type: \"user_verification\",\n  workflow_id: \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n  source_file_url: \"https://files.example.com/exports/sessions.ndjson\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.CreateAsync(new SessionsImportsCreateParams\n{\n    ImportType = new SessionsImportsCreateParamsImportType(\"user_verification\"),\n    WorkflowId = \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n    SourceFileUrl = \"https://files.example.com/exports/sessions.ndjson\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/template/": {
      "get": {
        "summary": "検証インポート用テンプレートをダウンロード",
        "description": "検証インポート用の正規のCSVヘッダーをダウンロードします。列の構成は`import_type`によって決まります。セッションテンプレートの最初の列は冪等性キーである`external_id`です。",
        "operationId": "get_v3_session_imports_template",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "retrieve_template",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "import_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "user_verification",
                "business_verification",
                "status_rules",
                "transactions"
              ],
              "default": "user_verification"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "CSVテンプレートファイル。",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、インポートテンプレートをダウンロードする権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "summary": "APIキーがない、無効、または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.sessions.imports.retrieve_template()\nwith open(\"download.csv\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.sessions.imports.retrieveTemplate();\nawait writeFile(\"download.csv\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.Imports.RetrieveTemplate(ctx, didit.SessionsImportsRetrieveTemplateParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.csv\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().imports().retrieveTemplate()\n        .writeTo(Path.of(\"download.csv\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->sessions->imports->retrieveTemplate();\n$content->saveTo('download.csv');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.sessions.imports.retrieve_template\nFile.binwrite(\"download.csv\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Sessions.Imports.RetrieveTemplateAsync();\nawait content.SaveToAsync(\"download.csv\");"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/": {
      "get": {
        "summary": "認証インポートジョブを取得",
        "description": "1つのジョブのインポート進捗カウンターと最終ステータスを取得します。`status`が`COMPLETED`または`FAILED`になるまでポーリングしてください。`failed_count` > 0の場合は一部の行が拒否されています。エラーエンドポイントで一覧を取得してください。",
        "operationId": "get_v3_session_imports_retrieve",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "インポートジョブのステータス。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションのインポートジョブが見つかりません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションのインポートジョブを読み取る権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "summary": "APIキーがない、無効、または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/errors/": {
      "get": {
        "summary": "認証インポートの行エラーを一覧表示",
        "description": "検証インポートジョブの行単位のエラーを`row_number`順に一覧表示します。このエンドポイントを使用して、失敗した行のみを含む修正済みの再試行ファイルを作成します。",
        "operationId": "get_v3_session_imports_errors",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "list_errors",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。省略時は50です。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            },
            "description": "返す最初のレコードの0始まりのオフセットです。"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割された行エラーの一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "エラー行の数。100までは正確な値で、それを超える場合は100が上限となります。最終ページの判定には`next`が`null`であることを利用してください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/SessionImportError"
                      }
                    }
                  }
                },
                "examples": {
                  "Row errors": {
                    "value": {
                      "count": 1,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d",
                          "row_number": 17,
                          "external_id": "ext-000017",
                          "error": "status: invalid value 'unknown_status'",
                          "raw_row": {
                            "external_id": "ext-000017",
                            "status": "unknown_status",
                            "first_name": "Jane"
                          },
                          "created_at": "2026-05-17T08:44:02Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションのインポートジョブが見つかりません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションのインポートジョブを読み取る権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "summary": "APIキーがない、無効、または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.sessions.imports.list_errors(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.sessions.imports.listErrors(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.Imports.ListErrorsAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsImportsListErrorsParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.sessions().imports().listErrors(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->sessions->imports->listErrors('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.imports.list_errors(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Sessions.Imports.ListErrorsAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/decision/": {
      "get": {
        "summary": "検証セッションの完全な判定を取得",
        "description": "検証セッションの完全な判定レポートを取得します。セッション全体の`status`に加え、ワークフローが実行した検証機能ごとに1件のレポートが含まれます。これはユーザー認証(KYC)と法人確認(KYB)の両方のセッションに対する正規の読み取りエンドポイントです。同じパスで両方に対応し、トップレベルの`session_kind`判別子によって、受け取ったデータの形(`\"user\"`または`\"business\"`)がわかります。\n\n**各機能レポートは複数形の配列です**。V3ワークフローは同じ機能を複数回実行できるグラフであるため、各ブロック(`id_verifications`、`nfc_verifications`、`liveness_checks`、`face_matches`、`poa_verifications`、`document_ai_documents`、`phone_verifications`、`email_verifications`、`aml_screenings`、`ip_analyses`、`database_validations`、`questionnaire_responses`)はJSON配列であり、各項目にはそれを生成したワークフローグラフのノードを識別する`node_id`が含まれます。NFCは`response.nfc_verifications[0]`として読み取ってください。単数形の`nfc`フィールドとして読み取ってはいけません。ブロックは、ワークフローがその機能を少なくとも1回実行するまで`null`です。ワークフローに含まれない機能がデータ付きで表示されることはありません。電子署名の結果は`signatures`に含まれ、これはワークフローに電子署名ステップがある場合にのみ存在します。\n\n**呼び出すタイミング**。推奨されるパターンはイベント駆動型です。セッションが判定(`Approved`、`Declined`、`In Review`)に達したときに発生する`status.updated`Webhookを待ち、その後このエンドポイントを1回呼び出して完全なレポートを取得します。ポーリングも可能です(エンドポイントはセッションのライフサイクルのどの時点でも呼び出すことができ、それまでに生成されたデータを返します)が、Webhookを受信してから取得する方式のほうが低コストかつ高速です。レスポンス内のメディアURL(書類画像、動画、PDF)は有効期間の短い署名付きリンクです。速やかに取得するか、判定を再度リクエストして新しいリンクを取得してください。また、長期的な参照として保存しないでください。\n\n**ステータス**。トップレベルの`status`はセッションのライフサイクルステータス(`Not Started`、`In Progress`、`Awaiting User`、`In Review`、`Approved`、`Declined`、`Resubmitted`、`Expired`、`Kyc Expired`、`Abandoned`)です。各機能の項目には、これとは別に独自の機能レベルの`status`(`Not Finished`、`Approved`、`Declined`、`In Review`など)が含まれます。ワークフローの判定ルールによっては、個々の機能が`In Review`であってもセッション全体が`Approved`になる場合があります。\n\n**認証と表示範囲**。`x-api-key`ヘッダーにアプリケーションのAPIキーを指定して認証します(`read:sessions`権限を持つコンソールユーザーのBearerトークンも使用できます)。認証されたアプリケーションが所有するセッションのみが表示されます。ワークフローでレスポンス属性を制限している場合、機能項目内の許可されていないフィールドは`null`として返されますが、`status`、`warnings`、`node_id`は常に保持されます。\n\n**レート制限**。GETリクエストはAPIキーごとに1分あたり600件に制限されています。制限を超えると、`Retry-After`および`X-RateLimit-*`ヘッダーとともに`429`が返されます。",
        "operationId": "get_v3_session_decision",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "retrieve_decision",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "responses": {
          "200": {
            "description": "判定の完全なレポート。`session_kind`で2つの形式を区別します。`user`セッションには以下に示すKYC機能の配列が含まれ、`business`セッションには共通の配列に加えて`registry_checks`、`document_verifications`、`key_people_checks`が含まれます。機能の配列は、ワークフローがその機能を実行するまで`null`です。メディアURLは有効期間の短い署名付きリンクです。",
            "content": {
              "application/json": {
                "examples": {
                  "Example": {
                    "summary": "完全な例",
                    "value": {
                      "session_id": "11111111-2222-3333-4444-555555555555",
                      "session_kind": "user",
                      "session_number": 43762,
                      "session_url": "https://verify.didit.me/session/11111111-2222-3333-4444-555555555555",
                      "status": "In Review",
                      "environment": "live",
                      "workflow_id": "11111111-2222-3333-4444-555555555555",
                      "features": [
                        "ID_VERIFICATION",
                        "NFC",
                        "LIVENESS",
                        "FACE_MATCH",
                        "POA",
                        "PHONE",
                        "DATABASE_VALIDATION",
                        "AML",
                        "IP_ANALYSIS"
                      ],
                      "vendor_data": "11111111-1111-1111-1111-111111111111",
                      "metadata": {
                        "user_type": "premium",
                        "account_id": "ABC123"
                      },
                      "expected_details": {
                        "first_name": "Carmen",
                        "last_name": "Española Española"
                      },
                      "contact_details": {
                        "email": "carmen@example.com",
                        "email_lang": "es",
                        "send_notification_emails": false,
                        "phone": null
                      },
                      "callback": "https://verify.didit.me/",
                      "id_verifications": [
                        {
                          "node_id": "feature_ocr_1",
                          "status": "Approved",
                          "document_type": "Identity Card",
                          "document_subtype": "ID_CARD_GENERIC",
                          "document_number": "CAA000000",
                          "personal_number": "99999999R",
                          "portrait_image": "https://<media-host>/portrait.jpg",
                          "front_image": "https://<media-host>/front.jpg",
                          "front_video": "https://<media-host>/front.mp4",
                          "back_image": "https://<media-host>/back.jpg",
                          "back_video": "https://<media-host>/back.mp4",
                          "full_front_image": "https://<media-host>/full_front.jpg",
                          "full_back_image": "https://<media-host>/full_back.jpg",
                          "front_image_camera_front": "https://<media-host>/front_camera_front.jpg",
                          "back_image_camera_front": "https://<media-host>/back_camera_front.jpg",
                          "date_of_birth": "1980-01-01",
                          "age": 45,
                          "expiration_date": "2031-06-02",
                          "date_of_issue": "2021-06-02",
                          "issuing_state": "ESP",
                          "issuing_state_name": "Spain",
                          "first_name": "Carmen",
                          "last_name": "Española Española",
                          "full_name": "Carmen Española Española",
                          "gender": "F",
                          "address": "Avda de Madrid 34, Madrid, Madrid",
                          "formatted_address": "Avda de Madrid 34, Madrid, Madrid 28822, Spain",
                          "place_of_birth": "Madrid",
                          "marital_status": "Single",
                          "nationality": "ESP",
                          "extra_fields": {
                            "dl_categories": [],
                            "blood_group": null
                          },
                          "mrz": {
                            "surname": "ESPANOLA ESPANOLA",
                            "name": "CARMEN",
                            "country": "ESP",
                            "nationality": "ESP",
                            "birth_date": "800101",
                            "expiry_date": "310602",
                            "sex": "F",
                            "document_type": "ID",
                            "document_number": "CAA000000",
                            "optional_data": "99999999R",
                            "optional_data_2": "",
                            "birth_date_hash": "4",
                            "expiry_date_hash": "8",
                            "document_number_hash": "4",
                            "final_hash": "1",
                            "personal_number": "99999999R",
                            "warnings": [],
                            "errors": [],
                            "mrz_type": "TD1",
                            "mrz_string": "IDESPCAA000000499999999R<<<<<<\n8001014F3106028ESP<<<<<<<<<<<1\nESPANOLA<ESPANOLA<<CARMEN<<<<<",
                            "mrz_key": "CAA000000480010143106028"
                          },
                          "parsed_address": {
                            "city": "Madrid",
                            "label": "Spain ID Card Address",
                            "region": "Madrid",
                            "country": "ES",
                            "category": "Residential",
                            "street_1": "Avda de Madrid 34",
                            "street_2": null,
                            "is_verified": true,
                            "postal_code": "28822",
                            "raw_results": {
                              "types": [
                                "street_address"
                              ],
                              "geometry": {
                                "location": {
                                  "lat": 37.4222804,
                                  "lng": -122.0843428
                                },
                                "viewport": {
                                  "northeast": {
                                    "lat": 37.4237349802915,
                                    "lng": -122.083183169709
                                  },
                                  "southwest": {
                                    "lat": 37.4210370197085,
                                    "lng": -122.085881130292
                                  }
                                },
                                "location_type": "ROOFTOP"
                              },
                              "place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
                              "formatted_address": "Avda de Madrid 34, 28822 Madrid, Spain",
                              "navigation_points": [
                                {
                                  "location": {
                                    "latitude": 37.4222804,
                                    "longitude": -122.0843428
                                  }
                                }
                              ],
                              "address_components": [
                                {
                                  "types": [
                                    "street_number"
                                  ],
                                  "long_name": "34",
                                  "short_name": "34"
                                },
                                {
                                  "types": [
                                    "route"
                                  ],
                                  "long_name": "Avda de Madrid",
                                  "short_name": "Avda de Madrid"
                                },
                                {
                                  "types": [
                                    "locality",
                                    "political"
                                  ],
                                  "long_name": "Madrid",
                                  "short_name": "Madrid"
                                },
                                {
                                  "types": [
                                    "country",
                                    "political"
                                  ],
                                  "long_name": "Spain",
                                  "short_name": "ES"
                                },
                                {
                                  "types": [
                                    "postal_code"
                                  ],
                                  "long_name": "28822",
                                  "short_name": "28822"
                                }
                              ]
                            },
                            "address_type": "Avda",
                            "document_location": {
                              "latitude": 37.4222804,
                              "longitude": -122.0843428
                            },
                            "formatted_address": "Avda de Madrid 34, 28822 Madrid, Spain"
                          },
                          "front_image_camera_front_face_match_score": 95.5,
                          "back_image_camera_front_face_match_score": 93.2,
                          "document_selfie_face_matches": [
                            {
                              "session_id": "3f0c9a52-7b1e-4d68-a2c4-5e9d8b7f1a20",
                              "session_number": 1180,
                              "similarity_percentage": 97.4,
                              "vendor_data": "user_ref_001",
                              "vendor_user_id": null,
                              "biometric_template_id": null,
                              "verification_date": "2026-09-02T09:15:00Z",
                              "user_details": {
                                "full_name": "Jane Doe"
                              },
                              "match_image_url": "https://<media-host>/match_face.jpg",
                              "status": "Approved",
                              "is_blocklisted": false,
                              "is_allowlisted": false,
                              "api_service": null,
                              "source": "session"
                            }
                          ],
                          "front_image_quality_score": {
                            "focus_score": 85.3,
                            "brightness_score": 92.1,
                            "brightness_issue": "ok",
                            "is_document_fully_visible": true,
                            "resolution_score": 72.4,
                            "overall_score": 88.7
                          },
                          "back_image_quality_score": {
                            "focus_score": 79.1,
                            "brightness_score": 90.5,
                            "brightness_issue": "ok",
                            "is_document_fully_visible": true,
                            "resolution_score": 72.4,
                            "overall_score": 85.2
                          },
                          "extra_files": [
                            "https://<media-host>/extra_id_verification.jpg"
                          ],
                          "matches": [
                            {
                              "session_id": "7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f",
                              "session_number": 1234,
                              "vendor_data": "user_ref_001",
                              "verification_date": "2024-06-15T10:30:00Z",
                              "user_details": {
                                "name": "John Smith",
                                "document_type": "ID",
                                "document_number": "CLM148418"
                              },
                              "status": "Approved",
                              "is_blocklisted": false,
                              "api_service": null,
                              "front_image_url": "https://<media-host>/document_front.jpg"
                            },
                            {
                              "session_id": "b2c8e4d1-6a3f-4e7b-95c0-1d8f2a6b4c9e",
                              "session_number": 1235,
                              "vendor_data": null,
                              "verification_date": "2024-05-20T14:45:00Z",
                              "user_details": {
                                "name": "John Smith",
                                "document_type": "ID",
                                "document_number": "CLM148418"
                              },
                              "status": "Declined",
                              "is_blocklisted": true,
                              "api_service": "ID_VERIFICATION",
                              "front_image_url": "https://<media-host>/document_front_2.jpg"
                            }
                          ],
                          "warnings": [
                            {
                              "feature": "ID_VERIFICATION",
                              "risk": "QR_NOT_DETECTED",
                              "additional_data": null,
                              "log_type": "information",
                              "short_description": "QR not detected",
                              "long_description": "The system couldn't find or read the QR code on the document, which is necessary for document verification. This could be due to poor image quality or an unsupported document type.",
                              "node_id": "feature_ocr_1"
                            }
                          ],
                          "verification_method": "document",
                          "assurance": "documentary",
                          "wallet_provider": null,
                          "fallback_from": null,
                          "id_lookup": null,
                          "wallet_verification": null,
                          "document_liveness": {
                            "portrait_replace": {
                              "score": 96.46,
                              "front": 96.46,
                              "back": 98.2,
                              "decline_threshold": 35,
                              "review_threshold": 70,
                              "bucket": "approve"
                            },
                            "printed_copy": {
                              "score": 91.2,
                              "front": 91.2,
                              "back": 93.7,
                              "decline_threshold": 35,
                              "review_threshold": 77,
                              "bucket": "approve"
                            },
                            "screen_replay": {
                              "score": 99.9,
                              "front": 99.9,
                              "back": 99.5,
                              "decline_threshold": 30,
                              "review_threshold": 70,
                              "bucket": "approve"
                            }
                          }
                        },
                        {
                          "node_id": "feature_ocr_2",
                          "status": "Approved",
                          "issuing_state": "ZAF",
                          "issuing_state_name": "South Africa",
                          "first_name": "Thabo",
                          "last_name": "Mokoena",
                          "full_name": "Thabo Mokoena",
                          "date_of_birth": "1991-06-15",
                          "personal_number": "9106155043088",
                          "verification_method": "id_lookup",
                          "assurance": "data_match",
                          "wallet_provider": null,
                          "fallback_from": null,
                          "id_lookup": {
                            "source": "Department of Home Affairs",
                            "checked_at": "2026-09-04T09:12:44Z",
                            "attempts": 1,
                            "max_attempts": 2,
                            "outcome": "match",
                            "comparison": [
                              {
                                "field": "identification_number",
                                "label": "ID number",
                                "provided": "9106155043088",
                                "record": "9106155043088",
                                "result": "match"
                              },
                              {
                                "field": "full_name",
                                "label": "Full name",
                                "provided": "Thabo Mokoena",
                                "record": "Thabo Mokoena",
                                "result": "match"
                              },
                              {
                                "field": "date_of_birth",
                                "label": "Date of birth",
                                "provided": "1991-06-15",
                                "record": "1991-06-15",
                                "result": "match"
                              }
                            ],
                            "registry_portrait": "https://<media-host>/registry_portrait.jpg",
                            "face_match_score": 96.4,
                            "source_errors": []
                          },
                          "wallet_verification": null,
                          "warnings": []
                        },
                        {
                          "node_id": "feature_ocr_3",
                          "status": "Approved",
                          "issuing_state": "DNK",
                          "issuing_state_name": "Denmark",
                          "first_name": "Freja",
                          "last_name": "Nielsen",
                          "full_name": "Freja Nielsen",
                          "date_of_birth": "1988-03-02",
                          "verification_method": "wallet",
                          "assurance": "cryptographic",
                          "wallet_provider": "mitid",
                          "fallback_from": null,
                          "id_lookup": null,
                          "wallet_verification": {
                            "provider": "mitid",
                            "provider_name": "MitID",
                            "issuing_authority": "Danish Agency for Digital Government",
                            "issuing_country": "DNK",
                            "credential_type": "person_identification",
                            "level_of_assurance": "substantial",
                            "verified_at": "2026-09-04T09:12:44Z",
                            "signature_valid": true,
                            "attributes": {
                              "full_name": "Freja Nielsen",
                              "date_of_birth": "1988-03-02",
                              "cpr_alias": "b0f1c2d3-e4f5-4678-9abc-def012345678"
                            },
                            "portrait": null,
                            "face_match_score": null
                          },
                          "warnings": []
                        }
                      ],
                      "nfc_verifications": [
                        {
                          "node_id": "feature_nfc_1",
                          "status": "In Review",
                          "is_nfc_skipped": false,
                          "skip_reason": null,
                          "chip_protocol": "icao",
                          "jpki": null,
                          "portrait_image": "https://<media-host>/portrait.jpg",
                          "signature_image": "https://<media-host>/signature.jpg",
                          "chip_data": {
                            "document_type": "ID",
                            "issuing_country": "ESP",
                            "document_number": "123456789",
                            "expiration_date": "2030-01-01",
                            "first_name": "John",
                            "last_name": "Smith",
                            "birth_date": "1990-05-15",
                            "gender": "M",
                            "nationality": "ESP",
                            "address": "CALLE MAYOR 123 4B, MADRID, MADRID",
                            "place_of_birth": "MADRID, MADRID"
                          },
                          "authenticity": {
                            "sod_integrity": true,
                            "dg_integrity": true
                          },
                          "certificate_summary": {
                            "issuer": "Common Name: CSCA SPAIN, Serial Number: 3, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
                            "subject": "Common Name: DS n-eID SPAIN 2, Organizational Unit: PASSPORT, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
                            "serial_number": "118120836164494130086420187336801405660",
                            "not_valid_after": "2031-02-18 10:21:11",
                            "not_valid_before": "2020-11-18 10:21:11"
                          },
                          "warnings": [
                            {
                              "feature": "NFC",
                              "risk": "DATA_INCONSISTENT",
                              "additional_data": null,
                              "log_type": "warning",
                              "short_description": "OCR and NFC mrz code extracted are not the same",
                              "long_description": "The Optical Character Recognition (OCR) data and the NFC chip data don't match, indicating potential document tampering or data inconsistency.",
                              "node_id": "feature_nfc_1"
                            }
                          ]
                        }
                      ],
                      "liveness_checks": [
                        {
                          "node_id": "feature_liveness_1",
                          "status": "Approved",
                          "method": "ACTIVE_3D",
                          "score": 89.92,
                          "reference_image": "https://<media-host>/reference.jpg",
                          "video_url": "https://<media-host>/video.mp4",
                          "age_estimation": 24.3,
                          "matches": [
                            {
                              "session_id": "7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f",
                              "session_number": 1234,
                              "vendor_data": "user_ref_001",
                              "verification_date": "2024-06-15T10:30:00Z",
                              "user_details": {
                                "full_name": "John Smith",
                                "document_type": "ID",
                                "document_number": "CLM148418"
                              },
                              "status": "Approved",
                              "is_blocklisted": false,
                              "is_allowlisted": false,
                              "api_service": null,
                              "source": "session",
                              "match_image_url": "https://<media-host>/face_match.jpg",
                              "similarity_percentage": 98.5
                            },
                            {
                              "session_id": "3e9a7c21-5b48-4f0e-9c6a-8d2f4b1e0a35",
                              "session_number": 1100,
                              "vendor_data": "customer_xyz",
                              "verification_date": "2024-04-10T09:15:00Z",
                              "user_details": {
                                "full_name": "John Smith",
                                "document_type": "P",
                                "document_number": "DZ8375806"
                              },
                              "status": "Approved",
                              "is_blocklisted": false,
                              "is_allowlisted": false,
                              "api_service": "PASSIVE_LIVENESS",
                              "source": "session",
                              "match_image_url": "https://<media-host>/face_match_2.jpg",
                              "similarity_percentage": 95.2
                            }
                          ],
                          "warnings": [
                            {
                              "feature": "LIVENESS",
                              "risk": "LOW_LIVENESS_SCORE",
                              "additional_data": null,
                              "log_type": "information",
                              "short_description": "Low liveness score",
                              "long_description": "The liveness check resulted in a low score, indicating potential use of non-live facial representations or poor-quality biometric data.",
                              "node_id": "feature_liveness_1"
                            }
                          ],
                          "face_quality": null,
                          "face_luminance": null
                        }
                      ],
                      "face_matches": [
                        {
                          "node_id": "feature_face_match_1",
                          "status": "In Review",
                          "score": 65.43,
                          "source_image_session_id": null,
                          "source_image": "https://<media-host>/source-image.jpg",
                          "target_image": "https://<media-host>/target-image.jpg",
                          "warnings": [
                            {
                              "feature": "FACEMATCH",
                              "risk": "LOW_FACE_MATCH_SIMILARITY",
                              "additional_data": null,
                              "log_type": "warning",
                              "short_description": "Low face match similarity",
                              "long_description": "The facial features of the provided image don't closely match the reference image, suggesting a potential identity mismatch.",
                              "node_id": "feature_face_match_1"
                            }
                          ]
                        }
                      ],
                      "phone_verifications": [
                        {
                          "node_id": "feature_phone_1",
                          "status": "Approved",
                          "phone_number_prefix": "+34",
                          "phone_number": "600600600",
                          "full_number": "+34600600600",
                          "country_code": "ES",
                          "country_name": "Spain",
                          "carrier": {
                            "name": "Orange",
                            "type": "mobile"
                          },
                          "is_disposable": false,
                          "is_virtual": false,
                          "verification_method": "sms",
                          "verification_attempts": 1,
                          "verified_at": "2024-07-28T06:47:35.654321Z",
                          "lifecycle": [
                            {
                              "type": "PHONE_VERIFICATION_MESSAGE_SENT",
                              "timestamp": "2025-08-24T09:12:39.580554+00:00",
                              "details": {
                                "status": "Success",
                                "reason": null,
                                "channel": "sms",
                                "actual_channel": "sms"
                              },
                              "fee": 0.1
                            },
                            {
                              "type": "VALID_CODE_ENTERED",
                              "timestamp": "2025-08-24T09:12:39.662157+00:00",
                              "details": {
                                "code_tried": "123456",
                                "status": "Approved"
                              },
                              "fee": 0
                            },
                            {
                              "type": "PHONE_VERIFICATION_APPROVED",
                              "timestamp": "2025-08-24T09:12:39.684292+00:00",
                              "details": null,
                              "fee": 0
                            }
                          ],
                          "warnings": [],
                          "matches": [
                            {
                              "session_id": null,
                              "session_number": null,
                              "vendor_data": null,
                              "verification_date": null,
                              "phone_number": "+34600000000",
                              "status": null,
                              "is_blocklisted": true,
                              "api_service": null,
                              "source": "list_entry"
                            }
                          ]
                        }
                      ],
                      "email_verifications": [
                        {
                          "node_id": "feature_email_1",
                          "status": "Approved",
                          "email": "test@example.com",
                          "is_breached": true,
                          "breaches": [
                            {
                              "name": "TAPAirPortugal",
                              "domain": "flytap.com",
                              "logo_path": "https://logos.example.com/TAPAirPortugal.png",
                              "breach_date": "2022-08-25",
                              "description": "In August 2022, the Portuguese airline <a href=\"https://www.bleepingcomputer.com/news/security/ragnar-locker-ransomware-claims-attack-on-portugals-flag-airline/\" target=\"_blank\" rel=\"noopener\">TAP Air Portugal was the target of a ransomware attack perpetrated by the Ragnar Locker gang</a> who later leaked the compromised data via a public dark web site. Over 5M unique email addresses were exposed alongside other personal data including names, genders, DoBs, phone numbers and physical addresses.",
                              "is_verified": true,
                              "data_classes": [
                                "dates_of_birth",
                                "email_addresses",
                                "genders",
                                "names",
                                "nationalities",
                                "phone_numbers",
                                "physical_addresses",
                                "salutations",
                                "spoken_languages"
                              ],
                              "breach_emails_count": 6083479
                            }
                          ],
                          "is_disposable": false,
                          "is_undeliverable": false,
                          "verification_attempts": 1,
                          "verified_at": "2025-09-15T17:36:19.963451Z",
                          "warnings": [
                            {
                              "feature": "EMAIL",
                              "risk": "BREACHED_EMAIL_DETECTED",
                              "additional_data": null,
                              "log_type": "information",
                              "short_description": "Breached email detected",
                              "long_description": "This email address was found in one or more known data breaches.",
                              "node_id": "feature_email_1"
                            }
                          ],
                          "lifecycle": [
                            {
                              "type": "EMAIL_VERIFICATION_MESSAGE_SENT",
                              "timestamp": "2025-09-15T17:36:19.792684+00:00",
                              "details": {
                                "status": "Success",
                                "reason": null
                              },
                              "fee": 0.02
                            },
                            {
                              "type": "VALID_CODE_ENTERED",
                              "timestamp": "2025-09-15T17:36:19.963427+00:00",
                              "details": {
                                "code_tried": "123456",
                                "status": "Approved"
                              },
                              "fee": 0
                            },
                            {
                              "type": "EMAIL_VERIFICATION_DECLINED",
                              "timestamp": "2025-09-15T17:36:20.081471+00:00",
                              "details": {
                                "reason": "BREACHED_EMAIL_DETECTED"
                              },
                              "fee": 0
                            }
                          ],
                          "matches": [
                            {
                              "session_id": null,
                              "session_number": null,
                              "vendor_data": null,
                              "verification_date": null,
                              "email": "test@example.com",
                              "status": null,
                              "is_blocklisted": true,
                              "api_service": null,
                              "source": "list_entry"
                            }
                          ]
                        }
                      ],
                      "poa_verifications": [
                        {
                          "node_id": "feature_poa_1",
                          "status": "Declined",
                          "document_file": "https://<media-host>/poa_document.pdf",
                          "issuing_state": "AR",
                          "document_type": "UTILITY_BILL",
                          "document_subtype": null,
                          "document_language": "es",
                          "document_metadata": {
                            "file_size": 1000,
                            "content_type": "application/pdf",
                            "creation_date": "2021-01-01",
                            "modified_date": "2021-01-01",
                            "overlay_manipulation": null,
                            "creator": null,
                            "producer": "PDF Generator",
                            "software": null,
                            "encryption": null,
                            "is_signed": false,
                            "is_tampered": false,
                            "signature_info": null,
                            "exif_original_date": null,
                            "exif_digitized_date": null,
                            "processed_by_known_editor": false,
                            "has_different_creation_mod_date": true
                          },
                          "issuer": "Aguas del Norte",
                          "issue_date": "2021-02-01",
                          "expiration_date": null,
                          "poa_address": "AVDA. MONSEÑOR TAVELLA N° 3396, SALTA",
                          "poa_formatted_address": "Av. Monseñor Tavella 3396, A4400 Salta, Argentina",
                          "poa_parsed_address": {
                            "address_type": "Avenida",
                            "street_1": "Avenida Monseñor Tavella 3396",
                            "street_2": null,
                            "city": "Salta",
                            "region": "Salta",
                            "country": "AR",
                            "postal_code": "A4400",
                            "document_location": {
                              "latitude": -24.8208664,
                              "longitude": -65.4131
                            }
                          },
                          "name_on_document": "Fernando De Lima",
                          "name_match_score_expected_details": null,
                          "name_match_score_id_verification": 38.5,
                          "expected_details_address": null,
                          "expected_details_formatted_address": null,
                          "expected_details_parsed_address": {},
                          "extra_fields": {
                            "bank_account_number": "1234567890",
                            "bank_iban": null,
                            "bank_sort_code": null,
                            "bank_routing_number": null,
                            "bank_swift_bic": null,
                            "bank_branch_name": null,
                            "bank_branch_address": null,
                            "document_phone_number": "+5491112345678",
                            "additional_names": []
                          },
                          "extra_files": [
                            "https://<media-host>/extra_poa.pdf"
                          ],
                          "detected_codes": [
                            {
                              "type": "QR_CODE",
                              "page_number": 1,
                              "position": [
                                [
                                  820,
                                  1120
                                ],
                                [
                                  1002,
                                  1120
                                ],
                                [
                                  1002,
                                  1302
                                ],
                                [
                                  820,
                                  1302
                                ]
                              ],
                              "x": 820,
                              "y": 1120,
                              "width": 182,
                              "height": 182,
                              "page_width": 1190,
                              "page_height": 1684,
                              "raw_payload": "aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==",
                              "parsed_payload": "https://aguasdelnorte.com/factura/998811"
                            },
                            {
                              "type": "CODE_128",
                              "page_number": 1,
                              "position": [
                                [
                                  112,
                                  1480
                                ],
                                [
                                  560,
                                  1480
                                ],
                                [
                                  560,
                                  1540
                                ],
                                [
                                  112,
                                  1540
                                ]
                              ],
                              "x": 112,
                              "y": 1480,
                              "width": 448,
                              "height": 60,
                              "page_width": 1190,
                              "page_height": 1684,
                              "raw_payload": "MDA5OTg4MTEwMDA0Mg==",
                              "parsed_payload": "0099881100042"
                            }
                          ],
                          "warnings": []
                        }
                      ],
                      "document_ai_documents": [
                        {
                          "status": "Approved",
                          "node_id": "feature_document_ai_1",
                          "items": [
                            {
                              "uuid": "c1a2b3c4-d5e6-7f80-9a1b-2c3d4e5f6071",
                              "node_id": "feature_document_ai_1",
                              "document_key": "proof_of_funds",
                              "original_filename": "bank_statement.pdf",
                              "file_size": 184320,
                              "file_url": "https://<media-host>/document_ai/proof_of_funds.pdf",
                              "status": "Approved",
                              "extracted_data": {
                                "account_holder": "John Doe",
                                "balance": 15230.55,
                                "currency": "EUR",
                                "statement_date": "2026-05-31"
                              },
                              "detected_codes": [
                                {
                                  "type": "QR_CODE",
                                  "page_number": 2,
                                  "position": [
                                    [
                                      124,
                                      86
                                    ],
                                    [
                                      306,
                                      86
                                    ],
                                    [
                                      306,
                                      268
                                    ],
                                    [
                                      124,
                                      268
                                    ]
                                  ],
                                  "x": 124,
                                  "y": 86,
                                  "width": 182,
                                  "height": 182,
                                  "page_width": 1190,
                                  "page_height": 1684,
                                  "raw_payload": "SU5WLTIwMjYtMDA0Mg==",
                                  "parsed_payload": "INV-2026-0042"
                                }
                              ],
                              "fields": [
                                {
                                  "key": "account_holder",
                                  "name": "Account holder",
                                  "instruction": "Extract the full name of the account holder.",
                                  "type": "text",
                                  "required": true
                                },
                                {
                                  "key": "balance",
                                  "name": "Closing balance",
                                  "instruction": "Extract the closing balance amount.",
                                  "type": "number",
                                  "required": true
                                }
                              ],
                              "document_metadata": {
                                "is_tampered": false
                              },
                              "cross_check_result": null,
                              "created_at": "2026-06-01T12:34:56Z"
                            }
                          ],
                          "warnings": []
                        }
                      ],
                      "questionnaire_responses": [
                        {
                          "node_id": "feature_questionnaire_1",
                          "questionnaire_id": "9f7485e0-b00b-4d56-9d3e-7859b68d1213",
                          "title": "Source of Funds",
                          "description": "Reply to this questionnaire to help us understand the source of funds.",
                          "languages": [
                            "en"
                          ],
                          "default_language": "en",
                          "is_active": true,
                          "is_simple_questionnaire": true,
                          "questionnaire_group_id": "2b6a9d40-13a8-4b1e-9a6c-3f1d2e4b5a60",
                          "version": 1,
                          "published_at": "2025-11-02T09:14:55.000000Z",
                          "sections": [
                            {
                              "title": null,
                              "description": null,
                              "items": [
                                {
                                  "uuid": "618636d9-7d5c-41ce-b8d0-1ab2a4be20db",
                                  "value": "question_1",
                                  "element_type": "DROPDOWN",
                                  "is_required": true,
                                  "title": "What is your primary source of funds?",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": [
                                    {
                                      "label": "Salary",
                                      "value": "salary"
                                    },
                                    {
                                      "label": "Business Income",
                                      "value": "business_income"
                                    },
                                    {
                                      "label": "Savings",
                                      "value": "savings"
                                    },
                                    {
                                      "label": "Investments",
                                      "value": "investments"
                                    },
                                    {
                                      "label": "Sale of Asset",
                                      "value": "sale_of_asset"
                                    },
                                    {
                                      "label": "Inheritance/Gift",
                                      "value": "inheritance_gift"
                                    },
                                    {
                                      "label": "Pension",
                                      "value": "pension"
                                    },
                                    {
                                      "label": "Crypto Proceeds",
                                      "value": "crypto_proceeds"
                                    },
                                    {
                                      "label": "Other",
                                      "value": "other",
                                      "requires_text_input": true
                                    }
                                  ],
                                  "max_files": 1,
                                  "answer": {
                                    "value": "salary"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "2d16b527-72be-42e0-8e96-b164b818386c",
                                  "value": "question_2",
                                  "element_type": "LONG_TEXT",
                                  "is_required": true,
                                  "title": "Provide details of the primary source.",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": null,
                                  "max_files": 1,
                                  "answer": {
                                    "value": "Test answer"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "a9239b7c-fbfb-4ea7-b7e4-c835cd4016e0",
                                  "value": "question_3",
                                  "element_type": "DROPDOWN",
                                  "is_required": true,
                                  "title": "What is your annual income range (pre-tax)?",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": [
                                    {
                                      "label": "Less than $25,000",
                                      "value": "<25k"
                                    },
                                    {
                                      "label": "$25,000 - $50,000",
                                      "value": "25k-50k"
                                    },
                                    {
                                      "label": "$50,001 - $100,000",
                                      "value": "50k-100k"
                                    },
                                    {
                                      "label": "$100,001 - $250,000",
                                      "value": "100k-250k"
                                    },
                                    {
                                      "label": "More than $250,000",
                                      "value": ">250k"
                                    }
                                  ],
                                  "max_files": 1,
                                  "answer": {
                                    "value": "<25k"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "93dede62-6d0c-4a7f-934d-42175eb94011",
                                  "value": "question_4",
                                  "element_type": "DROPDOWN",
                                  "is_required": true,
                                  "title": "What is your approximate net worth (range)?",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": [
                                    {
                                      "label": "Less than $50,000",
                                      "value": "<50k"
                                    },
                                    {
                                      "label": "$50,000 - $250,000",
                                      "value": "50k-250k"
                                    },
                                    {
                                      "label": "$250,001 - $1,000,000",
                                      "value": "250k-1m"
                                    },
                                    {
                                      "label": "$1,000,001 - $5,000,000",
                                      "value": "1m-5m"
                                    },
                                    {
                                      "label": "More than $5,000,000",
                                      "value": ">5m"
                                    }
                                  ],
                                  "max_files": 1,
                                  "answer": {
                                    "value": "<50k"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "2af60d6f-6961-4692-9ee7-24b3033610a6",
                                  "value": "question_5",
                                  "element_type": "LONG_TEXT",
                                  "is_required": true,
                                  "title": "For your initial deposit/funding, indicate the exact source and amount.",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": null,
                                  "max_files": 1,
                                  "answer": {
                                    "value": "Test answer"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "0ad9d1aa-736f-46cf-947b-9e1241b53e40",
                                  "value": "question_6",
                                  "element_type": "LONG_TEXT",
                                  "is_required": true,
                                  "title": "Breakdown of sources by percentage.",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": null,
                                  "max_files": 1,
                                  "answer": {
                                    "value": "Test answer"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "1bf8a2a3-14ee-48a8-bb3d-175481aae4aa",
                                  "value": "question_7",
                                  "element_type": "SINGLE_CHOICE",
                                  "is_required": true,
                                  "title": "Will any funds originate from third parties? If yes, please provide details.",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": [
                                    {
                                      "label": "Yes",
                                      "value": "yes",
                                      "requires_text_input": true
                                    },
                                    {
                                      "label": "No",
                                      "value": "no"
                                    }
                                  ],
                                  "max_files": 1,
                                  "answer": {
                                    "text": "Additional details",
                                    "value": "yes"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "e18d4dd3-b7bf-4883-ba18-d6046adbe313",
                                  "value": "question_8",
                                  "element_type": "SINGLE_CHOICE",
                                  "is_required": true,
                                  "title": "Do you hold or plan to use virtual assets (e.g., crypto) to fund this account? If yes, please provide details.",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": [
                                    {
                                      "label": "Yes",
                                      "value": "yes",
                                      "requires_text_input": true
                                    },
                                    {
                                      "label": "No",
                                      "value": "no"
                                    }
                                  ],
                                  "max_files": 1,
                                  "answer": {
                                    "text": "Additional details",
                                    "value": "yes"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "a90a073d-e098-404c-bbce-5130d8b12a13",
                                  "value": "question_9",
                                  "element_type": "FILE_UPLOAD",
                                  "is_required": true,
                                  "title": "Upload a proof of funds document",
                                  "description": "You can upload your three (3) most recent bank statements, three (3) most recent payslips, your most recent tax return, proof of company ownership, trading exchange statement, sale of property, or proof of inheritance.",
                                  "placeholder": null,
                                  "choices": null,
                                  "max_files": 3,
                                  "answer": {
                                    "files": [
                                      "/media/ocr/",
                                      "/media/ocr/"
                                    ]
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                },
                                {
                                  "uuid": "9503b486-7cb8-4c3b-a97d-4b64926a5a47",
                                  "value": "question_10",
                                  "element_type": "LONG_TEXT",
                                  "is_required": false,
                                  "title": "Would you like to add any details to help us expedite our review of the documents you submitted?",
                                  "description": null,
                                  "placeholder": null,
                                  "choices": null,
                                  "max_files": 1,
                                  "answer": {
                                    "value": "Test answer"
                                  },
                                  "required_if": null,
                                  "repeatable_config": null
                                }
                              ]
                            }
                          ],
                          "status": "Approved"
                        }
                      ],
                      "aml_screenings": [
                        {
                          "node_id": "feature_aml_1",
                          "status": "In Review",
                          "total_hits": 1,
                          "entity_type": "person",
                          "hits": [
                            {
                              "id": "hit_7c1e9a40b2d35f86e0a4c912",
                              "url": "https://news.example.org/articles/sample",
                              "match": false,
                              "score": 0.73,
                              "target": null,
                              "caption": "Javier Ejemplo Modelo",
                              "datasets": [
                                "PEP"
                              ],
                              "features": null,
                              "rca_name": "",
                              "last_seen": "2025-06-13T00:00:00",
                              "risk_view": {
                                "crimes": {
                                  "score": 0,
                                  "weightage": 20,
                                  "risk_level": "Low",
                                  "risk_scores": {}
                                },
                                "countries": {
                                  "score": 0,
                                  "weightage": 30,
                                  "risk_level": "Low",
                                  "risk_scores": {}
                                },
                                "categories": {
                                  "score": 100,
                                  "weightage": 50,
                                  "risk_level": "High",
                                  "risk_scores": {
                                    "PEP": 100
                                  }
                                },
                                "custom_list": {}
                              },
                              "first_seen": "2025-01-18T00:00:00",
                              "properties": {
                                "name": [
                                  "Javier Ejemplo Modelo"
                                ],
                                "alias": [
                                  "Javier Ejemplo Modelo",
                                  "David Azagra"
                                ],
                                "notes": [
                                  "Spanish orchestra conductor"
                                ],
                                "title": null,
                                "gender": [
                                  "male"
                                ],
                                "height": null,
                                "topics": null,
                                "weight": null,
                                "address": null,
                                "country": null,
                                "website": null,
                                "eyeColor": null,
                                "keywords": null,
                                "lastName": [
                                  "Ejemplo",
                                  "Modelo"
                                ],
                                "position": null,
                                "religion": null,
                                "birthDate": [
                                  "1974"
                                ],
                                "education": [
                                  "Tokyo Arts and Space (2012-2012)",
                                  "Saint Petersburg Conservatory (-2010)",
                                  "Comillas Pontifical University"
                                ],
                                "ethnicity": null,
                                "firstName": [
                                  "David"
                                ],
                                "hairColor": null,
                                "weakAlias": null,
                                "birthPlace": [
                                  "Madrid"
                                ],
                                "modifiedAt": null,
                                "wikidataId": null,
                                "citizenship": null,
                                "nationality": null
                              },
                              "match_score": 98,
                              "risk_score": 73,
                              "review_status": "Unreviewed",
                              "score_breakdown": {
                                "name_score": 95,
                                "name_weight": 60,
                                "name_weight_normalized": 70.59,
                                "name_contribution": 67.06,
                                "dob_score": 100,
                                "dob_weight": 25,
                                "dob_weight_normalized": 29.41,
                                "dob_contribution": 29.41,
                                "country_score": 0,
                                "country_weight": 15,
                                "country_weight_normalized": 0,
                                "country_contribution": 0,
                                "document_number_match_type": "NEUTRAL",
                                "document_number_effect": "No document number provided for screening",
                                "total_score": 98
                              },
                              "pep_matches": [
                                {
                                  "aliases": [
                                    "Javier Ejemplo Modelo",
                                    "David Azagra"
                                  ],
                                  "education": [
                                    "Tokyo Arts and Space (2012-2012)",
                                    "Saint Petersburg Conservatory (-2010)",
                                    "Comillas Pontifical University"
                                  ],
                                  "list_name": "Wikidata",
                                  "publisher": "Wikidata",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "description": "Wikidata is the structured data project of the Wikipedia community, providing fact-based information edited by humans and machines",
                                  "matched_name": "Javier Ejemplo Modelo",
                                  "pep_position": "",
                                  "date_of_birth": "1974",
                                  "other_sources": [],
                                  "place_of_birth": "Madrid"
                                }
                              ],
                              "linked_entities": [
                                {
                                  "name": [
                                    "Antonio Ejemplo"
                                  ],
                                  "active": [],
                                  "status": [],
                                  "details": [],
                                  "relation": []
                                }
                              ],
                              "warning_matches": [],
                              "sanction_matches": [],
                              "adverse_media_details": {
                                "sentiment": "Moderately Negative",
                                "entity_type": "person",
                                "sentiment_score": -2,
                                "adverse_keywords": {
                                  "fraud": 3,
                                  "juicio": 1,
                                  "delitos": 2,
                                  "imputado": 1,
                                  "impunidad": 1,
                                  "corruption": 2,
                                  "favoritism": 2,
                                  "privilegio": 1,
                                  "corrupción": 1,
                                  "persecution": 2,
                                  "desconfianza": 1,
                                  "desprestigio": 1,
                                  "fraude de ley": 2,
                                  "manipulación": 1,
                                  "investigación": 3,
                                  "prevaricación": 8,
                                  "trato de favor": 1,
                                  "irregularidades": 2,
                                  "crisis de confianza": 1,
                                  "tráfico de influencias": 8
                                }
                              },
                              "adverse_media_matches": [
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo is implicated in legal violations related to favoritism and influence trafficking, leading to a negative portrayal in the article.",
                                  "headline": "La Diputación de Villaejemplo consolida la plaza a medida para el ex asesor de Moncloa amigo del \"hermanito\" de Ejemplo",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "fraud",
                                    "prevaricación",
                                    "tráfico de influencias",
                                    "irregularidades",
                                    "imputado"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-10T20:46:38"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo is implicated in legal issues regarding favoritism and corruption, leading to a negative portrayal in the article.",
                                  "headline": "La Diputación de Villaejemplo consolida la plaza a medida para el ex asesor de Moncloa amigo del \"hermanito\" de Ejemplo",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "fraud",
                                    "prevaricación",
                                    "tráfico de influencias",
                                    "irregularidades",
                                    "trato de favor"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-10T20:46:38"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo Modelo is mentioned in connection with Carlos Ficticio's corruption case, indicating his involvement in alleged influence peddling.",
                                  "headline": "España, paraíso del aforado",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "prevaricación",
                                    "tráfico de influencias",
                                    "corrupción",
                                    "impunidad",
                                    "privilegio",
                                    "desconfianza",
                                    "manipulación",
                                    "fraude de ley"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-10T05:05:34"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo Modelo is implicated in the same investigation as Ficticio, which raises questions about his conduct and political ethics.",
                                  "headline": "Aforamientos: esa figura incómoda",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "prevaricación",
                                    "tráfico de influencias",
                                    "investigación",
                                    "juicio",
                                    "fraude de ley",
                                    "desprestigio",
                                    "crisis de confianza",
                                    "delitos"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-08T06:01:00"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo is implicated in a legal investigation regarding irregularities in his hiring, which raises serious concerns about his conduct.",
                                  "headline": "La jueza del 'caso Javier Ejemplo' denuncia un «fraude de ley» en el aforamiento de Ficticio (Partido Ejemplo)",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "fraud",
                                    "irregularities",
                                    "prevaricación",
                                    "tráfico de influencias"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-09T10:19:10"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo Modelo is mentioned in connection with legal allegations of corruption, contributing to a negative perception.",
                                  "headline": "'Caso aforamiento': la letrada mayor de la Asamblea certifica a la juez que Ficticio es diputado desde antes de prometer su cargo en el Pleno",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "prevaricación",
                                    "tráfico de influencias"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-09T08:08:30"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo Modelo is implicated in the same investigation as Ficticio, raising concerns about political corruption and influence.",
                                  "headline": "Aforamientos: esa figura incómoda",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "prevaricación",
                                    "tráfico de influencias",
                                    "investigación"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-08T06:01:00"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo Modelo is implicated in the same investigation as Ficticio, which raises concerns about political misconduct.",
                                  "headline": "Aforamientos: esa figura incómoda",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "prevaricación",
                                    "tráfico de influencias",
                                    "investigación",
                                    "delitos"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-08T06:00:59"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo is implicated in a case of favoritism and corruption, which casts a negative light on his character and actions.",
                                  "headline": "'Caso Javier Ejemplo': las asociaciones judiciales salen en defensa de la juez Luisa Inventada ante las \"presiones externas\" que sufre",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "favoritism",
                                    "corruption",
                                    "persecution"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-06T10:08:15"
                                },
                                {
                                  "country": "spain",
                                  "summary": "Javier Ejemplo is implicated in a case of alleged favoritism and corruption, which casts a negative light on his character and actions.",
                                  "headline": "'Caso Javier Ejemplo': las asociaciones judiciales salen en defensa de la juez Luisa Inventada ante las \"presiones externas\" que sufre",
                                  "sentiment": "moderately negative",
                                  "thumbnail": "https://news.example.org/articles/sample",
                                  "source_url": "https://news.example.org/articles/sample",
                                  "author_name": null,
                                  "other_sources": [],
                                  "adverse_keywords": [
                                    "favoritism",
                                    "corruption",
                                    "persecution"
                                  ],
                                  "sentiment_score": -2,
                                  "publication_date": "2025-06-06T08:08:15"
                                }
                              ],
                              "additional_information": {}
                            }
                          ],
                          "score": 80,
                          "screened_data": {
                            "full_name": "Javier Ejemplo Modelo",
                            "nationality": "ES",
                            "date_of_birth": "1974-01-01",
                            "document_number": null
                          },
                          "is_ongoing_monitoring_enabled": true,
                          "next_ongoing_monitoring_bill_date": "2026-07-24",
                          "last_ongoing_screening_at": "2026-09-12T04:03:11Z",
                          "last_ongoing_screening_datasets_updated_at": "2026-09-11T06:00:00Z",
                          "warnings": [
                            {
                              "feature": "AML",
                              "risk": "POSSIBLE_MATCH_FOUND",
                              "additional_data": null,
                              "log_type": "warning",
                              "short_description": "Possible match found in AML screening",
                              "long_description": "The Anti-Money Laundering (AML) screening process identified potential matches with watchlists or high-risk databases, requiring further review.",
                              "node_id": "feature_aml_1"
                            }
                          ]
                        }
                      ],
                      "ip_analyses": [
                        {
                          "node_id": "feature_ip_1",
                          "status": "Approved",
                          "device_brand": "Apple",
                          "device_model": "iPhone",
                          "browser_family": "Mobile Safari",
                          "os_family": "iOS",
                          "platform": "mobile",
                          "device_fingerprint": "didit-fp-a1b2c3d4e5f6g7h8",
                          "ip_country": "Spain",
                          "ip_country_code": "ES",
                          "ip_state": "Barcelona",
                          "ip_city": "Barcelona",
                          "latitude": 41.4022,
                          "longitude": 2.1407,
                          "ip_address": "83.50.226.71",
                          "isp": null,
                          "organization": null,
                          "is_vpn_or_tor": false,
                          "is_data_center": false,
                          "time_zone": "Europe/Madrid",
                          "time_zone_offset": "+0100",
                          "ip": {
                            "location": {
                              "latitude": 40.2206327,
                              "longitude": 1.5770097
                            },
                            "distance_from_id_document": 23.4,
                            "distance_from_poa_document": 12.3
                          },
                          "id_document": {
                            "location": {
                              "latitude": 41.2706327,
                              "longitude": 1.9770097
                            },
                            "distance_from_ip": 23.4,
                            "distance_from_poa_document": 18.7
                          },
                          "poa_document": {
                            "location": {
                              "latitude": 41.2706327,
                              "longitude": 1.9770097
                            },
                            "distance_from_ip": 12.3,
                            "distance_from_id_document": 18.7
                          },
                          "warnings": [],
                          "matches": [
                            {
                              "session_id": "99999999-8888-7777-6666-555555555555",
                              "session_number": 41205,
                              "vendor_data": "22222222-2222-2222-2222-222222222222",
                              "verification_date": "2024-07-20T10:15:30Z",
                              "match_type": "ip_address",
                              "match_source": "ip_address",
                              "matched_value": "83.50.226.71",
                              "status": "Approved",
                              "is_blocklisted": false,
                              "api_service": null,
                              "source": "session",
                              "device_info": {
                                "device_brand": "Apple",
                                "device_model": "iPhone",
                                "browser_family": "Mobile Safari",
                                "os_family": "iOS",
                                "platform": "mobile",
                                "device_fingerprint": "didit-fp-f9e8d7c6b5a40312"
                              },
                              "location_info": {
                                "ip_address": "83.50.226.71",
                                "ip_country": "Spain",
                                "ip_country_code": "ES",
                                "ip_state": "Barcelona",
                                "ip_city": "Barcelona",
                                "is_vpn_or_tor": false,
                                "is_data_center": false
                              },
                              "confidence": 0.0,
                              "match_mode": "co_occurrence"
                            },
                            {
                              "session_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                              "session_number": 42830,
                              "vendor_data": "33333333-3333-3333-3333-333333333333",
                              "verification_date": "2024-06-30T18:22:05Z",
                              "match_type": "device_fingerprint",
                              "match_source": "recovered_high",
                              "matched_value": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
                              "status": "Declined",
                              "is_blocklisted": false,
                              "api_service": null,
                              "source": "session",
                              "device_info": {
                                "device_brand": "Samsung",
                                "device_model": "SM-G991B",
                                "browser_family": "Chrome Mobile",
                                "os_family": "Android",
                                "platform": "mobile",
                                "device_fingerprint": null
                              },
                              "location_info": {
                                "ip_address": "83.50.231.18",
                                "ip_country": "Spain",
                                "ip_country_code": "ES",
                                "ip_state": "Madrid",
                                "ip_city": "Madrid",
                                "is_vpn_or_tor": false,
                                "is_data_center": false
                              },
                              "confidence": 1.0,
                              "match_mode": "deterministic",
                              "recovery_similarity": 0.9874,
                              "tls_ja4_corroborated": true,
                              "recovery_gate_reason": "hardware_root_match"
                            }
                          ]
                        }
                      ],
                      "database_validations": [
                        {
                          "node_id": "feature_db_validation_1",
                          "issuing_state": "BRA",
                          "validation_type": "one_by_one",
                          "screened_data": {
                            "last_name": "De Lima",
                            "first_name": "Fernando",
                            "tax_number": "01234567890",
                            "date_of_birth": "1980-01-01",
                            "document_type": "ID",
                            "expiration_date": "2030-01-01"
                          },
                          "validations": [
                            {
                              "service_id": "bra_cpf",
                              "service_name": "Brazil - CPF status check",
                              "outcome_code": "MATCH",
                              "validation": {
                                "full_name": "full_match",
                                "date_of_birth": "full_match",
                                "identification_number": "full_match"
                              },
                              "source_data": {
                                "identification_number": "01234567890",
                                "first_name": "FERNANDO",
                                "last_name": "DE LIMA",
                                "date_of_birth": "1980-01-01",
                                "gender": "M",
                                "nationality": "BRA"
                              }
                            }
                          ],
                          "match_type": "full_match",
                          "status": "Approved",
                          "warnings": []
                        }
                      ],
                      "reviews": [
                        {
                          "user": "compliance@example.com",
                          "new_status": "Declined",
                          "comment": "Possible match found in AML screening",
                          "created_at": "2024-07-18T13:29:00.366811Z"
                        }
                      ],
                      "created_at": "2024-07-24T08:54:25.443172Z",
                      "expires_at": "2025-07-24T08:54:25.443172Z",
                      "biometric_consent": {
                        "required": false,
                        "trigger": null,
                        "status": "not_required",
                        "given_at": null,
                        "declined_at": null,
                        "text_version": null,
                        "text_hash": null,
                        "locale": null,
                        "policy_url": null,
                        "step": null,
                        "node_id": null,
                        "ip_address": null,
                        "ip_country_code": null,
                        "ip_state": null,
                        "ip_city": null,
                        "user_agent": null,
                        "detected_ip_address": "83.50.226.71",
                        "detected_country_code": "ES",
                        "detected_state": "ES-B",
                        "detected_city": "Barcelona",
                        "declared_state": null,
                        "document_state": null,
                        "jurisdictions": [],
                        "retention_months": null,
                        "reason": null,
                        "decline_reason": null,
                        "face_data_deleted_at": null
                      }
                    }
                  },
                  "BusinessExample": {
                    "summary": "企業(KYB)セッションの例",
                    "description": "`session_kind = \"business\"`の判定。KYBセッションでは、KYCの機能配列が`registry_checks`、`document_verifications`、`key_people_checks`に置き換えられ、`aml_screenings`、`phone_verifications`、`email_verifications`、`questionnaire_responses`、`ip_analyses`、`reviews`とセッションエンベロープは共通です。",
                    "value": {
                      "session_id": "66666666-7777-8888-9999-000000000000",
                      "session_kind": "business",
                      "session_number": 31415,
                      "session_url": "https://verify.didit.me/session/business123",
                      "status": "In Review",
                      "environment": "live",
                      "workflow_id": "abababab-cdcd-efef-0101-232323232323",
                      "features": [
                        "KYB_REGISTRY",
                        "KYB_DOCUMENTS",
                        "KYB_KEY_PEOPLE"
                      ],
                      "vendor_data": "merchant-001234",
                      "metadata": null,
                      "callback": "https://example.com/verification/callback",
                      "registry_checks": [
                        {
                          "status": "Approved",
                          "node_id": "feature_kyb_registry_1",
                          "data_resolved": true,
                          "company": {
                            "uuid": "dddd4444-eeee-5555-ffff-666677778888",
                            "node_id": "feature_kyb_registry_1",
                            "status": "Approved",
                            "registry_status": "active",
                            "data_resolved": true,
                            "company_name": "ACME HOLDINGS LTD",
                            "registration_number": "12345678",
                            "country_code": "GB",
                            "region": null,
                            "company_type": "Private Limited Company",
                            "incorporation_date": "2015-03-12",
                            "registered_address": "1 Example Street, London, EC1A 1AA",
                            "tax_number": null,
                            "risk_level": null,
                            "verification_status": null,
                            "is_from_registry": true,
                            "fetch_status": "resolved",
                            "alternative_names": null,
                            "nature_of_business": "62012 - Business and domestic software development",
                            "registered_capital": "100 GBP",
                            "registered_capital_amount": "100.00",
                            "registered_capital_currency": "GBP",
                            "website": null,
                            "email": null,
                            "phone": null,
                            "legal_entity_identifier": null,
                            "location_of_registration": "England and Wales",
                            "financial_summary": null,
                            "officers": [
                              {
                                "uuid": "aaaa1111-bbbb-2222-cccc-333344445555",
                                "name": "Jane Smith",
                                "designation": "Director",
                                "role": "director",
                                "nationality": "British",
                                "is_active": true,
                                "kyc_status": "Approved",
                                "kyc_session_url": "https://verify.didit.me/session/abc123def456"
                              }
                            ],
                            "beneficial_owners": [
                              {
                                "uuid": "bbbb2222-cccc-3333-dddd-444455556666",
                                "name": "John Doe",
                                "first_name": "John",
                                "last_name": "Doe",
                                "entity_type": "person",
                                "roles": [
                                  "ubo",
                                  "shareholder"
                                ],
                                "ownership_min_shares": "50",
                                "ownership_max_shares": "75",
                                "is_active": true,
                                "kyc_status": "Pending",
                                "kyc_session_url": "https://verify.didit.me/session/def456ghi789",
                                "effective_ownership_percent": 75.0
                              }
                            ],
                            "addresses": [
                              {
                                "type": "registered",
                                "address": "1 Example Street, London, EC1A 1AA",
                                "country": "GB"
                              }
                            ],
                            "industries": [
                              {
                                "code": "62012",
                                "description": "Business and domestic software development"
                              }
                            ],
                            "accounts": null,
                            "registry_data": {},
                            "user_provided_data": {
                              "company_name": "ACME HOLDINGS",
                              "registration_number": "12345678"
                            },
                            "confirmed_by_user_at": "2026-06-10T12:01:30.000000Z",
                            "last_console_edit_at": null,
                            "is_editable": false
                          },
                          "ownership_structure": {
                            "shareholders": [
                              {
                                "name": "John Doe",
                                "first_name": "John",
                                "last_name": "Doe",
                                "date_of_birth": null,
                                "country_of_birth": null,
                                "company_name": null,
                                "registration_number": null,
                                "entity_type": "person",
                                "nationality": null,
                                "designation": null,
                                "roles": [
                                  "shareholder"
                                ],
                                "ownership_min_shares": "75",
                                "ownership_max_shares": "75",
                                "voting_min_shares": null,
                                "voting_max_shares": null,
                                "appointment_date": null,
                                "is_active": true,
                                "shareholding": {
                                  "share_class": "ORDINARY",
                                  "number_of_shares": 750.0,
                                  "currency": "GBP",
                                  "nominal_value": 1.0,
                                  "total_value": null,
                                  "percentage": 75.0
                                }
                              }
                            ],
                            "beneficial_owners": []
                          },
                          "warnings": []
                        }
                      ],
                      "aml_screenings": null,
                      "document_verifications": [
                        {
                          "status": "In Review",
                          "node_id": "feature_kyb_documents_1",
                          "items": [
                            {
                              "uuid": "eeee5555-ffff-6666-0000-777788889999",
                              "document_type": "LEGAL_PRESENCE",
                              "document_subtype": "CERTIFICATE_OF_INCORPORATION",
                              "document_group": "LEGAL_PRESENCE",
                              "file_url": "https://<media-host>/kyb/certificate-of-incorporation.pdf",
                              "original_filename": "certificate_of_incorporation.pdf",
                              "file_size": 482133,
                              "status": "Approved",
                              "created_at": "2026-06-10T12:03:11.000000Z",
                              "cross_check_result": {
                                "critical": {
                                  "company_name": {
                                    "document": "ACME HOLDINGS LTD",
                                    "registry": "ACME HOLDINGS LTD",
                                    "score": 1.0,
                                    "match": true
                                  },
                                  "registration_number": {
                                    "document": "12345678",
                                    "registry": "12345678",
                                    "match": true
                                  }
                                },
                                "non_critical": {},
                                "people": {}
                              },
                              "document_metadata": {
                                "file_size": 482133,
                                "content_type": "application/pdf",
                                "creation_date": "2015-03-12T09:00:00",
                                "modified_date": "2015-03-12T09:00:00",
                                "creator": null,
                                "producer": null,
                                "software": null,
                                "encryption": null,
                                "is_signed": true,
                                "is_tampered": false,
                                "signature_info": null,
                                "exif_original_date": null,
                                "exif_digitized_date": null,
                                "processed_by_known_editor": false,
                                "has_different_creation_mod_date": false,
                                "overlay_manipulation": null
                              },
                              "description": null,
                              "is_requested": false,
                              "ocr_data": {
                                "company_name": "ACME HOLDINGS LTD",
                                "registration_number": "12345678",
                                "incorporation_date": "2015-03-12"
                              },
                              "is_console_upload": false,
                              "is_confirmed": true
                            },
                            {
                              "uuid": "ffff6666-0000-7777-1111-888899990000",
                              "document_type": "OWNERSHIP_STRUCTURE",
                              "document_subtype": null,
                              "document_group": "OWNERSHIP_STRUCTURE",
                              "file_url": null,
                              "original_filename": null,
                              "file_size": null,
                              "status": "Not Finished",
                              "created_at": "2026-06-10T15:40:02.000000Z",
                              "cross_check_result": null,
                              "document_metadata": null,
                              "description": "Please upload an up-to-date shareholder registry",
                              "is_requested": true,
                              "ocr_data": null,
                              "is_console_upload": false,
                              "is_confirmed": true
                            }
                          ],
                          "groups": {
                            "LEGAL_PRESENCE": {
                              "total": 1,
                              "approved": 1,
                              "pending": 0,
                              "declined": 0,
                              "in_review": 0,
                              "other": 0,
                              "missing": 0
                            },
                            "OWNERSHIP_STRUCTURE": {
                              "total": 1,
                              "approved": 0,
                              "pending": 0,
                              "declined": 0,
                              "in_review": 0,
                              "other": 0,
                              "missing": 1
                            }
                          },
                          "required_groups": [
                            "LEGAL_PRESENCE",
                            "OWNERSHIP_STRUCTURE"
                          ],
                          "warnings": []
                        }
                      ],
                      "key_people_checks": [
                        {
                          "status": "In Review",
                          "node_id": "feature_kyb_key_people_1",
                          "registry": {
                            "officers": [
                              {
                                "uuid": "aaaa1111-bbbb-2222-cccc-333344445555",
                                "name": "Jane Smith",
                                "designation": "Director",
                                "role": "director",
                                "nationality": "British",
                                "appointment_date": "2015-03-12",
                                "termination_date": null,
                                "is_active": true,
                                "address": "1 Example Street, London, EC1A 1AA",
                                "aml_status": "Approved",
                                "kyc_status": "Approved",
                                "kyc_session_url": "https://verify.didit.me/session/abc123def456",
                                "kyc_session_id": "77777777-8888-9999-aaaa-bbbbbbbbbbbb",
                                "verification_workflow_type": "kyc",
                                "verification_workflow_id": "12121212-3434-5656-7878-909090909090",
                                "verification_workflow_label": "Key People KYC",
                                "verification_workflow_features": [
                                  {
                                    "feature": "ID_VERIFICATION",
                                    "status": "Approved"
                                  },
                                  {
                                    "feature": "LIVENESS",
                                    "status": "Approved"
                                  },
                                  {
                                    "feature": "AML",
                                    "status": "Approved"
                                  }
                                ],
                                "didit_internal_id": "99999999-0000-1111-2222-333333333333",
                                "kyc_document_type": "P",
                                "kyc_nationality": "GBR",
                                "kyc_liveness_passed": true,
                                "kyc_verified_at": "2026-06-10T14:22:31.123456Z",
                                "kyc_aml_categories": {
                                  "sanctions": "clear",
                                  "pep": "clear",
                                  "adverse_media": "clear",
                                  "warnings": "clear"
                                },
                                "kyc_notification_sent_at": "2026-06-09T09:00:00.000000Z"
                              }
                            ],
                            "beneficial_owners": [
                              {
                                "uuid": "bbbb2222-cccc-3333-dddd-444455556666",
                                "name": "John Doe",
                                "first_name": "John",
                                "last_name": "Doe",
                                "date_of_birth": "1980-05-04",
                                "country_of_birth": null,
                                "email": null,
                                "company_name": null,
                                "registration_number": null,
                                "entity_type": "person",
                                "nationality": "British",
                                "designation": null,
                                "roles": [
                                  "ubo",
                                  "shareholder"
                                ],
                                "ownership_min_shares": "50",
                                "ownership_max_shares": "75",
                                "is_active": true,
                                "aml_status": null,
                                "kyc_status": "In Progress",
                                "kyc_session_url": "https://verify.didit.me/session/def456ghi789",
                                "kyc_session_id": "88888888-9999-aaaa-bbbb-cccccccccccc",
                                "verification_workflow_type": "kyc",
                                "verification_workflow_id": "12121212-3434-5656-7878-909090909090",
                                "verification_workflow_label": "Key People KYC",
                                "verification_workflow_features": [
                                  {
                                    "feature": "ID_VERIFICATION",
                                    "status": "Not Finished"
                                  },
                                  {
                                    "feature": "LIVENESS",
                                    "status": "Not Finished"
                                  },
                                  {
                                    "feature": "AML",
                                    "status": "Not Finished"
                                  }
                                ],
                                "didit_internal_id": null,
                                "kyc_document_type": null,
                                "kyc_nationality": null,
                                "kyc_liveness_passed": null,
                                "kyc_verified_at": null,
                                "kyc_aml_categories": null,
                                "kyc_notification_sent_at": null,
                                "child_beneficial_owners": [],
                                "effective_ownership_percent": 75.0
                              }
                            ]
                          },
                          "submitted": {
                            "parties": [
                              {
                                "uuid": "cccc3333-dddd-4444-eeee-555566667777",
                                "entity_type": "person",
                                "source": "USER",
                                "name": "John Doe",
                                "first_name": "John",
                                "last_name": "Doe",
                                "company_name": null,
                                "registration_number": null,
                                "email": "john.doe@example.com",
                                "nationality": "GBR",
                                "phone_number": "+447700900123",
                                "date_of_birth": "1980-05-04",
                                "position": "Chief Executive Officer",
                                "custom_fields": {},
                                "is_active": true,
                                "is_skipped": false,
                                "requires_verification": true,
                                "roles": [
                                  {
                                    "role": "ubo",
                                    "ownership_percent": 75.0,
                                    "voting_percent": 75.0
                                  },
                                  {
                                    "role": "director",
                                    "ownership_percent": null,
                                    "voting_percent": null
                                  }
                                ],
                                "kyc_session_id": "88888888-9999-aaaa-bbbb-cccccccccccc",
                                "kyc_session_status": "In Progress",
                                "kyc_session_url": "https://verify.didit.me/session/def456ghi789",
                                "kyb_sub_session_id": null,
                                "kyb_sub_session_status": null,
                                "kyb_sub_session_url": null,
                                "verification_workflow_type": "kyc",
                                "verification_workflow_id": "12121212-3434-5656-7878-909090909090",
                                "verification_workflow_label": "Key People KYC",
                                "verification_workflow_features": [
                                  {
                                    "feature": "ID_VERIFICATION",
                                    "status": "Not Finished"
                                  },
                                  {
                                    "feature": "LIVENESS",
                                    "status": "Not Finished"
                                  },
                                  {
                                    "feature": "AML",
                                    "status": "Not Finished"
                                  }
                                ],
                                "didit_internal_id": null
                              }
                            ]
                          },
                          "ubo_kyc_summary": {
                            "total": 1,
                            "approved": 0,
                            "flagged": 0,
                            "pending": 1
                          },
                          "warnings": []
                        }
                      ],
                      "phone_verifications": null,
                      "email_verifications": null,
                      "questionnaire_responses": null,
                      "ip_analyses": null,
                      "reviews": [],
                      "contact_details": null,
                      "expected_details": {
                        "company_name": "Tesco PLC",
                        "registry_country": "GB",
                        "registration_number": "00445790"
                      },
                      "created_at": "2026-06-10T11:58:04.000000Z",
                      "expires_at": "2026-06-24T11:58:04.000000Z"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/SessionDecision"
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。2つの`detail`文字列で失敗の種類を区別できます。\n\n- `\"Authentication credentials were not provided or are invalid.\"`：`x-api-key`ヘッダーがない（かつ`Authorization: Bearer`トークンもない）、または指定された認証情報がイントロスペクションに失敗した（失効、期限切れ、または形式不正）。\n- `\"You do not have permission to perform this action.\"`：認証情報は有効だが、このセッションの読み取りが許可されていない。コンソールユーザーのBearerトークンに`read:sessions`権限がないか、所有アプリケーションにアクセスできない、またはAPIキーがセッションとは別の組織に属している。\n\nなお、まったく存在しない`sessionId`の場合、このエンドポイントは認証情報を検証する前に所有アプリケーションを解決するため、認証情報がないか無効であっても、存在しないセッションには`404`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "Authentication credentials were not provided or are invalid."
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーのイントロスペクションに失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Insufficient permissions": {
                    "summary": "有効な認証情報だが、read:sessionsまたは所有元アプリケーションへのアクセス権がない",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが見つかりません。指定された`sessionId`に一致する有効なセッションが、ユーザー認証（KYC）セッションとしても法人確認（KYB）セッションとしても存在しない場合に返されます。削除されたセッションもこれに該当します。ボディは標準の`{\"detail\": ...}`エンベロープです。\n\n**2種類の`detail`文字列。** `sessionId`がKYCセッションとしてもKYBセッションとしても不明な場合、認証前のオーナー検索が失敗し、`{\"detail\": \"Not found.\"}`が返されます。これは認証情報の検証より前に行われるため、認証されていない呼び出しでも返されます。セッションは存在するものの、認証されたアプリケーションでは取得できない場合（古いレコードや削除直後のレコードなど）、ビューは`{\"detail\": \"Session not found.\"}`を返します。どちらもセッションにアクセスできないという同じ結果を示すため、文字列ではなく`404`ステータスコードで判定してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "Not found."
                    }
                  }
                },
                "examples": {
                  "Unknown session id": {
                    "summary": "sessionIdはこのアプリケーションでは認識されていません",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Session not retrievable": {
                    "summary": "セッションは存在しますが、このアプリケーションでは取得できません",
                    "value": {
                      "detail": "Session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。GETリクエストは**認証情報ごとに1分あたり600件**（APIキー、Bearerトークン、または未認証の場合は送信元IP）に制限されています。`Retry-After`/`X-RateLimit-Reset`を確認し、待機してから再試行してください。判定をポーリングしている際にこの制限に達した場合は、`status.updated`Webhookに切り替え、ステータスが変わるたびに判定を1回だけ取得するようにしてください。",
            "headers": {
              "Retry-After": {
                "description": "リクエストを再試行するまでに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "現在のウィンドウで許可される最大リクエスト数（GETリクエストの場合は600）です。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウの残りリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnixタイムスタンプ(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1750000000
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "レート制限超過を人が読める形で説明したもの。",
                      "example": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "summary": "同じ認証情報から1分間に600件を超えるGETリクエスト",
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "判定を取得する検証セッションのUUID。これは`POST /v3/session/`が返す`session_id`です。ユーザー認証(KYC)と法人確認(KYB)のどちらのセッションにも同じパスを使用でき、サーバーは両方のセッションタイプに対してIDを解決します。\n\n**有効なUUIDである必要があります。** ルートは正しい形式のUUIDにのみ一致するため、形式が不正な値はアプリケーションコードが実行される前にURLルーターで拒否され、レスポンスは以下に示すJSONの`{\"detail\": ...}`エンベロープではなく、`404`の**HTML**ページになります。入力エラーと、セッションが実際に存在しない場合の`404`を区別できるよう、クライアント側でUUIDの形式を検証してください。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "追加するペイロードセクションのカンマ区切りリスト。サポートされる値は`events`と`resubmissions`で、単独でも併用(`events,resubmissions`)でも指定できます。`include=events`を渡すと、レスポンスには追加で次の内容が含まれます。セッションのイベントタイムライン(`events`。セッション取得ページで説明している`WORKFLOW_BRANCH_EVALUATED` / `WORKFLOW_STATUS_NODE_REACHED`のルーティングイベントを含む)、完全なアクティビティログ(`activity_reviews`)、ブロックリストのフラグ(`blocklisted`)、セッション1件あたりの`cost_breakdown`、ワークフローのメタデータ(`workflow_type`、`workflow_version`、`workflow_version_id`、および`workflow_terminal_node_id`。最後の項目は、セッションのステータスを設定した最後に記録されたワークフローステータスノードで、記録がない場合は`null`です。これは履歴上の来歴であり、手動での承認、却下、再提出ではクリアされず、後続のワークフローステータスノードによって置き換えられます)、およびセッションのメタデータ(`api_service`:文字列または`null`で、スタンドアロンAPIセッションの場合にのみ設定されます。`session_type`:`API`、`HOSTED`、`MIGRATED`のいずれかです。`has_device_nfc_support`:ブール値です)。通常の形式と比べて、2つのフィールドが変わります。トップレベルの`session_kind`識別子は**省略**されます(eventsの形式はユーザーセッションにのみ存在するため)。また、`features`配列はプレーンな文字列から`{feature, node_id}`オブジェクトに切り替わり、メール機能は`EMAIL_VERIFICATION`ではなく`EMAIL`として報告されます。この拡張形式は主にDidit Consoleで使用されるもので、ほとんどのAPI連携ではこのパラメーターを省略してください。**KYBの制限:**`include=events`はユーザー(KYC)セッションにのみ適用されます。企業セッション(`session_kind = \"business\"`)は常に標準の企業向け判定形式を返します。企業セッションでは`events`、`activity_reviews`、`blocklisted`、`cost_breakdown`および追加の`workflow_*`/セッションメタデータは一切返されず、`features`配列もプレーンな文字列配列のままです。`include=resubmissions`を指定すると(ユーザーセッション、企業セッションとも)、レスポンスには`resubmissions`も含まれます。再提出リクエストごとに1件のエントリが古い順に並び、各エントリには`number`、`created_at`、`previous_status`、`nodes`、`reasons`、`requested_by`、`results`(再提出対象のステップがリクエスト前に返した内容で、現在の結果と同じキー、同じ形式で格納されます)が含まれます。各`cost_breakdown`項目には`usage_type`、`price`、`details`、`created_at`が含まれます。再提出されたステップが再度実行されると、新しい項目として請求されます。",
            "schema": {
              "type": "string",
              "enum": [
                "events",
                "resubmissions",
                "events,resubmissions"
              ],
              "example": "events"
            }
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/decision/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Accept: application/json'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.retrieve_decision(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.retrieveDecision(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RetrieveDecision(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsRetrieveDecisionParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().retrieveDecision(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->retrieveDecision('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.retrieve_decision(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.RetrieveDecisionAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/delete/": {
      "delete": {
        "summary": "検証セッション(KYCまたはKYB)を削除",
        "description": "`session_id`を指定して、ユーザー認証 (KYC) または法人確認 (KYB) の検証セッションを1件削除します。IDはまずKYCセッション、次にKYBセッションの順で照合されるため、どちらの種類もこの1つのURLで削除できます。\n\n**削除されるもの:**\n- セッションと、そのセッションに含まれるすべての認証試行。再提出によって置き換えられた結果も含みます。対象は判定、抽出データ、関連するすべての機能レコード (本人確認、顔、ライブネス検知、顔照合、AML、法人登記チェック、IP分析など)、レビュー、アクティビティログです。\n- セッションが所有するすべての保存ファイル。書類の表面・裏面の写真 (フル、切り抜き、プライバシー保護のためのぼかし処理済みの各バリエーション)、書類撮影の動画、顔写真の切り抜き、NFCチップの顔写真と署名画像、顔の参照画像、ライブネス検知の動画、顔照合のソース画像・ターゲット画像、住所証明の書類、その他のアップロードファイル (KYC)、アップロードされた企業書類とその他のファイル (KYB) が含まれます。電子署名の書類、署名済みPDF、証拠PDF、署名画像 (KYCおよびKYB) は、ダウンロードパスが機能しなくなります。発行済みのメディアURL (`https://<media-host>/...`) は解決されなくなります。\n- セッションの顔データ。画像を含まないテンプレートを保持することを選択した場合を除き、顔エンベディングも削除されます (**顔の生体データ**を参照)。\n- セッションについてキューに残っているWebhook配信とその再試行。すでに配信済みのWebhookには影響しません。\n- 法人確認 (KYB) セッションの場合: そのセッションが主要人物 (KYC) および法人株主 (KYB) のために作成した認証が再帰的に削除され、`deleted_child_verifications`として報告されます。再利用した既存の承認済みKYCなど、リンクしているだけの認証は削除されません。\n\nセッションはすべての読み取りエンドポイントから即座に消えます。`GET /v3/session/{sessionId}/decision/`は`404`を返し、`GET /v3/sessions/`の一覧にも表示されなくなります。削除された認証によって開始された継続的なAMLモニタリングとKYB法人登記モニタリングは停止します。\n\n**影響を受けないもの:** このセッションから作成されたブロックリストのエントリ (顔または書類) は削除**されません**。これらはブロックリストのエンドポイントで管理してください。セッションに対して発行された共有トークンは失効しませんが、インポートできるデータは残っていません。そのトークンでインポートすると、`400`と`{\"share_token\": [\"Original session does not exist.\"]}`が返されます。消費済みのクレジットは払い戻し**されません**。親であるUserまたはBusinessエンティティは削除**されません**。これらを削除するには`POST /v3/users/delete/`または`POST /v3/businesses/delete/`を使用してください。Userのプロフィール顔写真がこのセッションから取得されたものである場合、その顔写真もあわせて削除されます。\n\n**顔の生体データ:** デフォルトでは、セッションの顔エンベディングはセッションとともに削除されます (`face_retention_outcome: deleted`)。生体認証テンプレートの保持をオプトインしたアプリケーション (`PATCH /v3/webhook/`で`face_retention_policy: retain_until_user_deleted`を設定)、または`retain_face_embeddings: true`を指定したリクエストでは、重複検出、顔検索、生体認証が引き続き機能するよう、画像を含まない顔の生体認証テンプレートが1件、セッションのUserに紐づけて別途管理される形で保持されます (`retained_with_user`)。このテンプレートには、顔画像、メディア、本人情報フィールド、判定、削除されたセッションのIDは一切含まれません。これは生体データであり、`biometric_template_expires_at`の時点で削除されます。それ以前でも、Userの削除、プライバシー消去、または`/v3/biometric-templates/`による明示的な削除が行われた場合は削除されます。Userがリンクされていないセッションではテンプレートを保持できません (`ineligible_no_vendor_user`)。データ主体からの請求には`deletion_instruction: privacy_erasure`を送信してください。そのUserについて保持されているすべてのテンプレートが削除され、新たなテンプレートが保持されることはありません。\n\n**元に戻せません:** 削除は恒久的であり、復元用のエンドポイントはありません。必要なもの (判定のPDFなど) は、呼び出す前にエクスポートしてください。\n\n**副作用:** 削除に対してWebhookは送信されません。\n\n**レスポンス:** 削除が完了すると`200 OK`が返され、JSONボディで`face_retention_outcome`、保持されたテンプレートの有効期限、KYBセッションの場合は`deleted_child_verifications`が報告されます。このエンドポイントの以前のバージョンは`204 No Content`を返していました。`204`を前提としているクライアントは更新してください。`instruction_id`は自社の消去ログに保管してください。\n\n**冪等性:** HTTPレベルでは冪等ではありません。最初の呼び出しは`200`を返し、繰り返すとセッションが解決されなくなっているため`404`を返します。`503`が返された場合、セッションはまだ残っています。同じリクエストを再度送信して削除を完了してください。\n\n**認証:** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。セッションはそのアプリケーションに属している必要があります。`delete:sessions`権限を持つ場合に限り、コンソールユーザーのアクセストークン (`Authorization: Bearer ...`) でもこのエンドポイントを呼び出せます。認証の失敗と権限の不足はいずれも`403`を返します。このAPIが`401`を返すことはありません。\n\n**レート制限:** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`が返されます。\n\nKYCセッションを数値の`session_number`で一括削除するには、代わりに`POST /v3/sessions/delete/`を使用してください。\n\n**提出済みの規制当局向けレポート:** 選択したデータが確定済みの規制当局向けレポートに含まれている場合、リクエスト全体が`409`で拒否され、何も削除されません。ボディは`code: in_filed_report`を使用し、各レポートを`uuid`、`report_number`、`report_type`、`case_uuid`で示します。レポートを削除してから、リクエストを再度送信してください。",
        "operationId": "delete_v3_session_by_id",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "削除するユーザー認証 (KYC) または法人確認 (KYB) セッションのUUID (`session_id`) です。セッション作成時に返された値を指定します。ハイフン区切りの正規形式のUUIDである必要があります。UUID以外の値はルートに一致せず、`404`が返されます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "セッションが削除されました。ボディには、セッションの顔の生体データがどうなったか、およびKYBセッションの場合はそのセッションが作成した認証のうち何件が併せて削除されたかが示されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "削除されたセッションです。"
                    },
                    "session_number": {
                      "type": "integer",
                      "nullable": true,
                      "description": "削除されたセッションの番号です。"
                    },
                    "face_retention_outcome": {
                      "type": "string",
                      "enum": [
                        "retained_with_user",
                        "deleted",
                        "none",
                        "ineligible_no_vendor_user"
                      ],
                      "description": "セッションの顔生体データがどう処理されたか。`deleted`: 顔エンベディングはセッションとともに削除されました（デフォルト）。`retained_with_user`: セッションは削除され、画像を含まない生体認証テンプレートが1件Userに紐付いて残ります。`biometric_template_uuid`を参照してください。`none`: セッションに顔エンベディングがありませんでした（例: KYBセッション、またはライブネスのセルフィーがないKYCセッション）。`ineligible_no_vendor_user`: 保持がリクエストされましたが、セッションに紐付くUserがないため、エンベディングはセッションとともに削除されました。このエンドポイントでは、生体データストアの障害がこのフィールドで報告されることはありません。その場合は`503`を返し、セッションは削除されません。"
                    },
                    "biometric_template_uuid": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true,
                      "description": "`face_retention_outcome`が`retained_with_user`の場合に保持された生体認証テンプレートのID。それ以外の場合は`null`です。`/v3/biometric-templates/{template_uuid}/`で管理します。"
                    },
                    "biometric_template_expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "`face_retention_outcome`が`retained_with_user`の場合に、保持された生体認証テンプレートが削除される日時。テンプレートが保持されていない場合は`null`です。"
                    },
                    "deleted_child_verifications": {
                      "type": "integer",
                      "description": "法人確認 (KYB)セッションの場合：そのセッションが作成した認証（主要人物のKYCセッションと法人所有者のKYBセッションを再帰的に含む）のうち、セッションとともに削除された件数。KYCセッションでは常に`0`です。"
                    }
                  }
                },
                "examples": {
                  "Deleted (default)": {
                    "value": {
                      "session_id": "4c5c7f3a-3b1d-4b7e-9c39-2b4f7e6a1d02",
                      "session_number": 1024,
                      "face_retention_outcome": "deleted",
                      "biometric_template_uuid": null,
                      "biometric_template_expires_at": null,
                      "deleted_child_verifications": 0
                    }
                  },
                  "Retained with User": {
                    "value": {
                      "session_id": "4c5c7f3a-3b1d-4b7e-9c39-2b4f7e6a1d02",
                      "session_number": 1024,
                      "face_retention_outcome": "retained_with_user",
                      "biometric_template_uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                      "biometric_template_expires_at": "2027-10-09T10:15:00Z",
                      "deleted_child_verifications": 0
                    }
                  },
                  "Ineligible: no User": {
                    "summary": "vendor_dataなしで作成されたセッションで保持がリクエストされた",
                    "value": {
                      "session_id": "7a1e9c2d-5f4b-4c3a-8e2d-1b0a9f8e7d6c",
                      "session_number": 1031,
                      "face_retention_outcome": "ineligible_no_vendor_user",
                      "biometric_template_uuid": null,
                      "biometric_template_expires_at": null,
                      "deleted_child_verifications": 0
                    }
                  },
                  "KYB session": {
                    "value": {
                      "session_id": "0f3c9b7e-2d1a-4e5f-8c6b-7a9d8e1f2c3b",
                      "session_number": 88,
                      "face_retention_outcome": "none",
                      "biometric_template_uuid": null,
                      "biometric_template_expires_at": null,
                      "deleted_child_verifications": 3
                    },
                    "summary": "主要人物向けに作成した3件の認証とあわせて削除された法人確認"
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：何も削除されません。",
            "content": {
              "application/json": {
                "examples": {
                  "Privacy erasure cannot retain": {
                    "value": {
                      "retain_face_embeddings": [
                        "Privacy erasure cannot retain biometric templates."
                      ]
                    }
                  },
                  "No finite retention duration": {
                    "summary": "リクエストにもアプリケーションにもface_retention_daysがない状態で保持がリクエストされた",
                    "value": {
                      "detail": "A finite biometric-template retention duration is required."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または権限の失敗です。キーがない場合も`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。例外として、`sessionId`が有効なセッションに解決されない場合は、認証前の所有者検索が先に`404`を返します。これは認証情報がないか無効な場合でも同様です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "x-api-keyヘッダーがないか、キーが無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Insufficient permission": {
                    "summary": "delete:sessions権限のないユーザートークン、またはセッションを所有していないアプリケーションの認証情報",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`の有効なKYCまたはKYBセッションは存在しません。idが不明か、セッションがすでに削除されています（削除に成功した後に再度削除するとここに該当します）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not Found": {
                    "summary": "不明なセッション、またはすでに削除されたセッション",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "共有の書き込みレート制限を超えました（APIキーごとに1分あたりPOST/PATCH/DELETEリクエスト300件）。再試行する前に、`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "書き込みの上限に達しました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "ストレージサービス、生体データストア、またはモニタリングプロバイダーが利用できなかったため、削除を完了できませんでした。セッションはそのまま残っています。`200`が返るまで同じリクエストを繰り返してください。保存されたファイルの一部や顔エンベディングがすでに削除されている可能性があるため、`503`の後はそれらに依存しないでください。再試行は単一のテンプレートに収束します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Session deletion unavailable": {
                    "summary": "ストレージサービスまたはモニタリングプロバイダーが利用できませんでした",
                    "value": {
                      "detail": "The session could not be deleted because a storage service or a monitoring provider is unavailable. The session is still in place; repeat the request to finish deleting it."
                    }
                  },
                  "Biometric store unavailable": {
                    "summary": "テンプレートの保持または消去中に、生体認証ストアが利用できませんでした",
                    "value": {
                      "detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "セッションは確定済みの規制当局向けレポートに含まれています。何も削除されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InFiledReportError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl (default policy)",
            "source": "curl -X DELETE \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/delete/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "curl",
            "label": "curl (retain template)",
            "source": "curl -X DELETE \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/delete/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"retain_face_embeddings\": true, \"face_retention_days\": 365}'"
          },
          {
            "lang": "curl",
            "label": "curl (privacy erasure)",
            "source": "curl -X DELETE \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/delete/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"deletion_instruction\": \"privacy_erasure\", \"instruction_id\": \"dsar-2026-0142\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n    retain_face_embeddings=True,\n    face_retention_days=365,\n    instruction_id=\"post-approval-cleanup-2026-08\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.delete(\"11111111-2222-3333-4444-555555555555\", {\n  retain_face_embeddings: true,\n  face_retention_days: 365,\n  instruction_id: \"post-approval-cleanup-2026-08\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Delete(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsDeleteParams{\n\tRetainFaceEmbeddings: didit.Bool(true),\n\tFaceRetentionDays:    didit.Int(365),\n\tInstructionID:        didit.String(\"post-approval-cleanup-2026-08\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsDeleteParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().delete(\"11111111-2222-3333-4444-555555555555\", SessionsDeleteParams.builder()\n        .retainFaceEmbeddings(true)\n        .faceRetentionDays(365L)\n        .instructionId(\"post-approval-cleanup-2026-08\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->delete('11111111-2222-3333-4444-555555555555', [\n    'retain_face_embeddings' => true,\n    'face_retention_days' => 365,\n    'instruction_id' => 'post-approval-cleanup-2026-08',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  retain_face_embeddings: true,\n  face_retention_days: 365,\n  instruction_id: \"post-approval-cleanup-2026-08\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.DeleteAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsDeleteParams\n{\n    RetainFaceEmbeddings = true,\n    FaceRetentionDays = 365,\n    InstructionId = \"post-approval-cleanup-2026-08\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": false,
          "description": "任意。ボディを完全に省略すると、アプリケーションのデータ保持ポリシーに従って運用上の削除が行われます。",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "retain_face_embeddings": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "この削除について、アプリケーションの`face_retention_policy`を上書きします。`true`の場合、セッションの削除後も、画像を含まない顔の生体認証テンプレートを1つ、セッションのユーザーに紐付けて保持します。`false`の場合、顔エンベディングはセッションとともに削除されます。省略するか`null`にすると、アプリケーションのポリシーに従います。KYBセッション、および顔エンベディングのないセッションでは無視されます。",
                    "example": true
                  },
                  "face_retention_days": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3650,
                    "description": "保持されるテンプレートの有限の保持期間（日数）です。テンプレートを保持する場合は必須です。ただし、アプリケーションですでに`face_retention_days`が設定されている場合を除きます。テンプレートの`expires_at`は、この期間、アプリケーションの一般的なデータ保持期間、`face_retention_deadline`のうち最も早いものになります。",
                    "example": 365
                  },
                  "face_retention_deadline": {
                    "type": "string",
                    "format": "date-time",
                    "description": "保持されるテンプレートの任意の強制有効期限です。未来の日時である必要があります。",
                    "example": "2027-08-28T00:00:00Z"
                  },
                  "deletion_instruction": {
                    "type": "string",
                    "enum": [
                      "operational_session_delete",
                      "privacy_erasure"
                    ],
                    "default": "operational_session_delete",
                    "description": "指示の種類。`operational_session_delete`はセッションを削除し、ポリシーまたは`retain_face_embeddings`で指定されている場合にのみテンプレートを保持します。`privacy_erasure`は、セッションのユーザーに紐づく保持済みの生体認証テンプレートをすべて完全に削除してからセッションを削除します。アプリケーションのポリシーで上書きすることはできず、`retain_face_embeddings: true`と組み合わせることもできません（`400`）。",
                    "example": "operational_session_delete"
                  },
                  "instruction_id": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "この削除指示に対するお客様の永続的な参照ID（例: 消去チケットのID）です。監査証跡と、保持されるテンプレートに記録されます。省略した場合はDiditが生成します。",
                    "example": "dsar-2026-0142"
                  }
                }
              },
              "examples": {
                "Retain a biometric template": {
                  "summary": "セッションを削除し、画像を含まないテンプレートを365日間保持",
                  "value": {
                    "retain_face_embeddings": true,
                    "face_retention_days": 365,
                    "instruction_id": "post-approval-cleanup-2026-08"
                  }
                },
                "Force deletion on an opted-in application": {
                  "summary": "アプリケーションのポリシーに関係なく顔エンベディングを削除",
                  "value": {
                    "retain_face_embeddings": false
                  }
                },
                "Privacy erasure": {
                  "summary": "データ主体からの請求：セッションを削除し、その人物について保持されているすべてのテンプレートを完全に消去します",
                  "value": {
                    "deletion_instruction": "privacy_erasure",
                    "instruction_id": "dsar-2026-0142"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/session/{sessionId}/generate-pdf/": {
      "get": {
        "summary": "検証セッションのPDFレポートをダウンロード",
        "description": "完了した認証セッションについて、コンプライアンス対応のPDFレポートをレンダリングしてダウンロードします。同じパスでユーザー認証 (KYC) と法人確認 (KYB) の両方のセッションに対応します。サーバーは`sessionId`を両方のセッション種別と照合し、該当するレポートテンプレートを選択します。\n\n**対象となるステータス。** セッションは、すでに最終ステータスまたはレビュー可能なステータスになっている必要があります。\n\n- KYCセッション: `Approved`、`Declined`、`In Review`、または`Kyc Expired`。\n- KYBセッション: `Approved`、`Declined`、または`In Review`。\n\nその他のステータス (`Not Started`、`In Progress`、`Expired`、`Abandoned`など) の場合は、説明を含む`detail`文字列とともに`403`を返します。下記の`403`レスポンスを参照してください。\n\n**レポートの内容。** PDFは、リクエスト時点のコンソールのセッション画面を反映します。\n\n- **KYC**: 集約されたセッションステータス、警告の一覧、実行された機能ごとのセクション (本人確認 (書類画像と抽出されたフィールド)、NFC、ライブネス検知、顔照合、メールアドレス認証、電話番号検証、住所証明、アンケートの回答、データベース検証、AMLスクリーニング、IP分析)。その後に、セッションのタグ、コンソールでのレビュー履歴 (コメントとステータス変更)、セッションのイベントタイムラインが続きます。\n- **KYB**: 登記チェック (企業データ)、AMLスクリーニング、企業書類の検証、主要人物のチェック、アンケートの回答、電話番号・メールアドレスの検証、IP分析、セッションのイベントタイムライン。その後に、タグとレビュー履歴が続きます。\n\n**ブランディング。** アプリケーションにホワイトラベルのカスタマイズが設定されている場合、レポートはお客様のロゴでレンダリングされ、お客様のプライバシーポリシーのURLへのリンクが含まれます。設定されていない場合はDiditのブランディングになります。レポートは英語でレンダリングされます。言語パラメーターはありません。\n\n**キャッシュなし。** 呼び出しのたびに現在のセッションデータからPDFが再レンダリングされるため、手動レビュー後に生成したレポートにはレビュアーの判定が反映されます。同じセッションに対する2回の呼び出しで、バイト単位で異なるファイルが生成されることがあります。変更されないコピーが必要な場合は、ダウンロードしたファイルを保管してください。\n\n**レイテンシ。** レンダリングでは、PDFを構成する前に保存されているすべての画像 (書類の各面、セルフィー、追加ファイル) をダウンロードするため、メディアの多いセッションでは数秒かかることがあります。クライアントの読み取りタイムアウトには十分な値 (60秒を推奨) を設定し、本文をディスクにストリーミングしてください。\n\n**末尾のスラッシュ。** 正規のルートは末尾がスラッシュで終わります (`…/generate-pdf/`)。スラッシュのないリクエストも同じレスポンスで直接処理されます。`301`リダイレクトは発生しないため、クライアントがリダイレクトを追跡する必要はなく、`curl`に`-L`も不要です。サンプルと同様に、スラッシュ付きのURLを使用してください。\n\nレンダリングされたレポートではなく基になるデータをJSONで取得する場合は、`GET /v3/session/{sessionId}/decision/`を使用してください。1人のユーザーのレポート対象となるすべてのセッションを1つのドキュメントにまとめるには、`GET /v3/users/{vendor_data}/generate-pdf/`を使用してください。",
        "operationId": "get_v3_session_generate_pdf",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "generate_pdf",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "レンダリングするユーザー認証 (KYC) または法人確認 (KYB) セッションのUUIDで、`POST /v3/session/`が返す`session_id`です。同じパスで両方の種類のセッションに対応します。受け取ったレポートの種類は、レスポンスの`Content-Disposition`のファイル名で判別してください。\n\n**正しい形式の小文字のUUIDである必要があります。** このルートは有効なUUIDにのみ一致するため、不正な値はアプリケーションコードが実行される前にURLルーターで拒否され、レスポンスは下記のJSONの`{\"detail\": ...}`エンベロープではなく`404`の**HTML**ページになります。ルートのUUIDコンバーターは正規の小文字形式にのみ一致するため、16進数が大文字のUUIDはHTMLの404で拒否されます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "レンダリングされたPDF書類。バイナリの`application/pdf`として直接返されます。JSONラッパーやダウンロードURLを介した間接参照はありません。本文は`%PDF`のマジックバイト（PDF 1.7）で始まります。`.pdf`ファイルに保存するか、呼び出し元にそのままストリーミングしてください。",
            "headers": {
              "Content-Disposition": {
                "description": "KYCセッションの場合は`attachment; filename=session_{sessionId}.pdf`、KYBセッションの場合は`attachment; filename=business_{sessionId}.pdf`です。プレフィックスから、どのレポートテンプレートが生成されたかがわかります。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=session_11111111-2222-3333-4444-555555555555.pdf"
                }
              },
              "Content-Length": {
                "description": "PDFの合計サイズ（バイト単位）。ボディはチャンク分割されません。",
                "schema": {
                  "type": "integer",
                  "example": 25191
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "403": {
            "description": "認証、認可、またはセッションステータスの失敗です。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。失敗の種類は`detail`文字列で区別してください。\n\n- `\"Authentication credentials were not provided or are invalid.\"`：`x-api-key`ヘッダーがない（かつ`Authorization: Bearer`トークンもない）、または指定された認証情報がイントロスペクションに失敗した（失効、期限切れ、または形式不正）。\n- `\"You do not have permission to perform this action.\"`：認証情報は有効だが、このセッションを読み取れない。コンソールユーザーのBearerトークンに`read:sessions`権限がないか、所有アプリケーションにアクセスできない、またはAPIキーがセッションとは別の組織に属している。\n- `\"You can only generate a PDF for sessions in review, declined, approved or kyc expired\"`：KYCセッションは存在するが、まだ対象となるステータスになっていない（たとえば`Not Started`や`In Progress`）。レポートをリクエストする前に`status.updated` Webhookを待ってください。\n- `\"You can only generate a PDF for sessions in review, declined or approved\"`：KYBセッションに対する同じ条件です。\n\nなお、まったく存在しない`sessionId`の場合、このエンドポイントは認証情報を検証する前に所有アプリケーションを解決するため、認証情報がないか無効であっても、存在しないセッションには`404`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "You can only generate a PDF for sessions in review, declined, approved or kyc expired"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーのイントロスペクションに失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Insufficient permissions": {
                    "summary": "有効な認証情報だが、read:sessionsまたは所有元アプリケーションへのアクセス権がない",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "KYC session not finished": {
                    "summary": "KYCセッションがまだNot Started / In Progressの状態です",
                    "value": {
                      "detail": "You can only generate a PDF for sessions in review, declined, approved or kyc expired"
                    }
                  },
                  "KYB session not finished": {
                    "summary": "KYBセッションがまだNot Started / In Progressの状態です",
                    "value": {
                      "detail": "You can only generate a PDF for sessions in review, declined or approved"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`sessionId`を持つアクティブなセッションが存在しません。作成されていないか、削除されています。所有者の解決は認証情報の検証より前に行われるため、認証されていないリクエストでもこの`404`が返されます。どの照会で見つからなかったかに応じて、`detail`文字列は`\"Not found.\"`(一般的なケース)または`\"Session not found.\"`になります。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "Not found."
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "sessionIdがどのKYCセッションまたはKYBセッションとも一致しません",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Recently deleted session": {
                    "summary": "参照と参照の間にセッションが削除されました",
                    "value": {
                      "detail": "Session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。PDF生成には、GET全体に適用される1分あたり600件の制限に加えて、**認証情報ごとに1分あたり50件**（APIキー、Bearerトークン、または未認証の場合は送信元IP）という専用の制限があります。`Retry-After`秒（`X-RateLimit-*`ヘッダーにも反映されます）待ってから再試行してください。レポートはサーバー側でキャッシュされないため、各レポートは1回だけダウンロードしてファイルを保存し、再取得しないでください。",
            "headers": {
              "Retry-After": {
                "description": "リクエストを再試行するまでに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "現在のウィンドウで許可されるPDF生成の最大回数（50）です。",
                "schema": {
                  "type": "integer",
                  "example": 50
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウの残りリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnixタイムスタンプ(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1750000000
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "レート制限超過を人が読める形で説明したもの。",
                      "example": "Session PDF generation rate limit exceeded. You can make up to 50 requests per minute."
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "summary": "同じ認証情報から1分間に50件を超えるPDF生成",
                    "value": {
                      "detail": "Session PDF generation rate limit exceeded. You can make up to 50 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --fail \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/generate-pdf/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  --output report.pdf"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.sessions.generate_pdf(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.sessions.generatePdf(\"11111111-2222-3333-4444-555555555555\");\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.GeneratePDF(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().generatePdf(\"11111111-2222-3333-4444-555555555555\")\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->sessions->generatePdf('11111111-2222-3333-4444-555555555555');\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.sessions.generate_pdf(\"11111111-2222-3333-4444-555555555555\")\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Sessions.GeneratePdfAsync(\"11111111-2222-3333-4444-555555555555\");\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/sandbox/arm/": {
      "post": {
        "summary": "セッションにサンドボックスのシナリオを設定する",
        "description": "`Not Started`のセッションにサンドボックスシナリオを保存し、そのシナリオに含まれるマジック値（メールアドレス、電話番号、または`expected_details`のフィールド）をセッションに展開します。これにより、フローの実行時にモックされたプロバイダーがシナリオの結果を再現します。これは、テスターが撮影開始前に結果を選択する際に、Diditのホスト型検証UIにあるフロー開始前のシナリオ選択画面が呼び出すエンドポイントです。このエンドポイントを使って独自の選択画面を構築することも、サンドボックスのテストハーネスから直接呼び出すこともできます。\n\n認証には、アプリケーションの`x-api-key`ではなく、セッション自身の`Session-Token`（[セッションの作成](/ja/sessions-api/create-session)の`session_token`で返されます）を使用します。このエンドポイントは、バックエンドではなくクライアントから呼び出すことを想定しています。シナリオは`status`が`Not Started`の間のみ受け付けられます。`Not Started`のまま再度呼び出すと、セッションが再設定されます。新しいシナリオのマジック値に入れ替わり、*前の*シナリオが書き込んだ値のみがクリアされるため、ユーザーがすでに手入力した値（メールアドレス、名など）は再設定後も保持されます。`Not Started`を過ぎたセッション、または本番（サンドボックス以外）のアプリケーションに属するセッションの設定は拒否されます。\n\nシナリオの全一覧と、結果を制御する他の2つの方法（セッション作成時の`sandbox_scenario`、マジック値の直接入力）については、[サンドボックスとテストデータ](/ja/integration/sandbox-testing)を参照してください。",
        "operationId": "post_v3_session_sandbox_arm",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "arm_sandbox",
          "auth": "device_token",
          "server": false
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "SessionTokenAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "有効化するサンドボックス検証セッションのUUID。認証に使用したSession-Tokenにエンコードされたセッションと一致する必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "scenario"
                ],
                "properties": {
                  "scenario": {
                    "type": "string",
                    "description": "有効化するシナリオのスラッグ。GET /v1/sandbox/scenarios/のカタログ、または[サンドボックスとテストデータ](/ja/integration/sandbox-testing)のシナリオ表を参照してください。",
                    "example": "decline_document_expired"
                  }
                }
              },
              "examples": {
                "Arm": {
                  "summary": "AML PEPヒットのシナリオを設定する",
                  "value": {
                    "scenario": "decline_aml_hit"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "シナリオが有効化されました。そのマジック値がセッションに設定されています。`status`はセッションの現在のステータスを反映しており、この呼び出しで変更されることはありません。成功時は常に`Not Started`です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "scenario": {
                      "type": "string",
                      "description": "設定済みのシナリオのスラッグ（リクエストの値をそのまま返します）。"
                    },
                    "status": {
                      "type": "string",
                      "example": "Not Started"
                    }
                  }
                },
                "examples": {
                  "Armed": {
                    "summary": "Not Startedのセッションでシナリオを有効化",
                    "value": {
                      "session_id": "11111111-2222-3333-4444-555555555555",
                      "scenario": "decline_aml_hit",
                      "status": "Not Started"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: 不明なシナリオスラッグ、またはセッションがすでに`Not Started`より先に進んでいます。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown Scenario": {
                    "summary": "scenarioがカタログにありません",
                    "value": {
                      "scenario": [
                        "Unknown sandbox scenario: 'not-a-real-scenario'."
                      ]
                    }
                  },
                  "Already Started": {
                    "summary": "セッションがNot Startedから先に進みました",
                    "value": [
                      "Scenario can only be armed before the verification starts."
                    ]
                  }
                }
              }
            }
          },
          "404": {
            "description": "Session-Tokenがこの`session_id`に対応していないか、セッションが本番環境（サンドボックス以外）のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "本番環境のセッション、またはsession_id / tokenの不一致",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/sandbox/arm/ \\\n  -H 'Session-Token: YOUR_SESSION_TOKEN' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"scenario\": \"decline_aml_hit\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "import requests\n\nresponse = requests.post(\n    \"https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/sandbox/arm/\",\n    headers={\n        \"Session-Token\": \"YOUR_SESSION_TOKEN\",\n        \"Content-Type\": \"application/json\",\n    },\n    json={\"scenario\": \"decline_aml_hit\"},\n)\nresponse.raise_for_status()\nprint(response.json())  # {'session_id': '...', 'scenario': 'decline_aml_hit', 'status': 'Not Started'}"
          },
          {
            "lang": "javascript",
            "label": "JavaScript",
            "source": "const response = await fetch(\n  'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/sandbox/arm/',\n  {\n    method: 'POST',\n    headers: {\n      'Session-Token': sessionToken,\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({ scenario: 'decline_aml_hit' }),\n  },\n);\nif (!response.ok) throw new Error(`HTTP ${response.status}`);\nconst { session_id, scenario, status } = await response.json();"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/update-status/": {
      "patch": {
        "summary": "認証セッションを承認または却下するか、再提出を要求する",
        "description": "KYCまたはKYBの認証セッションの最終判定を手動で上書きします。`new_status`を`Approved`または`Declined`に設定すると手動判定を記録します。`Resubmitted`に設定すると特定の認証ステップがクリアされ、ユーザーは同じ認証URLからそれらのステップをやり直せます。このエンドポイントは、ユーザー（KYC）と企業（KYB）のどちらのセッションIDも受け付けます。\n\nセッションがレビュー可能な状態になってから呼び出してください。現在のステータスは`Approved`、`Declined`、`In Review`、`Kyc Expired`、`Abandoned`、`Resubmitted`のいずれかである必要があります。まだ`Not Started`、`In Progress`、`Awaiting User`の状態にあるセッション、または`Expired`で終了したセッションでは`400`が返されます。APIキーには`write:sessions`権限が必要です（スコープ付きAPIキーの場合は、判定への書き込みアクセスが必要です）。対象状態のチェックはボディの検証より前に実行されます。そのため対象外のセッションでは、ペイロードも無効な場合であっても`Wrong Current Status`エラーが返されます。\n\n`Resubmitted`の場合、ユーザーがやり直す必要のあるワークフローステップは`nodes_to_resubmit`で選択します。省略すると、再提出可能な状態（`Declined`、`In Review`、`Not Finished`、`Expired`）にある既存の機能の試行が自動的に選択されます。一度も試行されていない機能は自動選択されないため、`nodes_to_resubmit`で明示的に指定してください。指定しない場合、再提出が必要な記録済みの試行がなければ、リクエストは`400`を返します。選択したステップの以前の結果は再提出の履歴に移動します（`include=resubmissions`を指定したGet Decisionで返されます）。あわせて、ステップはワークフローのグラフに合わせて並べ替えられ、セッションの有効期限の期間が再開され、元の認証URLが再び使用可能になります。リストの先頭にあるバックエンド専用のステップ（`AML`、`DATABASE_VALIDATION`、`IP_ANALYSIS`）は、ユーザーの操作なしに即座に実行されます。再提出したステップがすべてバックエンド専用の場合、セッションは同じリクエスト内で再確定されます。`KYB_REGISTRY`と`KYB_KEY_PEOPLE`は直接再提出できません。代わりに関連する子KYCセッションを再提出してください。親の企業セッションは自動的に再計算されます。\n\nステータスを変更する呼び出しでは、変更がコミットされるたびに`status.updated`の[Webhook](/ja/integration/webhooks)が送信されます。また、セッションの`reviews`にアクティビティエントリ（実行者の情報と`comment`を含む）が追加され、[Get Decision](#get-/v3/session/-sessionId-/decision/)とコンソールのアクティビティタイムラインで確認できます。セッションの`vendor_data`に紐づくユーザープロファイルの集計も更新されます。却下すると、セッションの継続的なAMLモニタリングが無効になります。ワークフローでモニタリングが有効になっている場合、（`Resubmitted`、`Declined`、`Kyc Expired`からの）再承認で再び有効になります。KYBの主要人物チェックに属する子KYCを承認または却下すると、親の企業セッションのステータスが再計算されます。ユーザーに通知するには、`send_email: true`を（`email_address`とあわせて）設定します。`Approved`/`Declined`ではステータス通知が送信され、`Resubmitted`では認証リンクとステップごとの理由を含む再提出メールが送信されます。事前にメールを確認する場合は、[Preview Decision Email](/ja/sessions-api/preview-decision-email)（`Approved`、`Declined`）または[Preview Resubmission Email](/ja/sessions-api/preview-resubmission)（`Resubmitted`）でプレビューし、その`preview_token`を`email_preview_token`として渡してください。この場合、更新ではプレビューしたメールがそのまま送信されます。ただし、プレビュー後にメールまたはセッションが変更された場合、または受領情報が15分より古い場合は、何も変更せずに`409`が返されます。\n\nすでに`Approved`または`Declined`のセッションに同じステータスを再度指定しても、何も変更されず`200`が返されます。この場合、Webhook、アクティビティエントリ、メールはいずれも発生しません。`Resubmitted`を再度指定すると`400`（`The new status is the same as the current status.`）が返されます。認証情報がない場合や無効な場合、および権限がない場合は`403`が返されます。スコープ付きAPIキーの有効期限が切れている場合は`401`が返されます。",
        "operationId": "patch_v3_session_update_status",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "更新する検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。サービスは両方のセッションタイプにわたってIDを解決します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "new_status"
                ],
                "properties": {
                  "new_status": {
                    "type": "string",
                    "description": "変更後のステータス。`Approved`と`Declined`は最終的な手動判定を記録します(それぞれ互いを覆すこともできます)。`Resubmitted`は選択したステップをクリアし、セッションをユーザーに差し戻します。それ以外の値は`400`を返します。",
                    "enum": [
                      "Approved",
                      "Declined",
                      "Resubmitted"
                    ],
                    "example": "Approved"
                  },
                  "comment": {
                    "type": "string",
                    "description": "変更理由の自由記述。セッションのレビュー履歴に保存され、[Get Decision](#get-/v3/session/-sessionId-/decision/)の`reviews`配列で返されます。例: `Duplicated user`。",
                    "example": "All checks passed manual review"
                  },
                  "nodes_to_resubmit": {
                    "type": "array",
                    "description": "ユーザーがやり直す必要のあるワークフローステップ。`new_status`が`Resubmitted`の場合にのみ処理されます。`Approved`/`Declined`の場合もエントリーはスキーマ検証されます（無効な`feature`値は`400`を返します）が、スキーマ上有効なエントリーは意味上無視されます。省略した場合、サーバーはステータスが`Declined`、`In Review`、`Not Finished`、`Expired`のいずれかである既存のOCR、ライブネス検知、顔照合、POA、電話番号検証、メールアドレス認証、AML、データベース検証、アンケートの試行を自動で選択します（NFC、IP分析、年齢推定、顔検索、KYB書類の試行は自動選択されません。顔照合以外の顔の試行は`LIVENESS`として選択されます）。ユーザーが一度も試行していない機能（試行の記録がないもの）は選択されません。そのため、試行が0件のセッションでは、何も承認されていなくても`400`（\"No features found that need resubmission\"）が返されます。その場合は`nodes_to_resubmit`を明示的に指定してください。ステップは送信した順序に関係なく、ワークフローグラフの順序で実行されます。`KYB_REGISTRY`、`KYB_KEY_PEOPLE`、および`KYB`エイリアスは`400`で拒否されます。これらの親チェックは子KYCセッションから再計算されるためです。",
                    "items": {
                      "type": "object",
                      "required": [
                        "node_id",
                        "feature"
                      ],
                      "properties": {
                        "node_id": {
                          "type": "string",
                          "description": "セッションのワークフロー定義に記載されているノード識別子(例:`feature_ocr`、`feature_liveness`)。",
                          "example": "feature_ocr"
                        },
                        "feature": {
                          "type": "string",
                          "description": "ノードの機能タイプです。エイリアス`ID_VERIFICATION`、`POA`、`PHONE`、`EMAIL`は、サーバー側でそれぞれ`OCR`、`PROOF_OF_ADDRESS`、`PHONE_VERIFICATION`、`EMAIL_VERIFICATION`に正規化されます。`KYB_REGISTRY`、`KYB_KEY_PEOPLE`、`KYB`はスキーマ検証を通過しますが、例に示すビジネスルール上の`400`で常に拒否されます。",
                          "enum": [
                            "OCR",
                            "OCR_BACK",
                            "NFC",
                            "AML",
                            "FACE",
                            "LIVENESS",
                            "FACE_MATCH",
                            "IP_ANALYSIS",
                            "AGE_ESTIMATION",
                            "PROOF_OF_ADDRESS",
                            "PHONE_VERIFICATION",
                            "EMAIL_VERIFICATION",
                            "FACE_SEARCH",
                            "DATABASE_VALIDATION",
                            "QUESTIONNAIRE",
                            "DOCUMENT_AI",
                            "KYB_DOCUMENTS",
                            "ID_VERIFICATION",
                            "POA",
                            "PHONE",
                            "EMAIL",
                            "KYB_REGISTRY",
                            "KYB_KEY_PEOPLE",
                            "KYB",
                            "GEOLOCATION"
                          ],
                          "example": "OCR"
                        }
                      }
                    }
                  },
                  "send_email": {
                    "type": "boolean",
                    "description": "変更についてユーザーにメールで通知するかどうか。`email_address`が必要です。`Approved`/`Declined`の場合、ユーザーにはステータスの通知が届きます。`Resubmitted`の場合、メールには認証リンクとステップごとの再提出理由が含まれます。",
                    "default": false,
                    "example": false
                  },
                  "email_address": {
                    "type": "string",
                    "format": "email",
                    "description": "通知メールの受信者。**`send_email`が`true`の場合は必須**です。省略すると`400`が返されます。",
                    "example": "user@example.com"
                  },
                  "email_language": {
                    "type": "string",
                    "description": "通知メールの言語。スキーマ上は任意の文字列を受け付けますが、対応していないコードは通知なく英語(`en`)にフォールバックします。",
                    "default": "en",
                    "example": "en"
                  },
                  "email_preview_token": {
                    "type": "string",
                    "writeOnly": true,
                    "minLength": 1,
                    "maxLength": 512,
                    "description": "[判定メールのプレビュー](/ja/sessions-api/preview-decision-email)（`Approved`および`Declined`の場合）または[再提出メールのプレビュー](/ja/sessions-api/preview-resubmission)（`Resubmitted`の場合）で受け取る任意のレシート、つまりその`preview_token`です。`send_email: true`の場合にのみ有効で、これを指定しない場合、リクエストは`400`を返します。受信者、言語、セッションのステータス、送信者、メール（再提出の場合は選択したステップも）が引き続きプレビューと一致している必要があり、レシートは15分後に失効します。一致しない場合、セッションが変更されたりメールが送信されたりする前に、リクエストは`409`を返します。既存の連携ではこのフィールドを省略できます。"
                  }
                }
              },
              "examples": {
                "Approve Session": {
                  "summary": "手動レビュー後にセッションを承認する",
                  "value": {
                    "new_status": "Approved",
                    "comment": "All checks passed manual review"
                  }
                },
                "Decline Session": {
                  "summary": "セッションを却下する",
                  "value": {
                    "new_status": "Declined",
                    "comment": "Suspected fraud"
                  }
                },
                "Resubmit Specific Steps": {
                  "summary": "選択したステップの再提出をメール付きで依頼",
                  "value": {
                    "new_status": "Resubmitted",
                    "nodes_to_resubmit": [
                      {
                        "node_id": "feature_ocr",
                        "feature": "OCR"
                      },
                      {
                        "node_id": "feature_liveness",
                        "feature": "LIVENESS"
                      }
                    ],
                    "send_email": true,
                    "email_address": "user@example.com",
                    "email_language": "en"
                  }
                },
                "Resubmit Auto-select": {
                  "summary": "再提出を依頼（未承認のステップを自動選択）",
                  "value": {
                    "new_status": "Resubmitted"
                  }
                },
                "Approve With Previewed Email": {
                  "summary": "Preview Decision Emailが返したメールを承認して送信する",
                  "value": {
                    "new_status": "Approved",
                    "send_email": true,
                    "email_address": "person@example.com",
                    "email_language": "en",
                    "email_preview_token": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ステータスが更新されました。レスポンスには`session_id`のみが含まれます。更新後のセッションは[Get Decision](#get-/v3/session/-sessionId-/decision/)で取得してください。変更がコミットされると`status.updated`のWebhookが送信されます。`Approved`または`Declined`を繰り返し指定しても、同じレスポンス本文が返され、何も変更されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "更新されたセッションのUUID。"
                    }
                  }
                },
                "examples": {
                  "Updated": {
                    "summary": "承認済み、却下、再提出のいずれの場合も返されます",
                    "value": {
                      "session_id": "3472fb7c-8f7c-4d1a-9cf4-cf3d74ce1a60"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドエラーは`{\"<field>\": [\"<message>\"]}`の形式で返され（一部のビジネスルールによる拒否では代わりに文字列値が使われます：`{\"nodes_to_resubmit\": \"<message>\"}`）、状態をまたぐエラーは`{\"detail\": \"<message>\"}`、同一ステータスのエラーは単なるJSON配列として返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Wrong Current Status": {
                    "summary": "セッションが更新可能な状態ではありません",
                    "value": {
                      "detail": "Only sessions with status Approved, Declined, In Review, Kyc Expired, Abandoned, Resubmitted can be updated. Current status: In Progress"
                    }
                  },
                  "Invalid Status Value": {
                    "summary": "new_statusは実在するセッションステータスだが、Approved/Declined/Resubmittedのいずれでもない",
                    "value": {
                      "new_status": [
                        "You can only update the status to 'Approved', 'Declined', or 'Resubmitted'."
                      ]
                    }
                  },
                  "Missing new_status": {
                    "summary": "必須フィールドが省略されています",
                    "value": {
                      "new_status": [
                        "This field is required."
                      ]
                    }
                  },
                  "Same Status": {
                    "summary": "すでにResubmittedのセッションで再提出がリクエストされた",
                    "value": [
                      "The new status is the same as the current status."
                    ]
                  },
                  "Email Address Required": {
                    "summary": "send_emailがtrueですが、email_addressが指定されていません",
                    "value": {
                      "email_address": [
                        "Email address is required when send_email is true."
                      ]
                    }
                  },
                  "Non-resubmittable Feature": {
                    "summary": "再提出の対象がKYBの親チェックである",
                    "value": {
                      "nodes_to_resubmit": "The following features cannot be resubmitted directly: KYB_REGISTRY. Resubmit the relevant child KYC sessions instead; the parent will recompute automatically."
                    }
                  },
                  "Nothing To Resubmit": {
                    "summary": "自動選択で承認済み以外の機能が見つかりませんでした",
                    "value": {
                      "nodes_to_resubmit": "No features found that need resubmission. All features are already approved."
                    }
                  },
                  "Invalid Feature Choice": {
                    "summary": "nodes_to_resubmitに不明な機能が含まれています",
                    "value": {
                      "nodes_to_resubmit": [
                        {
                          "feature": [
                            "\"BOGUS\" is not a valid choice. Valid choices are: OCR, OCR_BACK, NFC, AML, FACE, LIVENESS, FACE_MATCH, IP_ANALYSIS, AGE_ESTIMATION, PROOF_OF_ADDRESS, PHONE_VERIFICATION, EMAIL_VERIFICATION, FACE_SEARCH, DATABASE_VALIDATION, QUESTIONNAIRE, KYB_REGISTRY, KYB_DOCUMENTS, KYB_KEY_PEOPLE, ID_VERIFICATION, POA, PHONE, EMAIL, KYB"
                          ]
                        }
                      ]
                    }
                  },
                  "Invalid Status Value (not a status at all)": {
                    "summary": "new_statusが有効なStatusChoicesの値ではない",
                    "value": {
                      "new_status": [
                        "\"Bogus\" is not a valid choice."
                      ]
                    }
                  },
                  "Preview Receipt Without Email": {
                    "summary": "email_preview_tokenがsend_email: trueなしで送信されました",
                    "value": {
                      "email_preview_token": [
                        "A preview receipt is only valid when the email is sent."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。または、`session_id`が別のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "APIキーにwrite:sessionsがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`を持つKYCまたはKYBセッションが存在しません(削除されたセッションも`404`を返します)。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "不明なsession_id",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "バックエンドのみの機能（AML、DATABASE_VALIDATION、IP_ANALYSIS）だけを対象とした再提出が、30秒のクールダウン期間内に繰り返されました。直後に繰り返しても結果は変わりません。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Backend-only resubmit throttled": {
                    "value": {
                      "detail": "This session was already resubmitted for backend-only features within the last 30 seconds; repeating it cannot change the outcome. Wait before resubmitting again."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "メールのプレビューが変更されたか、期限切れになりました。確認する前に新しいプレビューを生成してください。セッションの変更やメールの配信は行われません。",
            "content": {
              "application/json": {
                "examples": {
                  "Preview Changed": {
                    "summary": "レシートが一致しなくなったか、15分より古くなっています",
                    "value": {
                      "detail": "This email preview changed or expired. Preview the message again before confirming."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-status/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"new_status\": \"Approved\",\n    \"comment\": \"All checks passed manual review\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_status(\n    \"11111111-2222-3333-4444-555555555555\",\n    new_status=\"Approved\",\n    comment=\"All checks passed manual review\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateStatus(\"11111111-2222-3333-4444-555555555555\", {\n  new_status: \"Approved\",\n  comment: \"All checks passed manual review\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateStatus(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdateStatusParams{\n\tNewStatus: \"Approved\",\n\tComment:   didit.String(\"All checks passed manual review\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsUpdateStatusParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateStatus(\"11111111-2222-3333-4444-555555555555\", SessionsUpdateStatusParams.builder()\n        .newStatus(SessionsUpdateStatusParams.NewStatus.of(\"Approved\"))\n        .comment(\"All checks passed manual review\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateStatus('11111111-2222-3333-4444-555555555555', [\n    'new_status' => 'Approved',\n    'comment' => 'All checks passed manual review',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_status(\n  \"11111111-2222-3333-4444-555555555555\",\n  new_status: \"Approved\",\n  comment: \"All checks passed manual review\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateStatusAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsUpdateStatusParams\n{\n    NewStatus = \"Approved\",\n    Comment = \"All checks passed manual review\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/id-verification/": {
      "post": {
        "summary": "本人確認（書類のOCRと不正チェック）",
        "description": "本人確認書類のOCRと書類の不正チェックを1回の呼び出しで実行します。抽出された所持者のフィールド、解析済みのMRZ、`Approved`/`Declined`/`In Review`の`status`、検出されたすべての問題を説明する`warnings`リストを返します。220+の国と地域の14,000+種類の書類に対応しています。\n\n**仕組み。** 書類の`front_image`（必須）と、両面書類の場合は`back_image`を送信します。書類の四隅がすべて写った、トリミングしていない写真をアップロードしてください。サービス側で書類の検出、位置補正、切り抜きを行うため、事前にトリミングしないでください。書類は自動的に分類され（国や書類の種類を指定する必要はありません）、視覚ゾーンはOCRで読み取られ、MRZとバーコードがあればデコードされます。続いてクロスチェックで日付、番号の形式、MRZのチェックディジットが検証され、視覚ゾーンとMRZが照合されます。`perform_document_liveness=true`の場合は、画面の再撮影、印刷コピー、顔写真の改ざんについても画像が追加でスクリーニングされます。\n\n**判定ロジック。** 1つでも警告が却下となる場合を除き、`status`は`Approved`になります。不正およびハードフェイルのリスクは常に却下となります：`DOCUMENT_EXPIRED`、`SCREEN_CAPTURE_DETECTED`、`PRINTED_COPY_DETECTED`、`PORTRAIT_MANIPULATION_DETECTED`、`PUBLIC_DOCUMENT_IMAGE_DETECTED`、および抽出の失敗（`NAME_NOT_DETECTED`、`DATE_OF_BIRTH_NOT_DETECTED`、`DOCUMENT_NUMBER_NOT_DETECTED`）です。（`PORTRAIT_IMAGE_NOT_DETECTED`、`INVALID_DATE`、`MRZ_NOT_DETECTED`はワークフローのセッションには存在しますが、このスタンドアロンのエンドポイントで生成されることはありません。`COULD_NOT_DETECT_DOCUMENT_TYPE`は、表面画像が既知の公的書類のデザインと高い信頼度で一致しない場合にここで返され、リクエストは却下されます。）3つのリスクグループは、`invalid_mrz_action`、`inconsistent_data_action`、`expiration_date_not_detected_action`（`DECLINE`または`NO_ACTION`）によりリクエストごとに設定できます。その他の警告（例：`POSSIBLE_DUPLICATED_USER`）は情報提供用であり、それだけで却下となることはありません。`perform_document_liveness=true`（デフォルト）で偽造チェックが有効なスコアを返さない場合（プロバイダーが失敗した、200以外で応答した、または`status=\"ERR\"`を含むHTTP 200で応答した場合）、呼び出しは`Approved`ではなく、`status: \"In Review\"`と`DOCUMENT_LIVENESS_NOT_COMPUTED`警告（`log_type: \"warning\"`）を含む`200`を返します。実行されなかったチェックは、書類が本物である証拠にはならないためです。このエスカレーションは設定できず、`Declined`を上書きすることもありません。`perform_document_liveness=false`の場合はチェックがスキップされ、ステータスは従来どおり残りの警告に従います。まったく処理できない書類の場合は`{\"error\": \"COULD_NOT_RECOGNIZE_DOCUMENT\"}`とともに`400`が返されます。読み取りはできても問題のある書類の場合は`status: \"Declined\"`とともに`200`が返されます。HTTPコードだけでなく、必ず`id_verification.status`と`id_verification.warnings`を確認してください。\n\n**請求。** `200`レスポンスごとに本人確認APIのクレジットを1つ消費します（プランのクレジットまたはチャージ残高から支払われます）。組織の残高で呼び出しを賄えない場合、エンドポイントは画像処理を行う前に、クレジット不足エラーとともに`403`を返します。\n\n**セッションの保存（`save_api_request`、デフォルトは`true`）。** `true`の場合、呼び出しはAPIタイプのセッションとして保存されます。Business Consoleに表示され、返される`request_id`は`GET /v3/session/{sessionId}/decision/`に渡せる実際のセッションIDとなり、切り抜かれた書類と顔写真の画像は保存されて有効期間の短いメディアURL（`https://<media-host>/ocr/...`）として返され、設定済みのWebhookエンドポイントに`status.updated` Webhookが送信されます。`false`の場合は何も保存されず、`request_id`は一度限りの相関用UUIDとなり、`portrait_image`/`front_image`/`back_image`はbase64エンコードされたJPEG文字列としてインラインで返されます。\n\n**サンドボックス。** サンドボックスのAPIキーでは、すべての処理と請求がスキップされます。リクエストの検証後（不正な形式の入力には引き続き`400`が返されます）、エンドポイントは固定の`Approved`モックペイロード（架空の「Sandbox User」の米国IDカード）を返します。セッションは保存されず、クレジットも消費されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない、または無効な場合は`403`（`{\"detail\": \"You do not have permission to perform this action.\"}`）が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み上限は、APIキーごとに毎分300リクエストです。超過すると`429`が返されます。",
        "operationId": "post_v3id-verification",
        "x-didit-sdk": {
          "resource": "id_verification",
          "method": "verify",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "front_image"
                ],
                "properties": {
                  "front_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "本人確認書類の表面。使用可能な拡張子: `tiff`、`jpg`、`jpeg`、`png`、`webp`、`pdf`。最大アップロードサイズ: **10 MB**（これを超えるファイルは`400`で拒否されます）。PDFはOCRの前に画像にレンダリングされます。暗号化されたPDFには`front_image_password`が必要です。画像は自動的に約0.5 MBに圧縮され、EXIFの向き情報が適用されます。書類の四隅がすべて写った、トリミングしていない撮影画像をそのままアップロードしてください。"
                  },
                  "front_image_password": {
                    "type": "string",
                    "description": "`front_image`が暗号化されたPDFの場合に復号するためのパスワード。暗号化されたPDFをパスワードなし（または誤ったパスワード）で送信すると`400`が返ります。",
                    "writeOnly": true
                  },
                  "back_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "書類の裏面。書類に裏面がある場合は必ず送信してください（多くのIDカードは裏面にMRZやバーコードがあります。省略するとレスポンスのMRZおよび裏面のフィールドが空になるだけで、このエンドポイントはMRZ欠落の警告を出しません）。形式とサイズの制限は`front_image`と同じです。省略した場合、レスポンスの`back_image`と裏面のフィールドは`null`になります。"
                  },
                  "back_image_password": {
                    "type": "string",
                    "description": "`back_image`が暗号化されたPDFの場合に復号するためのパスワード。",
                    "writeOnly": true
                  },
                  "perform_document_liveness": {
                    "type": "boolean",
                    "default": true,
                    "description": "両方の画像に対してプレゼンテーション不正のスクリーニングを行います。対象は、画面のリプレイ(`SCREEN_CAPTURE_DETECTED`)、印刷されたコピー(`PRINTED_COPY_DETECTED`)、顔写真の改ざん(`PORTRAIT_MANIPULATION_DETECTED`)です。いずれかが検出されると自動的に却下されます。デフォルトで有効です。不正スクリーニングをスキップしてレイテンシを短縮するには`false`に設定します。有効な状態でプロバイダーが使用可能なスコアを返さない場合、レスポンスは`Approved`ではなく、`DOCUMENT_LIVENESS_NOT_COMPUTED`警告付きの`In Review`になります。",
                    "example": true
                  },
                  "minimum_age": {
                    "type": "integer",
                    "nullable": true,
                    "default": null,
                    "minimum": 1,
                    "maximum": 120,
                    "description": "受け付けられ、検証もされます（1〜120）が、このエンドポイントでは**現在適用されていません**。このフィールドによって`MINIMUM_AGE_NOT_MET`警告が生成されることはありません。返された`date_of_birth`/`age`をもとに年齢ルールを適用するか、年齢制限を設定した認証セッションのワークフローを使用してください。"
                  },
                  "expiration_date_not_detected_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "有効期限を読み取れない場合の処理です（`EXPIRATION_DATE_NOT_DETECTED`）。多くの本人確認書類には有効期限が印字されていないため、デフォルトは`NO_ACTION`です。注意：有効期限が*検出され、かつ期限を過ぎている*場合は、この設定に関係なく常に却下されます（`DOCUMENT_EXPIRED`）。"
                  },
                  "invalid_mrz_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "DECLINE",
                    "description": "抽出したMRZがチェックディジット検証に失敗した場合（`MRZ_VALIDATION_FAILED`）の対応です。このエンドポイントでは、MRZがなくても警告は発生しません。MRZを持つ書類にのみ関係します。このエンドポイントでは`REVIEW`はサポートされておらず、`400`が返されます。"
                  },
                  "inconsistent_data_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "DECLINE",
                    "description": "抽出データの内部に矛盾がある場合の処理です。`DATA_INCONSISTENT`、`MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`（視覚ゾーンとMRZが一致しない）、または`DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`が該当します。"
                  },
                  "critical_field_occlusion_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "DECLINE",
                    "description": "撮影画像上で重要な印字フィールド（ID番号、氏名、生年月日、有効期限）が物理的に覆われていた場合の処理です（`CRITICAL_FIELD_OCCLUSION_DETECTED`）。このエンドポイントの他の書類完全性リスクと同様、デフォルトでは却下されます。レポートの照合対象となる番号が覆われている状態は、まさに墨消しされた書類の特徴だからです。いずれの場合も、覆われたフィールドから読み取られた値は抽出結果から除外されるため、通常は対応する`*_NOT_DETECTED`警告も併せて出力されます。このエンドポイントでは`REVIEW`はサポートされておらず、`400`を返します。"
                  },
                  "document_or_personal_number_format_mismatch_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "番号が、発行機関がその書類タイプで使用する形式と一致しない場合の処理です（`DOCUMENT_NUMBER_FORMAT_MISMATCH`、`PERSONAL_NUMBER_FORMAT_MISMATCH`）。デフォルトは`NO_ACTION`で、ステータスを変更せずに警告を報告します。このエンドポイントでは`REVIEW`はサポートされておらず、`400`を返します。"
                  },
                  "preferred_characters": {
                    "type": "string",
                    "enum": [
                      "latin",
                      "non_latin"
                    ],
                    "default": "latin",
                    "description": "ラテン文字と非ラテン文字（アラビア文字、キリル文字、CJKなど）の両方が印字された書類で、氏名・住所フィールドに使用する優先文字体系。`latin`は翻字済みまたはラテン文字の値を返し、`non_latin`は元の文字体系を優先します。"
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返された`request_id`を使って`GET /v3/session/{sessionId}/decision/`で取得でき、`status.updated`Webhookで通知され、書類画像はメディアURLとして返されます。`false`の場合、何も保存されず、`request_id`は一時的なUUIDになり、画像はbase64形式のJPEG文字列としてインラインで返されます。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な文字列（社内のユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください（例: `metadata={\"flow\":\"onboarding\"}`）。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "onboarding"
                    }
                  }
                }
              },
              "example": {
                "front_image": "(binary JPEG/PNG/PDF of the document front)",
                "back_image": "(binary JPEG/PNG/PDF of the document back)",
                "perform_document_liveness": true,
                "save_api_request": true,
                "vendor_data": "user-123",
                "metadata": {
                  "flow": "onboarding"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "書類が処理されました。`id_verification.status`は`Approved`、`Declined`、`In Review`のいずれかで、検出されたすべての問題は`id_verification.warnings`に個別に列挙されます。`In Review`は、リクエストされた書類ライブネスチェックで有効な結果が得られなかった場合(`DOCUMENT_LIVENESS_NOT_COMPUTED`)に返されます。問題のある書類でも`status: \"Declined\"`とともに`200`が返されるため、HTTPコードだけでなくボディを確認してください。`save_api_request=true`の場合、`request_id`は永続化されたセッションIDで、画像フィールドは有効期間の短いメディアURLになります。`save_api_request=false`の場合はインラインのbase64 JPEG文字列になります。",
            "content": {
              "application/json": {
                "examples": {
                  "Approved": {
                    "summary": "両面IDカードを正常に読み取り（保存済み、画像はメディアURL）",
                    "value": {
                      "request_id": "11d219ed-d59c-4b1d-8d65-9b933f12d5b8",
                      "id_verification": {
                        "status": "Approved",
                        "document_type": "Identity Card",
                        "document_subtype": "ID_CARD_GENERIC",
                        "document_number": "CBX164224",
                        "personal_number": "20446581H",
                        "portrait_image": "https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-portrait_image-8c2f.jpg?signature=...",
                        "front_image": "https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-front_image-4a1e.jpg?signature=...",
                        "back_image": "https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-back_image-77b0.jpg?signature=...",
                        "front_image_camera_front": null,
                        "back_image_camera_front": null,
                        "front_image_camera_front_face_match_score": null,
                        "back_image_camera_front_face_match_score": null,
                        "front_image_quality_score": {
                          "focus_score": 78.0,
                          "brightness_score": 83.2,
                          "brightness_issue": "ok",
                          "is_document_fully_visible": true,
                          "resolution_score": 40.7,
                          "overall_score": 70.2
                        },
                        "back_image_quality_score": {
                          "focus_score": 100.0,
                          "brightness_score": 95.6,
                          "brightness_issue": "ok",
                          "is_document_fully_visible": true,
                          "resolution_score": 43.0,
                          "overall_score": 84.4
                        },
                        "date_of_birth": "1980-01-13",
                        "age": 46,
                        "expiration_date": "2032-03-31",
                        "date_of_issue": "2022-03-31",
                        "issuing_state": "ESP",
                        "issuing_state_name": "Spain",
                        "first_name": "Julio Francisco",
                        "last_name": "Fores Sena",
                        "full_name": "Julio Francisco Fores Sena",
                        "gender": "M",
                        "address": "Brda. Urb. El Cardonal 0052 52 Po3 B,Taco,San Cristobal De La Laguna,Santa Cruz De Tenerife",
                        "formatted_address": "Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de Tenerife, Spain",
                        "place_of_birth": "Valencia, Valencia",
                        "marital_status": "UNKNOWN",
                        "nationality": "ESP",
                        "extra_fields": {
                          "first_surname": "Fores",
                          "second_surname": "Sena"
                        },
                        "mrz": {
                          "surname": "FORES SENA",
                          "name": "JULIO FRANCISCO",
                          "country": "ESP",
                          "nationality": "ESP",
                          "birth_date": "800113",
                          "expiry_date": "320331",
                          "sex": "M",
                          "document_type": "ID",
                          "document_number": "CBX164224",
                          "optional_data": "20446581H",
                          "optional_data_2": "",
                          "birth_date_hash": "9",
                          "expiry_date_hash": "8",
                          "document_number_hash": "3",
                          "final_hash": "3",
                          "personal_number": "20446581H",
                          "warnings": [],
                          "errors": [],
                          "mrz_type": "TD1",
                          "mrz_string": "IDESPCBX164224320446581H<<<<<<\n8001139M3203318ESP<<<<<<<<<<<3\nFORES<SENA<<JULIO<FRANCISCO<<<",
                          "mrz_key": "CBX164224380011393203318"
                        },
                        "parsed_address": {
                          "street_1": "Avenida el Cardonal 52",
                          "street_2": "b",
                          "city": "La Laguna",
                          "region": "Canarias",
                          "country": "ES",
                          "postal_code": "38108",
                          "address_type": "Avenida",
                          "formatted_address": "Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de Tenerife, Spain",
                          "raw_results": {
                            "address_components": [
                              {
                                "long_name": "b",
                                "short_name": "b",
                                "types": [
                                  "subpremise"
                                ]
                              },
                              {
                                "long_name": "52",
                                "short_name": "52",
                                "types": [
                                  "street_number"
                                ]
                              },
                              {
                                "long_name": "Avenida el Cardonal",
                                "short_name": "Av. el Cardonal",
                                "types": [
                                  "route"
                                ]
                              },
                              {
                                "long_name": "La Laguna",
                                "short_name": "La Laguna",
                                "types": [
                                  "locality",
                                  "political"
                                ]
                              },
                              {
                                "long_name": "Spain",
                                "short_name": "ES",
                                "types": [
                                  "country",
                                  "political"
                                ]
                              },
                              {
                                "long_name": "38108",
                                "short_name": "38108",
                                "types": [
                                  "postal_code"
                                ]
                              }
                            ],
                            "formatted_address": "Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de Tenerife, Spain",
                            "geometry": {
                              "location": {
                                "lat": 28.4501161,
                                "lng": -16.3004407
                              },
                              "location_type": "ROOFTOP"
                            },
                            "types": [
                              "street_address",
                              "subpremise"
                            ]
                          },
                          "document_location": {
                            "latitude": 28.4501161,
                            "longitude": -16.3004407
                          },
                          "label": "Spain Identity Card Address",
                          "is_verified": true,
                          "category": "Residential"
                        },
                        "warnings": [],
                        "barcodes": []
                      },
                      "vendor_data": "user-123",
                      "metadata": {
                        "flow": "onboarding"
                      },
                      "created_at": "2026-06-12T02:21:56.013573+00:00"
                    }
                  },
                  "Declined - expired document": {
                    "summary": "期限切れIDカードの表面のみのアップロード",
                    "value": {
                      "request_id": "f61681b8-9422-4378-ac3e-04c6a247fb45",
                      "id_verification": {
                        "status": "Declined",
                        "document_type": "Identity Card",
                        "document_subtype": "ID_CARD_GENERIC",
                        "document_number": "BNK123072",
                        "personal_number": "21771255F",
                        "portrait_image": "https://<media-host>/ocr/f61681b8-9422-4378-ac3e-04c6a247fb45-portrait_image-1d9a.jpg?signature=...",
                        "front_image": "https://<media-host>/ocr/f61681b8-9422-4378-ac3e-04c6a247fb45-front_image-5c2b.jpg?signature=...",
                        "back_image": null,
                        "front_image_camera_front": null,
                        "back_image_camera_front": null,
                        "front_image_camera_front_face_match_score": null,
                        "back_image_camera_front_face_match_score": null,
                        "front_image_quality_score": {
                          "focus_score": 100.0,
                          "brightness_score": 95.7,
                          "brightness_issue": "ok",
                          "is_document_fully_visible": true,
                          "resolution_score": 22.2,
                          "overall_score": 79.3
                        },
                        "back_image_quality_score": null,
                        "date_of_birth": "1997-01-30",
                        "age": 29,
                        "expiration_date": "2025-11-26",
                        "date_of_issue": null,
                        "issuing_state": "ESP",
                        "issuing_state_name": "Spain",
                        "first_name": "Lucia",
                        "last_name": "Marin Castro",
                        "full_name": "Lucia Marin Castro",
                        "gender": "F",
                        "address": null,
                        "formatted_address": null,
                        "place_of_birth": null,
                        "marital_status": "UNKNOWN",
                        "nationality": "ESP",
                        "extra_fields": {
                          "first_surname": "Marin",
                          "second_surname": "Castro"
                        },
                        "mrz": {},
                        "parsed_address": null,
                        "warnings": [
                          {
                            "risk": "DOCUMENT_EXPIRED",
                            "feature": "ID_VERIFICATION",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Document expired",
                            "long_description": "The document's expiration date has passed, rendering it no longer valid for use."
                          }
                        ],
                        "barcodes": []
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T02:25:48.117204+00:00"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "id_verification": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined",
                            "In Review"
                          ],
                          "description": "却下に該当する警告がなく、要求された書類のライブネスチェックで有効な結果が得られた場合は`Approved`、要求されたチェックで有効な結果が得られなかった場合（`DOCUMENT_LIVENESS_NOT_COMPUTED`）は`In Review`、警告が却下に該当する場合は`Declined`になります。理由は`warnings`リストで確認できます。"
                        },
                        "document_type": {
                          "type": "string",
                          "nullable": true,
                          "description": "検出された書類タイプの表示名：`Identity Card`、`Passport`、`Driver's License`、`Residence Permit`、`Health Insurance Card`、または`Tax Card`。書類を分類できなかった場合は`null`です。",
                          "example": "Identity Card"
                        },
                        "document_subtype": {
                          "type": "string",
                          "nullable": true,
                          "description": "利用可能な場合の、より詳細なサブタイプです（例：`ID_CARD_GENERIC`、`EPASSPORT`）。",
                          "example": "ID_CARD_GENERIC"
                        },
                        "document_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "CBX164224"
                        },
                        "personal_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "一部の書類に記載されている副次的な個人番号または国民番号。",
                          "example": "20446581H"
                        },
                        "portrait_image": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類から切り抜いた顔写真。`save_api_request=true`（デフォルト）の場合は有効期間の短いメディアURL（`https://<media-host>/ocr/...`）、`save_api_request=false`の場合はbase64でエンコードされたインラインのJPEG文字列です。顔写真が検出されなかった場合は`null`です。"
                        },
                        "front_image": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類表面の位置補正済みクロップ画像です。保存されている場合はメディアURL、それ以外の場合はインラインのbase64 JPEGです。"
                        },
                        "back_image": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類裏面の位置補正済みクロップ画像です。`back_image`がアップロードされていない場合は`null`です。"
                        },
                        "front_image_camera_front": {
                          "type": "string",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です（カメラ撮影による認証セッションでのみ値が入ります）。"
                        },
                        "back_image_camera_front": {
                          "type": "string",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です。"
                        },
                        "front_image_camera_front_face_match_score": {
                          "type": "number",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です。"
                        },
                        "back_image_camera_front_face_match_score": {
                          "type": "number",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です。"
                        },
                        "front_image_quality_score": {
                          "type": "object",
                          "nullable": true,
                          "description": "アップロードされた画像の撮影品質診断（その面が提供されなかった場合、またはスコアリングに失敗した場合は`null`）。すべてのスコアは0〜100です。",
                          "properties": {
                            "focus_score": {
                              "type": "number",
                              "format": "float",
                              "description": "書類の切り抜き画像の鮮明度（値が高いほど鮮明）。"
                            },
                            "brightness_score": {
                              "type": "number",
                              "format": "float",
                              "description": "エクスポージャーの品質です（高いほど良好）。"
                            },
                            "brightness_issue": {
                              "type": "string",
                              "nullable": true,
                              "description": "露出に問題がない場合は`ok`、それ以外の場合は検出された問題（例: 暗すぎる / 明るすぎる）です。"
                            },
                            "is_document_fully_visible": {
                              "type": "boolean",
                              "nullable": true,
                              "description": "書類の四隅すべてがフレーム内に収まっているかどうかです。"
                            },
                            "resolution_score": {
                              "type": "number",
                              "format": "float",
                              "description": "書類領域の実効解像度。"
                            },
                            "overall_score": {
                              "type": "number",
                              "format": "float",
                              "description": "集約品質スコア。"
                            }
                          }
                        },
                        "back_image_quality_score": {
                          "type": "object",
                          "nullable": true,
                          "description": "アップロードされた画像の撮影品質診断（その面が提供されなかった場合、またはスコアリングに失敗した場合は`null`）。すべてのスコアは0〜100です。",
                          "properties": {
                            "focus_score": {
                              "type": "number",
                              "format": "float",
                              "description": "書類の切り抜き画像の鮮明度（値が高いほど鮮明）。"
                            },
                            "brightness_score": {
                              "type": "number",
                              "format": "float",
                              "description": "エクスポージャーの品質です（高いほど良好）。"
                            },
                            "brightness_issue": {
                              "type": "string",
                              "nullable": true,
                              "description": "露出に問題がない場合は`ok`、それ以外の場合は検出された問題（例: 暗すぎる / 明るすぎる）です。"
                            },
                            "is_document_fully_visible": {
                              "type": "boolean",
                              "nullable": true,
                              "description": "書類の四隅すべてがフレーム内に収まっているかどうかです。"
                            },
                            "resolution_score": {
                              "type": "number",
                              "format": "float",
                              "description": "書類領域の実効解像度。"
                            },
                            "overall_score": {
                              "type": "number",
                              "format": "float",
                              "description": "集約品質スコア。"
                            }
                          }
                        },
                        "date_of_birth": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "example": "1980-01-13"
                        },
                        "age": {
                          "type": "integer",
                          "nullable": true,
                          "description": "保有者の年齢(歳)です。`date_of_birth`から算出されます。",
                          "example": 46
                        },
                        "expiration_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "example": "2032-03-31"
                        },
                        "date_of_issue": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "example": "2022-03-31"
                        },
                        "issuing_state": {
                          "type": "string",
                          "nullable": true,
                          "description": "発行国（ISO 3166-1 alpha-3）。",
                          "example": "ESP"
                        },
                        "issuing_state_name": {
                          "type": "string",
                          "nullable": true,
                          "example": "Spain"
                        },
                        "first_name": {
                          "type": "string",
                          "nullable": true,
                          "example": "Julio Francisco"
                        },
                        "last_name": {
                          "type": "string",
                          "nullable": true,
                          "example": "Fores Sena"
                        },
                        "full_name": {
                          "type": "string",
                          "nullable": true,
                          "example": "Julio Francisco Fores Sena"
                        },
                        "gender": {
                          "type": "string",
                          "nullable": true,
                          "description": "`M`、`F`、または印字されていない、もしくは検出されなかった場合は`null`です。",
                          "example": "M"
                        },
                        "address": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類に記載されているとおりの住所。"
                        },
                        "formatted_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "`address`をジオコーディングして正規化したもの。"
                        },
                        "place_of_birth": {
                          "type": "string",
                          "nullable": true,
                          "example": "Valencia, Valencia"
                        },
                        "marital_status": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類に婚姻状況が記載されていない限り、`UNKNOWN`です。",
                          "example": "UNKNOWN"
                        },
                        "nationality": {
                          "type": "string",
                          "nullable": true,
                          "description": "保有者の国籍(ISO 3166-1 alpha-3)です。",
                          "example": "ESP"
                        },
                        "extra_fields": {
                          "type": "object",
                          "nullable": true,
                          "additionalProperties": true,
                          "description": "専用の列がない書類固有の追加情報です（例：スペインのIDの`first_surname`/`second_surname`、運転免許証の免許区分）。"
                        },
                        "mrz": {
                          "type": "object",
                          "description": "解析済みの機械読み取りゾーン。書類にMRZがない場合、またはMRZを読み取れなかった場合は**空のオブジェクト**(`{}`)になります。その場合は`warnings`リストも確認してください。MRZ内の日付は未加工の`YYMMDD`形式です。",
                          "properties": {
                            "surname": {
                              "type": "string",
                              "example": "FORES SENA"
                            },
                            "name": {
                              "type": "string",
                              "example": "JULIO FRANCISCO"
                            },
                            "country": {
                              "type": "string",
                              "description": "発行国（ISO 3166-1 alpha-3）。",
                              "example": "ESP"
                            },
                            "nationality": {
                              "type": "string",
                              "description": "保有者の国籍(ISO 3166-1 alpha-3)です。",
                              "example": "ESP"
                            },
                            "birth_date": {
                              "type": "string",
                              "description": "MRZの生の生年月日（`YYMMDD`）。",
                              "example": "800113"
                            },
                            "expiry_date": {
                              "type": "string",
                              "description": "MRZの生の有効期限（`YYMMDD`）。",
                              "example": "320331"
                            },
                            "sex": {
                              "type": "string",
                              "example": "M"
                            },
                            "document_type": {
                              "type": "string",
                              "description": "MRZの書類種別コード（例: `ID`、`P`）。",
                              "example": "ID"
                            },
                            "document_number": {
                              "type": "string",
                              "example": "CBX164224"
                            },
                            "optional_data": {
                              "type": "string",
                              "nullable": true,
                              "example": "20446581H"
                            },
                            "optional_data_2": {
                              "type": "string",
                              "nullable": true,
                              "example": ""
                            },
                            "birth_date_hash": {
                              "type": "string",
                              "description": "生年月日のMRZチェックディジット。",
                              "example": "9"
                            },
                            "expiry_date_hash": {
                              "type": "string",
                              "description": "有効期限のMRZチェックディジット。",
                              "example": "8"
                            },
                            "document_number_hash": {
                              "type": "string",
                              "description": "書類番号のMRZチェックディジット。",
                              "example": "3"
                            },
                            "final_hash": {
                              "type": "string",
                              "description": "MRZの総合チェックディジット。",
                              "example": "3"
                            },
                            "personal_number": {
                              "type": "string",
                              "nullable": true,
                              "example": "20446581H"
                            },
                            "warnings": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "致命的ではないMRZ解析の警告。"
                            },
                            "errors": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "MRZのチェックディジットおよび解析のエラー。空でないエラーは`MRZ_VALIDATION_FAILED`警告として表示されます。"
                            },
                            "mrz_type": {
                              "type": "string",
                              "description": "MRZのレイアウト: `TD1`（IDカード、3行）、`TD2`、または`TD3`（パスポート、2行）。",
                              "example": "TD1"
                            },
                            "mrz_string": {
                              "type": "string",
                              "description": "読み取られたままのMRZの生テキスト。各行は`\\n`で区切られます。"
                            },
                            "mrz_key": {
                              "type": "string",
                              "description": "クロスチェックに使用される複合キー（書類番号+チェックディジット）。"
                            }
                          }
                        },
                        "parsed_address": {
                          "type": "object",
                          "nullable": true,
                          "description": "`address`を構造化し、ジオコーディングした内訳。書類に住所が含まれていない場合、または解析できなかった場合は`null`です。",
                          "properties": {
                            "street_1": {
                              "type": "string",
                              "nullable": true,
                              "example": "Avenida el Cardonal 52"
                            },
                            "street_2": {
                              "type": "string",
                              "nullable": true,
                              "example": "b"
                            },
                            "city": {
                              "type": "string",
                              "nullable": true,
                              "example": "La Laguna"
                            },
                            "region": {
                              "type": "string",
                              "nullable": true,
                              "example": "Canarias"
                            },
                            "country": {
                              "type": "string",
                              "nullable": true,
                              "description": "ISO 3166-1 alpha-2国コード。",
                              "example": "ES"
                            },
                            "postal_code": {
                              "type": "string",
                              "nullable": true,
                              "example": "38108"
                            },
                            "address_type": {
                              "type": "string",
                              "nullable": true,
                              "example": "Avenida"
                            },
                            "formatted_address": {
                              "type": "string",
                              "nullable": true,
                              "description": "ジオコーディングされた正規形式の住所文字列。",
                              "example": "Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de Tenerife, Spain"
                            },
                            "raw_results": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "高度な利用者向けの、ジオコーディングの生のペイロード（`address_components`、`geometry.location`、`place_id`など）。"
                            },
                            "document_location": {
                              "type": "object",
                              "nullable": true,
                              "properties": {
                                "latitude": {
                                  "type": "number"
                                },
                                "longitude": {
                                  "type": "number"
                                }
                              },
                              "description": "書類の住所をジオコーディングした座標。"
                            },
                            "label": {
                              "type": "string",
                              "nullable": true,
                              "description": "住所を読み取った書類のフィールド。",
                              "example": "Spain Identity Card Address"
                            },
                            "is_verified": {
                              "type": "boolean",
                              "description": "ジオコーディングにより住所の存在が確認されたかどうかです。"
                            },
                            "category": {
                              "type": "string",
                              "nullable": true,
                              "description": "住所の区分（例：`Residential`、`Commercial`）。",
                              "example": "Residential"
                            }
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "description": "問題なく承認された場合は空です。各エントリは検出されたリスク1件を説明します。`log_type: \"error\"`のエントリは`status`を`Declined`に設定し、`DOCUMENT_LIVENESS_NOT_COMPUTED`（`log_type: \"warning\"`）は`In Review`に設定します。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "description": "機械可読なリスクコードです。常に却下となるリスク：`DOCUMENT_EXPIRED`、`MINIMUM_AGE_NOT_MET`、`PORTRAIT_IMAGE_NOT_DETECTED`、`SCREEN_CAPTURE_DETECTED`、`PRINTED_COPY_DETECTED`、`PORTRAIT_MANIPULATION_DETECTED`、`PUBLIC_DOCUMENT_IMAGE_DETECTED`、`INVALID_DATE`、`COULD_NOT_RECOGNIZE_DOCUMENT`（400でのみ返され、警告になることはありません）、`DOCUMENT_NUMBER_NOT_DETECTED`、`COULD_NOT_DETECT_DOCUMENT_TYPE`、`NAME_NOT_DETECTED`、`DATE_OF_BIRTH_NOT_DETECTED`。リクエストオプションで制御されるリスク：`MRZ_NOT_DETECTED` / `MRZ_VALIDATION_FAILED`（`invalid_mrz_action`）、`DATA_INCONSISTENT` / `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` / `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`（`inconsistent_data_action`）、`EXPIRATION_DATE_NOT_DETECTED`（`expiration_date_not_detected_action`）。その他のリスク（例：`POSSIBLE_DUPLICATED_USER`）は情報提供のみです。`DOCUMENT_LIVENESS_NOT_COMPUTED`は、`perform_document_liveness=true`であるにもかかわらず偽造チェックが有効なスコアを返さなかった場合に発生し、`status`を`In Review`に設定します。`COULD_NOT_DETECT_DOCUMENT_TYPE`は、書類の表面が既知の公的書類のデザインと高い信頼度で一致しない場合にも返されます。たとえば、編集された書類やコンピューターで生成された書類、まだサポートされていないデザインなどです。",
                                "example": "DOCUMENT_EXPIRED"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "ID_VERIFICATION"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`ID_VERIFICATION`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "一部のリスクに関する追加情報です（例: `POSSIBLE_DUPLICATED_USER`には`duplicated_session_id`が含まれます）。ほとんどの場合は`null`です。"
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error",
                                  "warning",
                                  "information"
                                ],
                                "description": "重大度。`error`の警告は`status`を`Declined`にします。`warning`（`DOCUMENT_LIVENESS_NOT_COMPUTED`のみ。リクエストされた偽造チェックで使用可能なスコアが得られなかった場合）は`status`を`In Review`にします。`information`のエントリーは参考情報であり、ステータスを変更することはありません。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で1行にまとめた要約。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で説明したもの。"
                              }
                            }
                          }
                        },
                        "barcodes": {
                          "type": "array",
                          "description": "書類からデコードされたバーコード（PDF417、QRなど）。書類にバーコードがない場合、または読み取れなかった場合は空です。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "type": {
                                "type": "string",
                                "description": "バーコードの種類（例: `PDF417`、`QR_CODE`、`UNKNOWN`）。"
                              },
                              "position": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "画像内のバーコードの位置（利用可能な場合）。"
                              },
                              "data": {
                                "type": "string",
                                "description": "デコードされたペイロード。"
                              },
                              "data_raw": {
                                "type": "string",
                                "description": "デコード前の生のペイロード（異なる場合）。"
                              },
                              "side": {
                                "type": "string",
                                "nullable": true,
                                "description": "`front`または`back`。"
                              }
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "レスポンスが生成された日時を示すISO 8601タイムスタンプ（UTC）。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションまたは処理のエラーです。フィールド単位の問題は、DRFの標準エンベロープ(問題のあるフィールドごとにメッセージの配列が1つ)で返されます。暗号化されたPDFの問題は`{\"detail\": ...}`を返します。書類をまったく認識できない書類画像は`{\"error\": \"COULD_NOT_RECOGNIZE_DOCUMENT\"}`を返します。PDFのアップロードでは、さらに「The submitted PDF file is corrupted or invalid.」またはページがないことを示すエラーで失敗する場合があります。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing front image": {
                    "summary": "フォームデータに`front_image`が含まれていません",
                    "value": {
                      "front_image": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Unsupported file extension": {
                    "summary": "ファイル拡張子がtiff/jpg/jpeg/png/webp/pdf以外",
                    "value": {
                      "front_image": [
                        "File extension “txt” is not allowed. Allowed extensions are: tiff, jpg, jpeg, png, webp, pdf."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "アップロードが10MBの上限を超えています",
                    "value": {
                      "front_image": [
                        "File size should not exceed 10 MB"
                      ]
                    }
                  },
                  "Invalid option value": {
                    "summary": "選択肢はDECLINEまたはNO_ACTIONのみ受け付けます",
                    "value": {
                      "invalid_mrz_action": [
                        "\"REVIEW\" is not a valid choice."
                      ]
                    }
                  },
                  "Encrypted PDF": {
                    "summary": "必要なパスワードなしでPDFがアップロードされました",
                    "value": {
                      "detail": "The PDF is encrypted. Please upload a decrypted PDF or a photo instead."
                    }
                  },
                  "Wrong PDF password": {
                    "summary": "`front_image_password` / `back_image_password`でPDFを復号できません",
                    "value": {
                      "detail": "The PDF password is incorrect. Please provide the correct password."
                    }
                  },
                  "Document not recognized": {
                    "summary": "画像から本人確認書類を検出できませんでした",
                    "value": {
                      "error": "COULD_NOT_RECOGNIZE_DOCUMENT"
                    }
                  },
                  "PDF conversion failure": {
                    "summary": "アップロードされたPDFを画像に変換できませんでした",
                    "value": {
                      "error": "Failed to convert front image PDF."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、画像の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/id-verification/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'front_image=@./id_front.jpg' \\\n  -F 'back_image=@./id_back.jpg' \\\n  -F 'perform_document_liveness=true' \\\n  -F 'save_api_request=true' \\\n  -F 'vendor_data=user-123'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_verification.verify(\n    front_image=open(\"front_image.jpg\", \"rb\"),\n    back_image=open(\"back_image.jpg\", \"rb\"),\n    perform_document_liveness=True,\n    save_api_request=True,\n    vendor_data=\"user-123\",\n    metadata={\"flow\": \"onboarding\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idVerification.verify({\n  front_image: await fileFromPath(\"front_image.jpg\"),\n  back_image: await fileFromPath(\"back_image.jpg\"),\n  perform_document_liveness: true,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"onboarding\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDVerification.Verify(ctx, didit.IDVerificationVerifyParams{\n\tFrontImage:              didit.FileFromPath(\"front_image.jpg\"),\n\tBackImage:               didit.Some(didit.FileFromPath(\"back_image.jpg\")),\n\tPerformDocumentLiveness: didit.Bool(true),\n\tSaveAPIRequest:          didit.Bool(true),\n\tVendorData:              didit.String(\"user-123\"),\n\tMetadata:                didit.Some(map[string]any{\"flow\": \"onboarding\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.IdVerificationVerifyParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idVerification().verify(IdVerificationVerifyParams.builder()\n        .frontImage(Path.of(\"front_image.jpg\"))\n        .backImage(Path.of(\"back_image.jpg\"))\n        .performDocumentLiveness(true)\n        .saveApiRequest(true)\n        .vendorData(\"user-123\")\n        .metadata(Map.of(\"flow\", \"onboarding\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idVerification->verify([\n    'front_image' => File::fromPath('front_image.jpg'),\n    'back_image' => File::fromPath('back_image.jpg'),\n    'perform_document_liveness' => true,\n    'save_api_request' => true,\n    'vendor_data' => 'user-123',\n    'metadata' => ['flow' => 'onboarding'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_verification.verify(\n  front_image: Pathname(\"front_image.jpg\"),\n  back_image: Pathname(\"back_image.jpg\"),\n  perform_document_liveness: true,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"onboarding\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdVerification.VerifyAsync(new IdVerificationVerifyParams\n{\n    FrontImage = FileUpload.FromPath(\"front_image.jpg\"),\n    BackImage = FileUpload.FromPath(\"back_image.jpg\"),\n    PerformDocumentLiveness = true,\n    SaveApiRequest = true,\n    VendorData = \"user-123\",\n    Metadata = new Dictionary<string, object> { [\"flow\"] = \"onboarding\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/face-match/": {
      "post": {
        "summary": "顔照合",
        "description": "2枚の顔画像を比較(1:1)し、類似度の`score`(0–100)と`Approved`/`Declined`の`status`を返します。\n\n**仕組み。** 両方の画像をデコードし、生体認証モデルで分析します(撮影画像が横向きや上下逆になる可能性がある場合は`rotate_image=true`を設定してください)。その後、2つの顔の類似度スコアを算出します。スコアが`face_match_score_decline_threshold`(デフォルト`30`)を**厳密に上回る**場合は`status: \"Approved\"`を返し、しきい値以下の場合は`LOW_FACE_MATCH_SIMILARITY`警告付きで`Declined`を返します。スコアを算出できる顔のペアがまったくない場合でも、呼び出しは`200`を返し、`status: \"Declined\"`と`NO_REFERENCE_IMAGE`警告が付きます。`score`はデフォルトの保存パスでは`null`、`save_api_request=false`の場合は`0`になります。最良の結果を得るには、各画像に正面を向いた鮮明な顔を1つずつ含めて送信してください。\n\n**請求。** `200`レスポンスごとにFace Match APIクレジットを1つ消費します(プランのクレジットまたはチャージ残高から支払われます)。組織の残高で呼び出しをまかなえない場合、エンドポイントは画像処理を行う前にクレジット不足エラーとともに`403`を返します。\n\n**セッションの永続化(`save_api_request`、デフォルト`true`)。** `true`の場合、呼び出しはAPIタイプのセッションとして永続化されます。Business Consoleに表示され、返される`request_id`は`GET /v3/session/{sessionId}/decision/`に渡せる実際のセッションIDとなり、両方の画像がセッションの顔照合のソース画像/ターゲット画像として保存され、設定済みのWebhookエンドポイントに`status.updated`Webhookが送信されます。`false`の場合は何も保存されず、`request_id`は後から参照できない1回限りの相関用UUIDになります。\n\n**顔検索インデックス。** このエンドポイントは、顔検索インデックスに顔を登録することも、ブロックリストや重複のスクリーニングを実行することもありません。これらには`POST /v3/passive-liveness/`または`POST /v3/face-search/`を使用してください。\n\n**サンドボックス。** サンドボックスのAPIキーでは、すべての処理と請求がスキップされます。リクエストの検証後(不正な入力は引き続き`400`を返します)、エンドポイントは固定の`Approved`モックペイロードを返し、セッションは永続化されず、クレジットも消費されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報が欠落しているか無効な場合は`403`(`{\"detail\": \"You do not have permission to perform this action.\"}`)を返します。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`を返します。",
        "operationId": "post_v3face-match",
        "x-didit-sdk": {
          "resource": "face_match",
          "method": "compare",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "user_image",
                  "ref_image"
                ],
                "properties": {
                  "user_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "検証するライブまたは候補の顔画像（例：セルフィー）。被写体の顔がはっきりと見え、十分に明るい正面向きの写真を1枚送信してください。使用可能な拡張子：`tiff`、`jpg`、`jpeg`、`png`、`webp`。最大アップロードサイズ：**5 MB**（これより大きいファイルは`400`で拒否されます）。画像は処理前に約0.5 MBへ自動的に圧縮されるため、解像度を非常に高くしても精度は向上しません。"
                  },
                  "ref_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "比較対象となる基準の顔画像（例: 身分証明書の顔写真や以前に登録した写真）。形式とサイズの制限は`user_image`と同じです。"
                  },
                  "face_match_score_decline_threshold": {
                    "type": "number",
                    "format": "float",
                    "default": 30,
                    "minimum": 0,
                    "maximum": 100,
                    "description": "レスポンスの`status`を決定する類似度のしきい値(0〜100)。算出されたスコアがこの値**以下**の場合、`status`は`Declined`となり、`LOW_FACE_MATCH_SIMILARITY`警告が追加されます。この値を厳密に上回るスコアでは`Approved`が返されます。デフォルトの`30`は緩い設定です。より厳格な検証を行うには値を引き上げてください(例: `50`〜`60`)。0〜100の範囲外の値では`400`が返されます。",
                    "example": 50
                  },
                  "rotate_image": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、入力画像を90度単位（0、90、180、270）で試し、最も良好に顔を検出できる向きを使用します。EXIFの向き情報がないモバイル撮影画像に便利です。レイテンシが増加するため、画像が正立していることを保証できない場合にのみ有効にしてください。",
                    "example": false
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返された`request_id`を使って`GET /v3/session/{sessionId}/decision/`で取得でき、`status.updated`Webhookで通知されます。`false`の場合、何も保存されず、`request_id`はレスポンスの照合専用の一時的なUUIDになります。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な文字列（社内のユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください（例: `metadata={\"flow\":\"login\"}`）。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "login",
                      "device_id": "abc123"
                    }
                  }
                }
              },
              "example": {
                "user_image": "(binary JPEG/PNG of the live selfie)",
                "ref_image": "(binary JPEG/PNG of the reference photo)",
                "face_match_score_decline_threshold": 50,
                "rotate_image": false,
                "save_api_request": true,
                "vendor_data": "user-123",
                "metadata": {
                  "flow": "login"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "顔照合の計算が完了しました。`face_match.score`は0～100の浮動小数点数（小数点以下2桁）です。`status`は、スコアが`face_match_score_decline_threshold`を厳密に上回る場合は`Approved`、それ以外の場合は理由を説明する警告付きで`Declined`になります。類似度が低い場合やスコアを算出できないペアでも`200`が返されるため、HTTPコードだけでなく`face_match.status`と`face_match.warnings`を確認してください。`save_api_request=true`の場合、`request_id`は保存されたセッションIDです。",
            "content": {
              "application/json": {
                "examples": {
                  "Approved": {
                    "summary": "同一人物（スコアがしきい値を上回る）",
                    "value": {
                      "request_id": "f9f5a777-8002-44c6-baaf-128bcfd6e226",
                      "face_match": {
                        "status": "Approved",
                        "score": 99.41,
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                661,
                                728,
                                1688,
                                2188
                              ],
                              "confidence": 0.732973,
                              "age": 26.91,
                              "gender": "male",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "ref_image": {
                          "entities": [
                            {
                              "bbox": [
                                653,
                                745,
                                1691,
                                2185
                              ],
                              "confidence": 0.722082,
                              "age": 27.0,
                              "gender": "male",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": []
                      },
                      "vendor_data": "user-123",
                      "metadata": {
                        "flow": "login"
                      },
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  },
                  "Declined - low similarity": {
                    "summary": "却下しきい値以下のスコア",
                    "value": {
                      "request_id": "7cdda24e-311a-46d3-a3bb-e5d9b564ce73",
                      "face_match": {
                        "status": "Declined",
                        "score": 24.87,
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                661,
                                728,
                                1688,
                                2188
                              ],
                              "confidence": 0.732973,
                              "age": 26.91,
                              "gender": "male",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "ref_image": {
                          "entities": [
                            {
                              "bbox": [
                                156,
                                234,
                                679,
                                898
                              ],
                              "confidence": 0.717775,
                              "age": 41.2,
                              "gender": "male",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": [
                          {
                            "risk": "LOW_FACE_MATCH_SIMILARITY",
                            "feature": "FACEMATCH",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Low face match similarity",
                            "long_description": "The facial features of the provided image don't closely match the reference image, suggesting a potential identity mismatch."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:08:19.859116+00:00"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "face_match": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined"
                          ],
                          "description": "類似度スコアを算出でき、かつそのスコアが`face_match_score_decline_threshold`を厳密に上回る場合は`Approved`、それ以外は`Declined`です（理由は警告で示されます）。"
                        },
                        "score": {
                          "type": "number",
                          "format": "float",
                          "nullable": true,
                          "minimum": 0,
                          "maximum": 100,
                          "description": "0〜100の類似度スコアで、2つの画像が同一人物を写しているというモデルの信頼度を表します。小数点以下2桁に丸められるのは`save_api_request`がtrueの場合のみで、`save_api_request=false`の場合は丸められていない浮動小数点値が返されます。顔のペアをスコアリングできなかった場合は`null`になります(デフォルトの`save_api_request=true`の場合)。`save_api_request=false`の場合、同じ状況が`score: 0`として現れることがあります。いずれの場合も`NO_REFERENCE_IMAGE`警告が含まれ、`status`は`Declined`になります。",
                          "example": 99.41
                        },
                        "user_image": {
                          "type": "object",
                          "description": "分析した各画像の顔検出結果。",
                          "properties": {
                            "entities": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "bbox": {
                                    "type": "array",
                                    "items": {
                                      "type": "integer"
                                    },
                                    "minItems": 4,
                                    "maxItems": 4,
                                    "description": "処理済み画像内で検出された顔のバウンディングボックス。`[x_min, y_min, x_max, y_max]`のピクセル座標で示します。",
                                    "example": [
                                      661,
                                      728,
                                      1688,
                                      2188
                                    ]
                                  },
                                  "confidence": {
                                    "type": "number",
                                    "format": "float",
                                    "minimum": 0,
                                    "maximum": 1,
                                    "description": "顔検出の信頼度（0～1）。",
                                    "example": 0.732973
                                  },
                                  "age": {
                                    "type": "number",
                                    "format": "float",
                                    "description": "検出された顔についてモデルが推定した年齢（歳）。参考情報であり、顔照合の判定には影響しません。",
                                    "example": 26.91
                                  },
                                  "gender": {
                                    "type": "string",
                                    "description": "検出された顔についてモデルが予測した性別（`male`または`female`）。参考情報です。",
                                    "example": "male"
                                  },
                                  "race": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "予約済みフィールドです。このエンドポイントのレスポンスでは常に`null`です。",
                                    "example": null
                                  }
                                }
                              },
                              "description": "検出された顔ごとに1エントリー。"
                            },
                            "best_angle": {
                              "type": "integer",
                              "description": "最も良好な顔検出結果が得られた回転角度(度: 0、90、180、270のいずれか)。`rotate_image=true`によって向きが補正された場合にのみゼロ以外になります。",
                              "example": 0
                            }
                          }
                        },
                        "ref_image": {
                          "type": "object",
                          "description": "参照画像の顔検出結果。形式は`user_image`と同じです。",
                          "properties": {
                            "entities": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "bbox": {
                                    "type": "array",
                                    "items": {
                                      "type": "integer"
                                    },
                                    "minItems": 4,
                                    "maxItems": 4,
                                    "description": "処理済み画像内で検出された顔のバウンディングボックス。`[x_min, y_min, x_max, y_max]`のピクセル座標で示します。",
                                    "example": [
                                      661,
                                      728,
                                      1688,
                                      2188
                                    ]
                                  },
                                  "confidence": {
                                    "type": "number",
                                    "format": "float",
                                    "minimum": 0,
                                    "maximum": 1,
                                    "description": "顔検出の信頼度（0～1）。",
                                    "example": 0.732973
                                  },
                                  "age": {
                                    "type": "number",
                                    "format": "float",
                                    "description": "検出された顔についてモデルが推定した年齢（歳）。参考情報であり、顔照合の判定には影響しません。",
                                    "example": 26.91
                                  },
                                  "gender": {
                                    "type": "string",
                                    "description": "検出された顔についてモデルが予測した性別（`male`または`female`）。参考情報です。",
                                    "example": "male"
                                  },
                                  "race": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "予約済みフィールドです。このエンドポイントのレスポンスでは常に`null`です。",
                                    "example": null
                                  }
                                }
                              },
                              "description": "検出された顔ごとに1エントリー。"
                            },
                            "best_angle": {
                              "type": "integer",
                              "example": 0
                            }
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "description": "問題なく承認された場合は空です。`NO_REFERENCE_IMAGE`（`error`）: スコアリングできる顔のペアがありませんでした。`LOW_FACE_MATCH_SIMILARITY`（`error`）: スコアが却下のしきい値以下です。いずれかが含まれると`status`は`Declined`になります。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "enum": [
                                  "NO_REFERENCE_IMAGE",
                                  "LOW_FACE_MATCH_SIMILARITY"
                                ],
                                "description": "機械可読なリスクコードです。"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "FACEMATCH"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`FACEMATCH`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "顔照合の警告では常に`null`です。"
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error",
                                  "warning",
                                  "information"
                                ],
                                "description": "重大度。`error`の警告は`status`を`Declined`にします。`warning`と`information`のエントリーは参考情報であり、それ単独で却下になることはありません。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で1行にまとめた要約。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で説明したもの。"
                              }
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "レスポンスが生成された日時を示すISO 8601タイムスタンプ（UTC）。例: `2026-06-12T01:04:42.763237+00:00`。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。必須の画像がない、5MBを超える、サポートされていない拡張子である、またはオプションが範囲外の場合に返されます。ボディはDRFの標準的なフィールドエラーエンベロープで、問題のあるフィールドごとにメッセージの配列が1つ含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing required image": {
                    "summary": "フォームデータに`ref_image`（または`user_image`）が含まれていない",
                    "value": {
                      "ref_image": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Unsupported file extension": {
                    "summary": "ファイル拡張子がtiff/jpg/jpeg/png/webp以外",
                    "value": {
                      "user_image": [
                        "File extension “txt” is not allowed. Allowed extensions are: tiff, jpg, jpeg, png, webp."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "アップロードが5MBの上限を超えています",
                    "value": {
                      "user_image": [
                        "File size should not exceed 5 MB"
                      ]
                    }
                  },
                  "Threshold out of range": {
                    "summary": "`face_match_score_decline_threshold`が0–100の範囲外です",
                    "value": {
                      "face_match_score_decline_threshold": [
                        "Ensure this value is less than or equal to 100."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、画像の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/face-match/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'user_image=@./selfie.jpg' \\\n  -F 'ref_image=@./id_portrait.jpg' \\\n  -F 'face_match_score_decline_threshold=50' \\\n  -F 'save_api_request=true' \\\n  -F 'vendor_data=user-123'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.face_match.compare(\n    user_image=open(\"user_image.jpg\", \"rb\"),\n    ref_image=open(\"ref_image.jpg\", \"rb\"),\n    face_match_score_decline_threshold=50.0,\n    rotate_image=False,\n    save_api_request=True,\n    vendor_data=\"user-123\",\n    metadata={\"flow\": \"login\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.faceMatch.compare({\n  user_image: await fileFromPath(\"user_image.jpg\"),\n  ref_image: await fileFromPath(\"ref_image.jpg\"),\n  face_match_score_decline_threshold: 50.0,\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"login\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FaceMatch.Compare(ctx, didit.FaceMatchCompareParams{\n\tUserImage:                      didit.FileFromPath(\"user_image.jpg\"),\n\tRefImage:                       didit.FileFromPath(\"ref_image.jpg\"),\n\tFaceMatchScoreDeclineThreshold: didit.Float(50.0),\n\tRotateImage:                    didit.Bool(false),\n\tSaveAPIRequest:                 didit.Bool(true),\n\tVendorData:                     didit.String(\"user-123\"),\n\tMetadata:                       didit.Some(map[string]any{\"flow\": \"login\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.FaceMatchCompareParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.faceMatch().compare(FaceMatchCompareParams.builder()\n        .userImage(Path.of(\"user_image.jpg\"))\n        .refImage(Path.of(\"ref_image.jpg\"))\n        .faceMatchScoreDeclineThreshold(50.0)\n        .rotateImage(false)\n        .saveApiRequest(true)\n        .vendorData(\"user-123\")\n        .metadata(Map.of(\"flow\", \"login\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->faceMatch->compare([\n    'user_image' => File::fromPath('user_image.jpg'),\n    'ref_image' => File::fromPath('ref_image.jpg'),\n    'face_match_score_decline_threshold' => 50.0,\n    'rotate_image' => false,\n    'save_api_request' => true,\n    'vendor_data' => 'user-123',\n    'metadata' => ['flow' => 'login'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.face_match.compare(\n  user_image: Pathname(\"user_image.jpg\"),\n  ref_image: Pathname(\"ref_image.jpg\"),\n  face_match_score_decline_threshold: 50.0,\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"login\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.FaceMatch.CompareAsync(new FaceMatchCompareParams\n{\n    UserImage = FileUpload.FromPath(\"user_image.jpg\"),\n    RefImage = FileUpload.FromPath(\"ref_image.jpg\"),\n    FaceMatchScoreDeclineThreshold = 50.0,\n    RotateImage = false,\n    SaveApiRequest = true,\n    VendorData = \"user-123\",\n    Metadata = new Dictionary<string, object> { [\"flow\"] = \"login\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/age-estimation/": {
      "post": {
        "summary": "年齢推定（顔の年齢+パッシブライブネス）",
        "description": "1枚の顔写真から人物の年齢を推定し、同じ呼び出しでパッシブライブネスチェックを実行します。モデルが予測した`age_estimation`(年単位)、ライブネスの`score`(0〜100)、および`Approved`/`Declined`の`status`を返します。年齢は**顔からモデルが予測したものであり、書類と照合して検証されたものではありません**。年齢制限や負担の少ないチェックに使用し、法的な年齢証明としては使用しないでください。\n\n**仕組み。** 画像内の顔が解析されます(撮影画像が横向きや上下逆になる可能性がある場合は`rotate_image=true`を設定してください)。検出された各顔に推定年齢が付与され、フレーム内で最も大きい顔が`age_estimation`の値になります。並行して、パッシブライブネスモデルが写真に写っているのが生身の人物かどうかをスコア化し(ユーザーへのチャレンジは不要)、プレゼンテーション攻撃(写真の写真、画面、マスク)を検出します。最良の結果を得るには、1枚の画像につき、正面を向いた明るく鮮明な顔を1つ送信してください。\n\n**判定ロジック。** 警告が1つでもあれば却下されます。`status`が`Approved`になるのは、`warnings`配列が空の場合のみです。ライブネスの`score`が`face_liveness_score_decline_threshold`(デフォルト`30`)以下の場合は`LOW_LIVENESS_SCORE`が追加されます。攻撃が検出された場合は`LIVENESS_FACE_ATTACK`、ライブネスモデルが顔を検出できなかった場合は`NO_FACE_DETECTED`、顔の年齢を推定できなかった場合は`AGE_NOT_DETECTED`(`age_estimation`は`null`)、推定年齢が`age_estimation_decline_threshold`(デフォルト`18`)未満の場合は`AGE_BELOW_MINIMUM`が追加されます。しきい値に近い境界的な年齢については、書類に基づく検証へのフォールバックを用意してください。しきい値付近の顔ではモデルの誤差が大きくなります。\n\n**請求。** `200`レスポンスごとに年齢推定APIのクレジットを1つ消費します(プランのクレジットまたはチャージ残高から支払われます)。組織の残高で呼び出しをまかなえない場合、エンドポイントは画像処理を行う前に、クレジット不足エラーとともに`403`を返します。\n\n**セッションの保存(`save_api_request`、デフォルト`true`)。** `true`の場合、呼び出しはAPIタイプのセッションとして保存されます。Business Consoleに表示され、返される`request_id`は`GET /v3/session/{sessionId}/decision/`に渡せる実際のセッションIDになります(結果はそこで`liveness_checks[]`内に`features: [\"AGE_ESTIMATION\"]`とともに公開されます)。また、顔の切り抜き画像と参照画像が保存され、顔エンベディングがアプリケーションの顔インデックス(顔検索と重複検出に使用)に追加され、`status.updated`のWebhookが送信されます。`false`の場合は何も保存されず、`request_id`は後から参照できない一回限りの相関UUIDになります。\n\n**サンドボックス。** サンドボックスのAPIキーでは、すべての処理と請求がスキップされます。リクエストの検証後(不正な入力の場合は引き続き`400`を返します)、エンドポイントは静的な`Approved`のモックペイロード(`age_estimation: 30`、警告なし)を返し、セッションは保存されず、クレジットも消費されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報が欠落しているか無効な場合は`403`(`{\"detail\": \"You do not have permission to perform this action.\"}`)を返します。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`を返します。",
        "operationId": "post_v3age-estimation",
        "x-didit-sdk": {
          "resource": "age_estimation",
          "method": "estimate",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "user_image"
                ],
                "properties": {
                  "user_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "分析する顔写真（例: セルフィー）。被写体の顔がはっきりと写り、十分に明るい正面向きの写真を1枚送信してください。使用可能な拡張子: `tiff`、`jpg`、`jpeg`、`png`、`webp`（PDFは不可）。最大アップロードサイズ: **5 MB**（これを超えるファイルは`400`で拒否されます）。画像は処理前に自動的に約0.3 MBに圧縮されるため、解像度を非常に高くしても精度は向上しません。"
                  },
                  "face_liveness_score_decline_threshold": {
                    "type": "number",
                    "format": "float",
                    "default": 30,
                    "minimum": 0,
                    "maximum": 100,
                    "description": "ライブネスのしきい値（0–100）。ライブネスの`score`がこの値**以下**の場合、`LOW_LIVENESS_SCORE`警告が追加され、却下されます。より厳格ななりすまし対策にするには値を上げてください。0–100の範囲外の値は`400`を返します。",
                    "example": 30
                  },
                  "age_estimation_decline_threshold": {
                    "type": "integer",
                    "default": 18,
                    "minimum": 0,
                    "maximum": 100,
                    "description": "許容される推定年齢の最小値（歳）。推定年齢がこの値を**下回る**場合は`AGE_BELOW_MINIMUM`警告が追加され、却下されます。`0`に設定すると年齢チェックが無効になります（その場合、呼び出しではライブネス検知と年齢推定のみが実行され、年齢に基づく判定は行われません）。",
                    "example": 18
                  },
                  "rotate_image": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、入力画像を90度単位（0、90、180、270）で試し、最も良好に顔を検出できる向きを使用します。EXIFの向き情報がないモバイル撮影画像に便利です。レイテンシが増加するため、画像が正立していることを保証できない場合にのみ有効にしてください。",
                    "example": false
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返された`request_id`を使って`GET /v3/session/{sessionId}/decision/`で取得でき、`status.updated`Webhookで通知され、検出された顔はアプリケーションの顔インデックスに追加されます。`false`の場合、何も保存されず、`request_id`はレスポンスの照合専用の一時的なUUIDになります。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な文字列（社内のユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください（例: `metadata={\"flow\":\"age-gate\"}`）。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "age-gate"
                    }
                  }
                }
              },
              "example": {
                "user_image": "(binary JPEG/PNG of the selfie)",
                "face_liveness_score_decline_threshold": 30,
                "age_estimation_decline_threshold": 18,
                "rotate_image": false,
                "save_api_request": true,
                "vendor_data": "user-123",
                "metadata": {
                  "flow": "age-gate"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "年齢推定とパッシブライブネスが完了しました。`age_estimation.age_estimation`は、検出された最も大きい顔についてモデルが予測した年齢（年）です（顔がない場合は`null`）。`age_estimation.score`はパッシブライブネスのスコア（0–100）です。`status`は`warnings`が空の場合にのみ`Approved`になります。未成年またはなりすましの撮影でも`200`と`status: \"Declined\"`が返されるため、HTTPコードだけでなくボディを確認してください。`save_api_request=true`の場合、`request_id`は保存されたセッションIDです。",
            "content": {
              "application/json": {
                "examples": {
                  "Approved": {
                    "summary": "実在する成人の顔（両方のチェックに合格）",
                    "value": {
                      "request_id": "0c40ba43-64ab-4e2e-b4b8-7d1f12f81bc1",
                      "age_estimation": {
                        "status": "Approved",
                        "method": "PASSIVE",
                        "score": 97.5,
                        "user_image": {
                          "entities": [
                            {
                              "age": 27.33,
                              "bbox": [
                                40,
                                40,
                                100,
                                100
                              ],
                              "confidence": 0.7177750468254089,
                              "gender": "male"
                            }
                          ],
                          "best_angle": 0
                        },
                        "age_estimation": 27.33,
                        "warnings": []
                      },
                      "vendor_data": "user-123",
                      "metadata": {
                        "flow": "age-gate"
                      },
                      "created_at": "2026-06-12T02:24:11.512941+00:00"
                    }
                  },
                  "Declined - age below threshold": {
                    "summary": "推定年齢が`age_estimation_decline_threshold`未満",
                    "value": {
                      "request_id": "9be41a6f-2f4e-4f57-92f4-b3a4f6f0a1c2",
                      "age_estimation": {
                        "status": "Declined",
                        "method": "PASSIVE",
                        "score": 95.0,
                        "user_image": {
                          "entities": [
                            {
                              "age": 16.5,
                              "bbox": [
                                40,
                                40,
                                100,
                                100
                              ],
                              "confidence": 0.7177750468254089,
                              "gender": "female"
                            }
                          ],
                          "best_angle": 0
                        },
                        "age_estimation": 16.5,
                        "warnings": [
                          {
                            "risk": "AGE_BELOW_MINIMUM",
                            "feature": "LIVENESS",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Age below minimum",
                            "long_description": "The age of the face is below the minimum age threshold for the application."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T02:26:40.118332+00:00"
                    }
                  },
                  "Declined - liveness too low": {
                    "summary": "ライブネススコアが却下のしきい値以下（なりすましの可能性）",
                    "value": {
                      "request_id": "5f6f2f1f-7c4f-43b9-8d62-0a8f4c2d9e77",
                      "age_estimation": {
                        "status": "Declined",
                        "method": "PASSIVE",
                        "score": 5.0,
                        "user_image": {
                          "entities": [
                            {
                              "age": 25.0,
                              "bbox": [
                                40,
                                40,
                                100,
                                100
                              ],
                              "confidence": 0.7177750468254089,
                              "gender": "male"
                            }
                          ],
                          "best_angle": 0
                        },
                        "age_estimation": 25.0,
                        "warnings": [
                          {
                            "risk": "LOW_LIVENESS_SCORE",
                            "feature": "LIVENESS",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Low liveness score",
                            "long_description": "The liveness check resulted in a low score, indicating potential use of non-live facial representations or poor-quality biometric data."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T02:27:02.901547+00:00"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "age_estimation": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined"
                          ],
                          "description": "警告が発生しなかった場合は`Approved`、それ以外の場合は`Declined`になります（このエンドポイントが生成する警告はすべて却下となります）。"
                        },
                        "method": {
                          "type": "string",
                          "enum": [
                            "PASSIVE"
                          ],
                          "description": "ライブネスの方式。このエンドポイントでは常に`PASSIVE`（単一画像、ユーザーへのチャレンジなし）です。"
                        },
                        "score": {
                          "type": "number",
                          "format": "float",
                          "nullable": true,
                          "minimum": 0,
                          "maximum": 100,
                          "description": "0から100のパッシブライブネススコアで、写真に生身の人物が写っていることに対するモデルの信頼度です。`face_liveness_score_decline_threshold`と比較され、その値以下の場合は`LOW_LIVENESS_SCORE`で却下されます。ライブネスモデルが信頼度を返さない場合は`null`になります。しきい値の比較ではnullが0として扱われるため、この場合も`LOW_LIVENESS_SCORE`で却下されます。",
                          "example": 97.5
                        },
                        "user_image": {
                          "type": "object",
                          "description": "分析した画像の顔検出結果。",
                          "properties": {
                            "entities": {
                              "type": "array",
                              "description": "検出された顔ごとに1エントリー。顔が見つからなかった場合は空です（その場合`age_estimation`は`null`となり、`AGE_NOT_DETECTED`警告が追加されます）。",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "age": {
                                    "type": "number",
                                    "format": "float",
                                    "description": "この顔についてモデルが推定した年齢（歳）。",
                                    "example": 27.33
                                  },
                                  "bbox": {
                                    "type": "array",
                                    "items": {
                                      "type": "integer"
                                    },
                                    "minItems": 4,
                                    "maxItems": 4,
                                    "description": "処理済み画像内で検出された顔のバウンディングボックス。`[x_min, y_min, x_max, y_max]`のピクセル座標で示します。",
                                    "example": [
                                      40,
                                      40,
                                      100,
                                      100
                                    ]
                                  },
                                  "confidence": {
                                    "type": "number",
                                    "format": "float",
                                    "minimum": 0,
                                    "maximum": 1,
                                    "description": "顔検出の信頼度（0～1）。",
                                    "example": 0.7177750468254089
                                  },
                                  "gender": {
                                    "type": "string",
                                    "description": "検出された顔についてモデルが予測した性別（`male`または`female`）。参考情報です。",
                                    "example": "male"
                                  }
                                }
                              }
                            },
                            "best_angle": {
                              "type": "integer",
                              "nullable": true,
                              "description": "最も良好な顔検出結果が得られた回転角度(度: 0、90、180、270のいずれか)。`rotate_image=true`によって向きが補正された場合にのみゼロ以外になります。",
                              "example": 0
                            }
                          }
                        },
                        "age_estimation": {
                          "type": "number",
                          "format": "float",
                          "nullable": true,
                          "description": "検出された顔のうち**最も大きい**顔についてモデルが予測した年齢（歳）。顔の年齢を推定できなかった場合は`null`になります（`AGE_NOT_DETECTED`警告が追加され、呼び出しは却下されます）。",
                          "example": 27.33
                        },
                        "warnings": {
                          "type": "array",
                          "description": "問題なく承認された場合は空です。エントリが1件でもあると`status`は`Declined`になります。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "enum": [
                                  "NO_FACE_DETECTED",
                                  "LOW_LIVENESS_SCORE",
                                  "LIVENESS_FACE_ATTACK",
                                  "AGE_NOT_DETECTED",
                                  "AGE_BELOW_MINIMUM"
                                ],
                                "description": "機械可読なリスクコードです。`NO_FACE_DETECTED`：ライブネスモデルが顔を検出できませんでした。`LOW_LIVENESS_SCORE`：ライブネスの`score`が`face_liveness_score_decline_threshold`以下です。`LIVENESS_FACE_ATTACK`：プレゼンテーション攻撃（写真、画面、マスク）が検出されました。`AGE_NOT_DETECTED`：顔から年齢を推定できませんでした。`AGE_BELOW_MINIMUM`：推定年齢が`age_estimation_decline_threshold`を下回っています。`NO_FACE_DETECTED`と`LOW_LIVENESS_SCORE`は同時には発生しません。顔が検出されない場合は`NO_FACE_DETECTED`のみが出力されます。"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "LIVENESS"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`LIVENESS`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "年齢推定の警告では常に`null`です。"
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error"
                                ],
                                "description": "重大度。このエンドポイントが生成する警告はすべて`error`であり、`status`を`Declined`に設定します。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で1行にまとめた要約。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で説明したもの。"
                              }
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "レスポンスが生成された日時を示すISO 8601タイムスタンプ（UTC）。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。`user_image`がない、5MBを超える、サポートされていない拡張子である、またはしきい値が範囲外の場合に返されます。ボディはDRFの標準的なフィールドエラーエンベロープで、問題のあるフィールドごとにメッセージの配列が1つ含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing user image": {
                    "summary": "フォームデータに`user_image`が含まれていません",
                    "value": {
                      "user_image": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Unsupported file extension": {
                    "summary": "ファイル拡張子がtiff/jpg/jpeg/png/webp以外",
                    "value": {
                      "user_image": [
                        "File extension “txt” is not allowed. Allowed extensions are: tiff, jpg, jpeg, png, webp."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "アップロードが5MBの上限を超えています",
                    "value": {
                      "user_image": [
                        "File size should not exceed 5 MB"
                      ]
                    }
                  },
                  "Threshold out of range": {
                    "summary": "`face_liveness_score_decline_threshold`が0–100の範囲外です",
                    "value": {
                      "face_liveness_score_decline_threshold": [
                        "Ensure this value is less than or equal to 100."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、画像の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/age-estimation/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'user_image=@./selfie.jpg' \\\n  -F 'age_estimation_decline_threshold=18' \\\n  -F 'face_liveness_score_decline_threshold=30' \\\n  -F 'save_api_request=true' \\\n  -F 'vendor_data=user-123'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.age_estimation.estimate(\n    user_image=open(\"user_image.jpg\", \"rb\"),\n    face_liveness_score_decline_threshold=30.0,\n    age_estimation_decline_threshold=18,\n    rotate_image=False,\n    save_api_request=True,\n    vendor_data=\"user-123\",\n    metadata={\"flow\": \"age-gate\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.ageEstimation.estimate({\n  user_image: await fileFromPath(\"user_image.jpg\"),\n  face_liveness_score_decline_threshold: 30.0,\n  age_estimation_decline_threshold: 18,\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"age-gate\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.AgeEstimation.Estimate(ctx, didit.AgeEstimationEstimateParams{\n\tUserImage:                         didit.FileFromPath(\"user_image.jpg\"),\n\tFaceLivenessScoreDeclineThreshold: didit.Float(30.0),\n\tAgeEstimationDeclineThreshold:     didit.Int(18),\n\tRotateImage:                       didit.Bool(false),\n\tSaveAPIRequest:                    didit.Bool(true),\n\tVendorData:                        didit.String(\"user-123\"),\n\tMetadata:                          didit.Some(map[string]any{\"flow\": \"age-gate\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.AgeEstimationEstimateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.ageEstimation().estimate(AgeEstimationEstimateParams.builder()\n        .userImage(Path.of(\"user_image.jpg\"))\n        .faceLivenessScoreDeclineThreshold(30.0)\n        .ageEstimationDeclineThreshold(18L)\n        .rotateImage(false)\n        .saveApiRequest(true)\n        .vendorData(\"user-123\")\n        .metadata(Map.of(\"flow\", \"age-gate\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->ageEstimation->estimate([\n    'user_image' => File::fromPath('user_image.jpg'),\n    'face_liveness_score_decline_threshold' => 30.0,\n    'age_estimation_decline_threshold' => 18,\n    'rotate_image' => false,\n    'save_api_request' => true,\n    'vendor_data' => 'user-123',\n    'metadata' => ['flow' => 'age-gate'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.age_estimation.estimate(\n  user_image: Pathname(\"user_image.jpg\"),\n  face_liveness_score_decline_threshold: 30.0,\n  age_estimation_decline_threshold: 18,\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"age-gate\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.AgeEstimation.EstimateAsync(new AgeEstimationEstimateParams\n{\n    UserImage = FileUpload.FromPath(\"user_image.jpg\"),\n    FaceLivenessScoreDeclineThreshold = 30.0,\n    AgeEstimationDeclineThreshold = 18,\n    RotateImage = false,\n    SaveApiRequest = true,\n    VendorData = \"user-123\",\n    Metadata = new Dictionary<string, object> { [\"flow\"] = \"age-gate\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/poa/": {
      "post": {
        "summary": "住所証明(書類のOCRと住所チェック)",
        "description": "公共料金の請求書、銀行取引明細書、政府発行書類などの住所証明書類を、1回の呼び出しで抽出・検証します。発行元、発行日/有効期限、名義人の氏名、未加工の住所と解析・ジオコーディング済みの住所、`Approved`/`Declined`の`status`、検出されたすべての問題を説明する`warnings`リストを返します。\n\n**レイテンシ。** 抽出はLLMベースで行われるため、通常の呼び出しには**5〜15秒**、複数ページのPDFでは最大**約30秒**かかります。クライアントのタイムアウトは**45秒以上**に設定し、呼び出しが完了する前に再試行しないでください。\n\n**仕組み。** 書類(画像またはPDF、最大15MB。暗号化されたPDFには`document_password`が必要)は書類タイプとサブタイプ(例: `UTILITY_BILL` / `WATER_BILL`)に分類されます。発行元、日付、名義人の氏名、住所はLLMベースの抽出で取り出されます。住所は解析・ジオコーディングされ、`poa_parsed_address`に格納されます。PDF/EXIFのフォレンジックで改ざんを検査し(デジタル署名後の変更、既知のPDF編集ツール、オーバーレイテキストによる改ざん、不審な再エクスポート)、`SUSPECTED_DOCUMENT_MANIPULATION`または`DOCUMENT_METADATA_MISMATCH`として検出します。書類の経過期間は`poa_document_age_months`に、言語は`poa_languages_allowed`に照らして検証されます。`expected_address`、`expected_country`、または`expected_first_name`/`expected_last_name`を渡すと、抽出された値と照合され、不一致があればフラグが立てられます。\n\n**判定ロジック。** 却下に該当する警告が1つもない限り、`status`は`Approved`になります。重大な不合格項目は常に却下となります。対象は`MISSING_ADDRESS_INFORMATION`、`POA_DOCUMENT_EXPIRED`、`INVALID_DOCUMENT_TYPE`、`UNABLE_TO_VALIDATE_DOCUMENT_AGE`に加え、`UNABLE_TO_EXTRACT_ISSUE_DATE`と`POA_NAME_NOT_DETECTED`です(このエンドポイントでは設定できません)。5つのリスクグループは、`poa_*_action`オプション(`DECLINE`または`NO_ACTION`、デフォルトはいずれも`DECLINE`)でリクエストごとに設定できます。このエンドポイントでは、`POA_DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION`と`UNPARSABLE_OR_INVALID_ADDRESS`は情報提供のみを目的としており、却下になることはありません。まったく処理できない書類には`400`が返されます。読み取りは可能でも問題のある書類には、`status: \"Declined\"`とともに`200`が返されます。HTTPコードだけでなく、必ず`poa.status`と`poa.warnings`を確認してください。\n\n**請求。** `200`レスポンスごとに住所証明APIクレジットを1つ消費します(プランのクレジットまたはチャージ残高から支払われます)。組織の残高で呼び出しの費用を賄えない場合、エンドポイントは書類を処理する前に、クレジット不足エラーとともに`403`を返します。\n\n**セッションの保存(`save_api_request`、デフォルトは`true`)。** `true`の場合、呼び出しはAPIタイプのセッションとして保存されます。セッションはBusiness Consoleに表示され、アップロードされた書類は保存されます。返される`request_id`は、`GET /v3/session/{sessionId}/decision/`に渡せる実際のセッションIDです(判定では、このレスポンスに含まれない`document_file`と`document_metadata`のフォレンジック情報も公開されます)。また、`status.updated`のWebhookが送信されます。`false`の場合は何も保存されず、`request_id`は後から照会できない一回限りの相関用UUIDになります。\n\n**サンドボックス。** サンドボックスのAPIキーでは、処理と請求がすべてスキップされます。リクエストの検証後(不正な形式の入力には引き続き`400`が返されます)、エンドポイントは固定の`Approved`モックペイロード(架空の「Sandbox Power Co.」の電気料金請求書)を返します。セッションは保存されず、クレジットも消費されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がないか無効な場合は`403`(`{\"detail\": \"You do not have permission to perform this action.\"}`)が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに1分あたり300リクエストまでです。超過すると`429`が返されます。\n\n注: `FUTURE_ISSUE_DATE`と`POOR_DOCUMENT_QUALITY`はワークフローのセッションには存在しますが、このスタンドアロンのエンドポイントで生成されることはありません。そのため、このエンドポイントでは発行日が未来の書類も自動的には却下されません。",
        "operationId": "post_v3poa",
        "x-didit-sdk": {
          "resource": "proof_of_address",
          "method": "verify",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "document"
                ],
                "properties": {
                  "document": {
                    "type": "string",
                    "format": "binary",
                    "description": "住所証明の書類です。使用できる拡張子：`tiff`、`jpg`、`jpeg`、`png`、`pdf`、`webp`。最大アップロードサイズ：**15 MB**（これを超えるファイルは`400`で拒否されます）。複数ページのPDFに対応しています（レイテンシは長くなります）。暗号化されたPDFには`document_password`が必要です。画像は処理前に自動的に圧縮されます。"
                  },
                  "document_password": {
                    "type": "string",
                    "description": "`document`が暗号化されたPDFの場合に復号するためのパスワード。暗号化されたPDFをパスワードなし（または誤ったパスワード）で送信すると`400`が返ります。",
                    "writeOnly": true
                  },
                  "expected_address": {
                    "type": "string",
                    "description": "書類と照合する住所です。ジオコーディングされたうえで、抽出された住所と比較されます。一致しない場合（または想定住所をジオコーディング・検証できない場合）は`ADDRESS_MISMATCH_WITH_PROVIDED`が追加され、その扱いは`poa_address_mismatch_action`で制御されます。ジオコーディング後の形式は`expected_details_formatted_address` / `expected_details_parsed_address`で返されます。",
                    "example": "Av. Monseñor Tavella 1291, Salta, Argentina"
                  },
                  "expected_country": {
                    "type": "string",
                    "description": "書類と照合する国（ISO 3166-1コード、例: `ARG`または`AR`）。書類の国と一致しない場合は`POA_COUNTRY_MISMATCH_WITH_PROVIDED`が追加され、その扱いは`poa_address_mismatch_action`で制御されます。",
                    "example": "ARG"
                  },
                  "expected_first_name": {
                    "type": "string",
                    "description": "`name_on_document`と照合する名です（音訳を考慮したあいまい一致）。スコアが一致しきい値を下回ると`NAME_MISMATCH_WITH_PROVIDED`が追加され、`poa_address_mismatch_action`に従って処理されます。",
                    "example": "Sophia"
                  },
                  "expected_last_name": {
                    "type": "string",
                    "description": "`name_on_document`と照合する姓。`expected_first_name`と組み合わせて一致スコアを算出します。",
                    "example": "Martinez"
                  },
                  "poa_languages_allowed": {
                    "type": "string",
                    "description": "受け付ける書類の言語をISO 639-1コードで指定するカンマ区切りのリスト(例:`en,es,fr`)。省略した場合または空欄の場合は、**サポートされている51言語すべて**を受け付けます。リストに含まれない言語の書類には`UNSUPPORTED_DOCUMENT_LANGUAGE`が付与されます(`poa_unsupported_language_action`で制御)。リストに不明なコードが含まれている場合は、サポートされているコードの一覧とともに`400`が返されます。",
                    "example": "en,es"
                  },
                  "poa_document_age_months": {
                    "type": "string",
                    "description": "書類の種類ごとに書類の最大経過月数を設定する、カンマ区切りの`key:value`ペア。キー: `utility_bill`、`bank_statement`、`government_issued_document`、`other_poa_document`。値: `1`～`120`、または無制限（経過期間チェックなし）の場合は`-1`。省略時のデフォルト: `utility_bill:3,bank_statement:3,government_issued_document:12,other_poa_document:12`。上限より古い書類は`POA_DOCUMENT_EXPIRED`で却下されます。**注意:** このフィールドを指定する場合は、受け付ける*すべての*種類を列挙してください。省略した種類は受け付けないものとして扱われ（情報コード`POA_DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION`）、その経過期間チェックはスキップされます。",
                    "example": "utility_bill:3,bank_statement:6"
                  },
                  "poa_name_mismatch_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "受け付けられますが、**現在適用されていません**。名前不一致の警告（`NAME_MISMATCH_WITH_PROVIDED`）は、代わりに`poa_address_mismatch_action`に従います。名前と住所の両方の不一致時の動作を制御するには、`poa_address_mismatch_action`を設定してください。"
                  },
                  "poa_document_issues_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "ファイルの完全性に問題がある場合の処理です。実際には、このエンドポイントで生成されるのは`DOCUMENT_METADATA_MISMATCH`のみです。"
                  },
                  "poa_document_authenticity_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "書類の改ざんが疑われる場合の処理です（`SUSPECTED_DOCUMENT_MANIPULATION`）。たとえば、PDFがデジタル署名後に変更された、既知のPDF編集ソフトで処理された、オーバーレイテキストによる改ざんが見られる、EXIFの日付に矛盾がある、といったケースです。"
                  },
                  "poa_unsupported_language_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "書類の言語が`poa_languages_allowed`に含まれない場合の処理です（`UNSUPPORTED_DOCUMENT_LANGUAGE`）。"
                  },
                  "poa_address_mismatch_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "抽出した情報が`expected_*`フィールドと一致しない場合の対応です。`ADDRESS_MISMATCH_WITH_PROVIDED`、`NAME_MISMATCH_WITH_PROVIDED`、`POA_COUNTRY_MISMATCH_WITH_PROVIDED`はいずれもこのアクションに従います。"
                  },
                  "poa_issuer_not_identified_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "書類上で発行元の会社または組織を特定できない場合の処理です（`ISSUER_NOT_IDENTIFIED`）。"
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返された`request_id`を使って`GET /v3/session/{sessionId}/decision/`で取得でき、`status.updated`Webhookで通知され、アップロードされた書類が保存されます。`false`の場合、何も保存されず、`request_id`はレスポンスの照合専用の一時的なUUIDになります。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な文字列（社内のユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください（例: `metadata={\"flow\":\"onboarding\"}`）。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "onboarding"
                    }
                  }
                }
              },
              "example": {
                "document": "(binary JPEG/PNG/PDF of the utility bill or bank statement)",
                "expected_address": "Av. Monseñor Tavella 1291, Salta, Argentina",
                "expected_country": "ARG",
                "expected_first_name": "Sophia",
                "expected_last_name": "Martinez",
                "poa_languages_allowed": "en,es",
                "save_api_request": true,
                "vendor_data": "user-123"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "書類が処理されました。`poa.status`は`Approved`または`Declined`で、検出されたすべての問題は`poa.warnings`に個別に列挙されます。期限切れ、不一致、または不審な書類でも`status: \"Declined\"`とともに`200`が返されるため、HTTPコードだけでなくボディを確認してください。`save_api_request=true`の場合、`request_id`は永続化されたセッションIDです。",
            "content": {
              "application/json": {
                "examples": {
                  "Approved": {
                    "summary": "公共料金の請求書を問題なく読み取れました。想定される詳細情報のチェックはありません",
                    "value": {
                      "request_id": "4b523a8d-ed32-45e4-8aa8-a89eda459d88",
                      "poa": {
                        "issuing_state": "ARG",
                        "document_type": "UTILITY_BILL",
                        "document_subtype": "WATER_BILL",
                        "document_language": "es",
                        "issuer": "Aguas del Norte",
                        "issue_date": "2026-04-10",
                        "expiration_date": null,
                        "poa_address": "AVDA. MONSEÑOR TAVELLA N° 1291, B° VILLA LAVALLE CP: 4400, CAPITAL - SALTA",
                        "poa_formatted_address": "Av. Monseñor Tavella 1291 b, A4400 Salta, Argentina",
                        "poa_parsed_address": {
                          "street_1": "Avenida Monseñor Tavella 1291",
                          "street_2": "b",
                          "city": "Salta",
                          "region": "Salta",
                          "country": "AR",
                          "postal_code": "A4400",
                          "document_location": {
                            "latitude": -24.8208682,
                            "longitude": -65.4130954
                          }
                        },
                        "expected_details_address": null,
                        "expected_details_formatted_address": null,
                        "expected_details_parsed_address": null,
                        "name_on_document": "OESTE EMBOTELLADORA S.A.",
                        "extra_fields": {
                          "bank_account_number": null,
                          "bank_iban": null,
                          "bank_sort_code": null,
                          "bank_routing_number": null,
                          "bank_swift_bic": null,
                          "bank_branch_name": null,
                          "bank_branch_address": null,
                          "document_phone_number": null,
                          "additional_names": [
                            "LA EMBOTELLADORA DEL NORTE SA"
                          ]
                        },
                        "detected_codes": [
                          {
                            "type": "QR_CODE",
                            "page_number": 1,
                            "position": [
                              [
                                820,
                                1120
                              ],
                              [
                                1002,
                                1120
                              ],
                              [
                                1002,
                                1302
                              ],
                              [
                                820,
                                1302
                              ]
                            ],
                            "x": 820,
                            "y": 1120,
                            "width": 182,
                            "height": 182,
                            "page_width": 1190,
                            "page_height": 1684,
                            "raw_payload": "aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==",
                            "parsed_payload": "https://aguasdelnorte.com/factura/998811"
                          },
                          {
                            "type": "CODE_128",
                            "page_number": 1,
                            "position": [
                              [
                                112,
                                1480
                              ],
                              [
                                560,
                                1480
                              ],
                              [
                                560,
                                1540
                              ],
                              [
                                112,
                                1540
                              ]
                            ],
                            "x": 112,
                            "y": 1480,
                            "width": 448,
                            "height": 60,
                            "page_width": 1190,
                            "page_height": 1684,
                            "raw_payload": "MDA5OTg4MTEwMDA0Mg==",
                            "parsed_payload": "0099881100042"
                          }
                        ],
                        "status": "Approved",
                        "warnings": []
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T02:29:02.439655+00:00"
                    }
                  },
                  "Declined - document too old": {
                    "summary": "発行日が許可された`poa_document_age_months`より古い",
                    "value": {
                      "request_id": "f61681b8-9422-4378-ac3e-04c6a247fb45",
                      "poa": {
                        "issuing_state": "ARG",
                        "document_type": "UTILITY_BILL",
                        "document_subtype": "WATER_BILL",
                        "document_language": "es",
                        "issuer": "Aguas del Norte",
                        "issue_date": "2021-02-10",
                        "expiration_date": null,
                        "poa_address": "AVDA. MONSEÑOR TAVELLA N° 1291, B° VILLA LAVALLE CP: 4400, CAPITAL - SALTA",
                        "poa_formatted_address": "Av. Monseñor Tavella 1291 b, A4400 Salta, Argentina",
                        "poa_parsed_address": {
                          "street_1": "Avenida Monseñor Tavella 1291",
                          "street_2": "b",
                          "city": "Salta",
                          "region": "Salta",
                          "country": "AR",
                          "postal_code": "A4400",
                          "document_location": {
                            "latitude": -24.8208682,
                            "longitude": -65.4130954
                          }
                        },
                        "expected_details_address": null,
                        "expected_details_formatted_address": null,
                        "expected_details_parsed_address": null,
                        "name_on_document": "OESTE EMBOTELLADORA S.A.",
                        "extra_fields": {
                          "bank_account_number": null,
                          "bank_iban": null,
                          "bank_sort_code": null,
                          "bank_routing_number": null,
                          "bank_swift_bic": null,
                          "bank_branch_name": null,
                          "bank_branch_address": null,
                          "document_phone_number": null,
                          "additional_names": [
                            "LA EMBOTELLADORA DEL NORTE SA"
                          ]
                        },
                        "status": "Declined",
                        "warnings": [
                          {
                            "risk": "POA_DOCUMENT_EXPIRED",
                            "feature": "PROOF_OF_ADDRESS",
                            "additional_data": {
                              "expiration_reason": "age_window",
                              "max_age_months": 3,
                              "document_subtype": "WATER_BILL",
                              "document_type": "UTILITY_BILL",
                              "issue_date": "2021-02-10"
                            },
                            "log_type": "error",
                            "short_description": "Document expired",
                            "long_description": "The submitted document is older than the maximum accepted age of 3 months from its issue date, which exceeds the acceptable time period for validity."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T02:23:02.165493+00:00"
                    }
                  },
                  "Declined - name mismatch": {
                    "summary": "`expected_first_name`/`expected_last_name`が`name_on_document`と一致しません",
                    "value": {
                      "request_id": "0a7f2f9c-58f1-4b8e-b1e3-2f6f9d4f7a21",
                      "poa": {
                        "issuing_state": "ARG",
                        "document_type": "UTILITY_BILL",
                        "document_subtype": "WATER_BILL",
                        "document_language": "es",
                        "issuer": "Aguas del Norte",
                        "issue_date": "2021-02-10",
                        "expiration_date": null,
                        "poa_address": "AVDA. MONSEÑOR TAVELLA N° 1291, B° VILLA LAVALLE CP: 4400, CAPITAL - SALTA",
                        "poa_formatted_address": "Av. Monseñor Tavella 1291 b, A4400 Salta, Argentina",
                        "poa_parsed_address": {
                          "street_1": "Avenida Monseñor Tavella 1291",
                          "street_2": "b",
                          "city": "Salta",
                          "region": "Salta",
                          "country": "AR",
                          "postal_code": "A4400",
                          "document_location": {
                            "latitude": -24.8208682,
                            "longitude": -65.4130954
                          }
                        },
                        "expected_details_address": null,
                        "expected_details_formatted_address": null,
                        "expected_details_parsed_address": null,
                        "name_on_document": "OESTE EMBOTELLADORA S.A.",
                        "extra_fields": {
                          "bank_account_number": null,
                          "bank_iban": null,
                          "bank_sort_code": null,
                          "bank_routing_number": null,
                          "bank_swift_bic": null,
                          "bank_branch_name": null,
                          "bank_branch_address": null,
                          "document_phone_number": null,
                          "additional_names": [
                            "LA EMBOTELLADORA DEL NORTE SA"
                          ]
                        },
                        "status": "Declined",
                        "warnings": [
                          {
                            "risk": "NAME_MISMATCH_WITH_PROVIDED",
                            "feature": "PROOF_OF_ADDRESS",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Name mismatch with provided information",
                            "long_description": "The full name on the document does not match the name from the user's verified identity documents, or the full name sent by API."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T02:27:21.330172+00:00"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "poa": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined"
                          ],
                          "description": "却下に該当する警告がない場合は`Approved`、それ以外の場合は`Declined`になります。理由は`warnings`リストで確認できます。"
                        },
                        "issuing_state": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類から抽出された書類の発行国。通常はISO 3166-1 alpha-3です（例: `ARG`）。",
                          "example": "ARG"
                        },
                        "document_type": {
                          "type": "string",
                          "enum": [
                            "UTILITY_BILL",
                            "BANK_STATEMENT",
                            "GOVERNMENT_ISSUED_DOCUMENT",
                            "OTHER_POA_DOCUMENT",
                            "UNKNOWN"
                          ],
                          "description": "検出された書類のカテゴリー。`UNKNOWN`は、書類を有効な住所証明として分類できなかったことを意味し、`INVALID_DOCUMENT_TYPE`で自動的に却下されます。nullになることはなく、分類に失敗した場合は`UNKNOWN`になります。"
                        },
                        "document_subtype": {
                          "type": "string",
                          "description": "`document_type`内のより詳細な分類です。例：`ELECTRICITY_BILL`、`WATER_BILL`、`GAS_BILL`、`INTERNET_BILL`、`PHONE_BILL`（公共料金の請求書）、`ACCOUNT_STATEMENT`、`CREDIT_CARD_STATEMENT`（銀行取引明細書）、`TAX_ASSESSMENT`、`RESIDENCY_CERTIFICATE`（政府発行書類）。サブタイプを判定できなかった場合は`UNKNOWN`になります。nullになることはなく、分類に失敗した場合は`UNKNOWN`にフォールバックします。",
                          "example": "WATER_BILL"
                        },
                        "document_language": {
                          "type": "string",
                          "nullable": true,
                          "description": "検出された書類の言語（ISO 639-1）。",
                          "example": "es"
                        },
                        "issuer": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類を発行した企業または組織。`null`の場合は`ISSUER_NOT_IDENTIFIED`が追加されます。",
                          "example": "Aguas del Norte"
                        },
                        "issue_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "description": "書類の発行日(`YYYY-MM-DD`)。抽出できなかった場合は`null`となり、このエンドポイントでは`UNABLE_TO_EXTRACT_ISSUE_DATE`で却下されます。",
                          "example": "2021-02-10"
                        },
                        "expiration_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "description": "書類に記載されている明示的な有効期限または有効期日です（記載がある場合）。`poa_document_age_months`による経過期間のチェックとは独立しています。"
                        },
                        "poa_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類に記載されているとおりの住所。`null`の場合は`MISSING_ADDRESS_INFORMATION`で自動的に却下されます。"
                        },
                        "poa_formatted_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "`poa_address`をジオコーディングして正規化したもの。",
                          "example": "Av. Monseñor Tavella 1291 b, A4400 Salta, Argentina"
                        },
                        "poa_parsed_address": {
                          "type": "object",
                          "nullable": true,
                          "description": "書類の住所を構造化し、ジオコーディングした内訳。住所を解析できなかった場合は`null`です。",
                          "properties": {
                            "street_1": {
                              "type": "string",
                              "nullable": true,
                              "example": "Avenida Monseñor Tavella 1291"
                            },
                            "street_2": {
                              "type": "string",
                              "nullable": true
                            },
                            "city": {
                              "type": "string",
                              "nullable": true,
                              "example": "Salta"
                            },
                            "region": {
                              "type": "string",
                              "nullable": true,
                              "example": "Salta"
                            },
                            "country": {
                              "type": "string",
                              "nullable": true,
                              "description": "ISO 3166-1 alpha-2国コード。",
                              "example": "AR"
                            },
                            "postal_code": {
                              "type": "string",
                              "nullable": true,
                              "example": "A4400"
                            },
                            "document_location": {
                              "type": "object",
                              "nullable": true,
                              "properties": {
                                "latitude": {
                                  "type": "number"
                                },
                                "longitude": {
                                  "type": "number"
                                }
                              },
                              "description": "書類の住所をジオコーディングした座標。"
                            }
                          }
                        },
                        "expected_details_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "送信した`expected_address`のエコー、または`null`。"
                        },
                        "expected_details_formatted_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "`expected_address`をジオコーディングして正規化したもの。指定されていない場合、またはジオコーディングできない場合は`null`です。"
                        },
                        "expected_details_parsed_address": {
                          "type": "object",
                          "nullable": true,
                          "additionalProperties": true,
                          "description": "`expected_address`の完全なジオコーディング結果（番地・市区町村・地域・国・郵便番号に加え、ジオコーダーの生の出力と`is_verified`フラグ）。`expected_address`が指定されていない場合は`null`です。"
                        },
                        "name_on_document": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類から抽出された主たる名義人の氏名。指定されている場合は`expected_first_name`/`expected_last_name`と照合されます。このエンドポイントでは、`null`の場合は`POA_NAME_NOT_DETECTED`で却下されます。",
                          "example": "OESTE EMBOTELLADORA S.A."
                        },
                        "extra_fields": {
                          "type": "object",
                          "description": "書類固有の追加情報です。銀行関連のフィールドは、銀行取引明細書に記載されている場合に入力されます。それ以外の場合は`null`です。",
                          "properties": {
                            "bank_account_number": {
                              "type": "string",
                              "nullable": true
                            },
                            "bank_iban": {
                              "type": "string",
                              "nullable": true
                            },
                            "bank_sort_code": {
                              "type": "string",
                              "nullable": true
                            },
                            "bank_routing_number": {
                              "type": "string",
                              "nullable": true
                            },
                            "bank_swift_bic": {
                              "type": "string",
                              "nullable": true
                            },
                            "bank_branch_name": {
                              "type": "string",
                              "nullable": true
                            },
                            "bank_branch_address": {
                              "type": "string",
                              "nullable": true
                            },
                            "document_phone_number": {
                              "type": "string",
                              "nullable": true,
                              "description": "書類に記載された連絡先電話番号。"
                            },
                            "additional_names": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "書類に記載されているその他の名義人の氏名です（例：共同口座名義人、以前の口座名義）。"
                            }
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "description": "問題なく承認された場合は空です。各エントリは検出されたリスク1件を説明します。`log_type: \"error\"`のエントリは`status`を`Declined`に設定します。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "description": "機械可読なリスクコードです。常に却下となるリスク：`MISSING_ADDRESS_INFORMATION`、`POA_DOCUMENT_EXPIRED`、`INVALID_DOCUMENT_TYPE`、`UNABLE_TO_VALIDATE_DOCUMENT_AGE`、および`UNABLE_TO_EXTRACT_ISSUE_DATE`と`POA_NAME_NOT_DETECTED`（このエンドポイントでは却下に固定）。リクエストオプションで制御されるリスク：`NAME_MISMATCH_WITH_PROVIDED` / `ADDRESS_MISMATCH_WITH_PROVIDED` / `POA_COUNTRY_MISMATCH_WITH_PROVIDED`（`poa_address_mismatch_action`）、`POOR_DOCUMENT_QUALITY`（このエンドポイントでは発生しません） / `DOCUMENT_METADATA_MISMATCH`（`poa_document_issues_action`）、`SUSPECTED_DOCUMENT_MANIPULATION`（`poa_document_authenticity_action`）、`UNSUPPORTED_DOCUMENT_LANGUAGE`（`poa_unsupported_language_action`）、`ISSUER_NOT_IDENTIFIED`（`poa_issuer_not_identified_action`）。このエンドポイントで情報提供のみのリスク：`POA_DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION`、`UNPARSABLE_OR_INVALID_ADDRESS`。",
                                "example": "POA_DOCUMENT_EXPIRED"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "PROOF_OF_ADDRESS"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`PROOF_OF_ADDRESS`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "一部のリスクに関する追加情報です。例えば`POA_DOCUMENT_EXPIRED`には`expiration_reason`（`printed_expiration`または`age_window`）、`document_type`、`document_subtype`、`issue_date`が含まれ、さらに`printed_expiration`の場合は`expiration_date`、`age_window`の場合は`max_age_months`が含まれます。`SUSPECTED_DOCUMENT_MANIPULATION`には`reason`と`detection_method`が含まれます。ほとんどのリスクでは`null`です。"
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error",
                                  "information"
                                ],
                                "description": "重大度。`error`の警告は`status`を`Declined`にします。`information`のエントリは参考情報であり、それ単独で却下となることはありません。（このエンドポイントは`warning`を生成しません。オプションが`DECLINE`または`NO_ACTION`のみを受け付けるためです。）"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で1行にまとめた要約。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で説明したもの。"
                              }
                            }
                          }
                        },
                        "detected_codes": {
                          "type": "array",
                          "description": "書類の処理済みのすべてのページで検出されたQRコードとバーコード。見つからない場合は空です。位置は特定できたもののデコードできないQRコードは`parsed_payload: null`となります。",
                          "items": {
                            "$ref": "#/components/schemas/DocumentAIDetectedCode"
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "レスポンスが生成された日時を示すISO 8601タイムスタンプ（UTC）。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションまたは処理のエラーです。フィールド単位の問題は、DRFの標準エンベロープ(問題のあるフィールドごとにメッセージの配列が1つ)で返されます。暗号化されたPDFの問題は`{\"detail\": ...}`を返します。抽出パイプラインで処理できない書類は`{\"error\": [\"Error extracting POA information\"]}`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing document": {
                    "summary": "フォームデータに`document`が含まれていません",
                    "value": {
                      "document": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Unsupported file extension": {
                    "summary": "ファイル拡張子がtiff/jpg/jpeg/png/pdf/webp以外",
                    "value": {
                      "document": [
                        "File extension “txt” is not allowed. Allowed extensions are: tiff, jpg, jpeg, png, pdf, webp."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "アップロードが15MBの上限を超えています",
                    "value": {
                      "document": [
                        "File size should not exceed 15 MB"
                      ]
                    }
                  },
                  "Encrypted PDF": {
                    "summary": "必要なパスワードなしでPDFがアップロードされました",
                    "value": {
                      "detail": "The PDF is encrypted. Please upload a decrypted PDF or a photo instead."
                    }
                  },
                  "Wrong PDF password": {
                    "summary": "`document_password`でPDFを復号できません",
                    "value": {
                      "detail": "The PDF password is incorrect. Please provide the correct password."
                    }
                  },
                  "Invalid language code": {
                    "summary": "`poa_languages_allowed`にサポートされていないコードが含まれている",
                    "value": {
                      "poa_languages_allowed": [
                        "Invalid language code: 'xx'. Must be one of the supported languages: ['ar', 'bn', 'hy', 'bg', 'bs', 'ca', 'cnr', 'sq', 'zh', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fi', 'fr', 'ka', 'kk', 'de', 'el', 'he', 'hi', 'hu', 'id', 'it', 'ja', 'ko', 'ky', 'lv', 'lt', 'mk', 'mn', 'ms', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'sl', 'so', 'es', 'sv', 'th', 'tr', 'uk', 'uz', 'vi']."
                      ]
                    }
                  },
                  "Invalid document age value": {
                    "summary": "`poa_document_age_months`の値が1〜120 / -1の範囲外",
                    "value": {
                      "poa_document_age_months": [
                        "Invalid integer value for 'utility_bill': '999'. Must be -1 (unlimited) or a positive integer between 1 and 120."
                      ]
                    }
                  },
                  "Extraction failure": {
                    "summary": "抽出パイプラインで書類を処理できませんでした",
                    "value": {
                      "error": [
                        "Error extracting POA information"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、書類の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/poa/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'document=@./utility-bill.pdf' \\\n  -F 'expected_address=Av. Monseñor Tavella 1291, Salta, Argentina' \\\n  -F 'expected_country=ARG' \\\n  -F 'expected_first_name=Sophia' \\\n  -F 'expected_last_name=Martinez' \\\n  -F 'poa_languages_allowed=en,es' \\\n  -F 'vendor_data=user-123' \\\n  --max-time 45"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.proof_of_address.verify(\n    document=open(\"document.pdf\", \"rb\"),\n    expected_address=\"Av. Monseñor Tavella 1291, Salta, Argentina\",\n    expected_country=\"ARG\",\n    expected_first_name=\"Sophia\",\n    expected_last_name=\"Martinez\",\n    poa_languages_allowed=\"en,es\",\n    save_api_request=True,\n    vendor_data=\"user-123\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.proofOfAddress.verify({\n  document: await fileFromPath(\"document.pdf\"),\n  expected_address: \"Av. Monseñor Tavella 1291, Salta, Argentina\",\n  expected_country: \"ARG\",\n  expected_first_name: \"Sophia\",\n  expected_last_name: \"Martinez\",\n  poa_languages_allowed: \"en,es\",\n  save_api_request: true,\n  vendor_data: \"user-123\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.ProofOfAddress.Verify(ctx, didit.ProofOfAddressVerifyParams{\n\tDocument:            didit.FileFromPath(\"document.pdf\"),\n\tExpectedAddress:     didit.String(\"Av. Monseñor Tavella 1291, Salta, Argentina\"),\n\tExpectedCountry:     didit.String(\"ARG\"),\n\tExpectedFirstName:   didit.String(\"Sophia\"),\n\tExpectedLastName:    didit.String(\"Martinez\"),\n\tPOALanguagesAllowed: didit.String(\"en,es\"),\n\tSaveAPIRequest:      didit.Bool(true),\n\tVendorData:          didit.String(\"user-123\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.types.ProofOfAddressVerifyParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.proofOfAddress().verify(ProofOfAddressVerifyParams.builder()\n        .document(Path.of(\"document.pdf\"))\n        .expectedAddress(\"Av. Monseñor Tavella 1291, Salta, Argentina\")\n        .expectedCountry(\"ARG\")\n        .expectedFirstName(\"Sophia\")\n        .expectedLastName(\"Martinez\")\n        .poaLanguagesAllowed(\"en,es\")\n        .saveApiRequest(true)\n        .vendorData(\"user-123\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->proofOfAddress->verify([\n    'document' => File::fromPath('document.pdf'),\n    'expected_address' => 'Av. Monseñor Tavella 1291, Salta, Argentina',\n    'expected_country' => 'ARG',\n    'expected_first_name' => 'Sophia',\n    'expected_last_name' => 'Martinez',\n    'poa_languages_allowed' => 'en,es',\n    'save_api_request' => true,\n    'vendor_data' => 'user-123',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.proof_of_address.verify(\n  document: Pathname(\"document.pdf\"),\n  expected_address: \"Av. Monseñor Tavella 1291, Salta, Argentina\",\n  expected_country: \"ARG\",\n  expected_first_name: \"Sophia\",\n  expected_last_name: \"Martinez\",\n  poa_languages_allowed: \"en,es\",\n  save_api_request: true,\n  vendor_data: \"user-123\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.ProofOfAddress.VerifyAsync(new ProofOfAddressVerifyParams\n{\n    Document = FileUpload.FromPath(\"document.pdf\"),\n    ExpectedAddress = \"Av. Monseñor Tavella 1291, Salta, Argentina\",\n    ExpectedCountry = \"ARG\",\n    ExpectedFirstName = \"Sophia\",\n    ExpectedLastName = \"Martinez\",\n    PoaLanguagesAllowed = \"en,es\",\n    SaveApiRequest = true,\n    VendorData = \"user-123\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/document-ai/": {
      "post": {
        "summary": "Document AI(カスタムフィールド抽出と改ざんチェック)",
        "description": "給与明細、資金証明、資産の出所に関する書簡、納税証明書、契約書、請求書など、あらゆる補足書類から、**お客様自身**が定義したフィールドを1回の呼び出しで抽出します。ファイルと`fields`定義（キー、名前、抽出指示、型）を送信すると、型付きの値（`text`、`number`、`YYYY-MM-DD`形式の`date`）、想定される個人または企業との名前の一致スコア（任意）、PDF/EXIFの改ざんシグナル、`Approved`/`Declined`/`In Review`のいずれかの`status`、検出されたすべての問題を説明する`warnings`リストが返されます。これはホスト型のDocument AIワークフローステップ（`/core-technology/document-ai/overview`を参照）に対応するサーバー間連携版です。Diditのデフォルトの抽出モデルを使用し、プロバイダーの選択は提供していません。\n\n**レイテンシ。** 抽出はLLMベースです。通常の呼び出しには**5–15秒**、複数ページのPDFでは最大**約30秒**かかります。クライアントのタイムアウトは**45秒以上**に設定し、呼び出しが完了する前に再試行しないでください。\n\n**リクエスト形式。** `multipart/form-data`のみ対応しています。`fields`は**JSONエンコードされた1つの配列文字列**（1–30項目、最大16 KB）です。ブラケット形式のフォーム配列は`400`で拒否されます。各項目は`{key, name, instruction, type, required, is_full_name}`です。`key`はレスポンスで返されるJSONキー（`^[a-z0-9_]{1,64}$`、一意）、`instruction`はモデルに何を読み取るかを指示し、`type`は`text`（デフォルト） | `number` | `date`のいずれかです。`required`を指定すると、値を読み取れない場合に`DOCUMENT_AI_MISSING_REQUIRED_FIELDS`が発生します。`is_full_name: true`を設定できるのは最大1つのフィールドのみで、これにより想定される名前と比較する値を指定します。\n\n**名前照合。** `expected_first_name` + `expected_last_name`（個人）**または**`expected_company_name`（+ 任意で`expected_company_country`）を渡します。両方を渡すことはできません。`is_full_name`フィールドの値（指定がない場合は、キーが名前らしい最初のテキストフィールド）があいまい比較されます。両方の値が存在する場合、`name_match_score`（0–100）と`name_on_document`は常に返されます。スコアが`document_ai_name_match_score_threshold`（デフォルト80）を下回ると`DOCUMENT_AI_NAME_MISMATCH`が追加され、その扱いは`document_ai_name_mismatch_action`によって決まります。\n\n**判定ロジック。** 各リスクは設定可能なアクションに対応します。`DECLINE` → `status: \"Declined\"`、`REVIEW` → `status: \"In Review\"`、`NO_ACTION` → 情報提供のみです。デフォルトはワークフローステップと同じで、読み取れない書類は`REVIEW`、必須フィールドの欠落は`REVIEW`、改ざんの疑いは`DECLINE`、名前の不一致は`NO_ACTION`、サポートされていないファイルは`REVIEW`です。まったく処理できない書類は`400`を返し、読み取れるものの問題がある書類は`Declined`/`In Review`とともに`200`を返します。HTTPコードだけでなく、必ず`document_ai.status`と`document_ai.warnings`を確認してください。\n\n**請求。** `200`レスポンスごとにDocument AI APIクレジットを1つ消費します。定価は**書類1件あたり$0.20**で、プランのクレジットまたはチャージ残高から支払われます。組織の残高で呼び出しをまかなえない場合、エンドポイントは処理を開始する前に`403`を返します。サンドボックスのAPIキーは決定論的なモックレスポンスを返し、課金されません。\n\n**永続化。** `save_api_request=true`（デフォルト）の場合、呼び出しはAPIタイプのセッションとして保存されます。書類、抽出された値、フィールド定義、名前照合のスナップショットが保持され、セッションはBusiness Consoleに表示され、`request_id`は`GET /v3/session/{sessionId}/decision/`で使用できます。",
        "operationId": "post_v3document-ai",
        "x-didit-sdk": {
          "resource": "document_ai",
          "method": "analyze",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "document",
                  "fields"
                ],
                "properties": {
                  "document": {
                    "type": "string",
                    "format": "binary",
                    "description": "読み取る書類です。使用可能な拡張子: `tiff`、`jpg`、`jpeg`、`png`、`pdf`、`webp`、`zip`。最大アップロードサイズ: **30 MB**（これを超えるファイルは`400`で拒否されます）。複数ページのPDFに対応しています（レイテンシーは長くなります）。暗号化されたPDFは`400`で拒否されます。画像は処理前に自動的に圧縮されます。"
                  },
                  "fields": {
                    "type": "string",
                    "description": "**1〜30**個のフィールド定義を含む、JSONエンコードされた配列文字列1つ(最大16KB)。各項目: `key`(必須、`^[a-z0-9_]{1,64}$`、一意。`extracted_data`で返されるキー)、`name`(100文字以内、メッセージに表示)、`instruction`(500文字以内、モデルが読み取る内容)、`type`(`text`(デフォルト)、`number`、`date`のいずれか)、`required`(真偽値、デフォルトは`false`)、`is_full_name`(真偽値、デフォルトは`false`、1リクエストにつき最大1つ)。ブラケット形式のフォーム配列、無効なJSON、重複するキー、または複数の`is_full_name`がある場合は、処理や課金が行われる前に`400`が返されます。",
                    "example": "[{\"key\": \"employer_name\", \"name\": \"Employer name\", \"instruction\": \"The employer or company issuing the payslip.\", \"type\": \"text\", \"required\": true, \"is_full_name\": false}, {\"key\": \"employee_name\", \"name\": \"Employee name\", \"instruction\": \"The full name of the employee as printed on the payslip.\", \"type\": \"text\", \"required\": true, \"is_full_name\": true}, {\"key\": \"net_pay\", \"name\": \"Net pay\", \"instruction\": \"The net amount paid to the employee for the period.\", \"type\": \"number\", \"required\": true, \"is_full_name\": false}, {\"key\": \"pay_date\", \"name\": \"Pay date\", \"instruction\": \"The payment date shown on the payslip.\", \"type\": \"date\", \"required\": false, \"is_full_name\": false}]"
                  },
                  "expected_first_name": {
                    "type": "string",
                    "description": "書類の氏名フィールドと照合する名です（音訳を考慮したあいまい一致）。`expected_last_name`と併用してください。`expected_company_name`とは組み合わせられません。",
                    "example": "Sophia"
                  },
                  "expected_last_name": {
                    "type": "string",
                    "description": "書類の氏名フィールドと照合する姓。`expected_first_name`と組み合わせて`name_match_score`を算出します。",
                    "example": "Martinez"
                  },
                  "expected_company_name": {
                    "type": "string",
                    "description": "書類の名前フィールドと照合する会社名（企業の書類の場合）。`expected_first_name` / `expected_last_name`とは併用できません（例の値は意図的に記載していません。生成されるリクエストサンプルでは個人のフィールドを使用しているため、企業の書類を検証する場合はこのフィールドに置き換えてください）。"
                  },
                  "expected_company_country": {
                    "type": "string",
                    "description": "`expected_company_name`の企業名正規化を調整する任意のISO 3166-1 alpha-2国コード（2文字のASCII英字、例: `FR`）です。`expected_company_name`と併用する場合にのみ使用されます。"
                  },
                  "document_ai_name_match_score_threshold": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 80,
                    "description": "名前が一致したとみなす`name_match_score`の最小値（0〜100）。これより低いスコアの場合は`DOCUMENT_AI_NAME_MISMATCH`が追加され、その扱いは`document_ai_name_mismatch_action`で決まります。",
                    "example": 80
                  },
                  "document_ai_unreadable_document_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "REVIEW",
                      "NO_ACTION"
                    ],
                    "default": "REVIEW",
                    "description": "書類からフィールドを1つも読み取れなかった場合の処理です（`DOCUMENT_AI_UNREADABLE_DOCUMENT`）。"
                  },
                  "document_ai_missing_required_fields_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "REVIEW",
                      "NO_ACTION"
                    ],
                    "default": "REVIEW",
                    "description": "`required`フィールドのうち少なくとも1つを読み取れなかった場合の処理です（`DOCUMENT_AI_MISSING_REQUIRED_FIELDS`。該当するフィールドは`additional_data.missing_fields`に列挙されます）。"
                  },
                  "document_ai_document_tampering_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "REVIEW",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "PDF/EXIFのフォレンジック分析で改ざんが疑われる場合の処理です。デジタル署名後の変更、既知のPDF編集ソフトの使用、オーバーレイテキストによる改ざん、不審な再エクスポート、画像の異常が対象です（`DOCUMENT_AI_SUSPECTED_MANIPULATION`）。"
                  },
                  "document_ai_name_mismatch_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "REVIEW",
                      "NO_ACTION"
                    ],
                    "default": "NO_ACTION",
                    "description": "`name_match_score`がしきい値を下回る場合の処理です（`DOCUMENT_AI_NAME_MISMATCH`）。"
                  },
                  "document_ai_unsupported_file_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "REVIEW",
                      "NO_ACTION"
                    ],
                    "default": "REVIEW",
                    "description": "アップロードが空である、または処理可能なファイルではない場合（`DOCUMENT_AI_UNSUPPORTED_FILE`）の対応です。"
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返された`request_id`を使って`GET /v3/session/{sessionId}/decision/`で取得でき、アップロードされた書類、抽出された値、フィールド定義、氏名照合のスナップショットが保存されます。`false`の場合、何も保存されず、`request_id`はレスポンスの照合専用の一時的なUUIDになります。この場合も呼び出しは課金されます。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な文字列（社内のユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください（例: `metadata={\"flow\":\"onboarding\"}`）。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "onboarding"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "書類が処理されました。`document_ai.status`は`Approved`、`Declined`、`In Review`のいずれかで、検出されたすべての問題は`document_ai.warnings`に個別に列挙されます。問題のある書類でも`200`が返されるため、HTTPコードだけでなくボディを確認してください。`save_api_request=true`の場合、`request_id`は永続化されたセッションIDです。",
            "content": {
              "application/json": {
                "examples": {
                  "Approved": {
                    "summary": "給与明細が正しく読み取られ、氏名が一致",
                    "value": {
                      "request_id": "9d6a3b1e-2f0c-4a8e-9b7d-1c2e3f4a5b6c",
                      "document_ai": {
                        "status": "Approved",
                        "extracted_data": {
                          "employer_name": "Acme Payments Ltd",
                          "employee_name": "Sophia Martinez",
                          "net_pay": 3120.5,
                          "pay_date": "2026-07-31"
                        },
                        "detected_codes": [
                          {
                            "type": "CODE_128",
                            "page_number": 1,
                            "position": [
                              [
                                96,
                                456
                              ],
                              [
                                96,
                                616
                              ],
                              [
                                1012,
                                611
                              ],
                              [
                                1015,
                                456
                              ]
                            ],
                            "x": 96,
                            "y": 456,
                            "width": 919,
                            "height": 160,
                            "page_width": 1200,
                            "page_height": 1700,
                            "raw_payload": "SU5WLTIwMjYtMDA0Mg==",
                            "parsed_payload": "INV-2026-0042"
                          }
                        ],
                        "fields": [
                          {
                            "key": "employer_name",
                            "name": "Employer name",
                            "instruction": "The employer or company issuing the payslip.",
                            "type": "text",
                            "required": true,
                            "is_full_name": false
                          },
                          {
                            "key": "employee_name",
                            "name": "Employee name",
                            "instruction": "The full name of the employee as printed on the payslip.",
                            "type": "text",
                            "required": true,
                            "is_full_name": true
                          },
                          {
                            "key": "net_pay",
                            "name": "Net pay",
                            "instruction": "The net amount paid to the employee for the period.",
                            "type": "number",
                            "required": true,
                            "is_full_name": false
                          },
                          {
                            "key": "pay_date",
                            "name": "Pay date",
                            "instruction": "The payment date shown on the payslip.",
                            "type": "date",
                            "required": false,
                            "is_full_name": false
                          }
                        ],
                        "name_match_score": 100.0,
                        "name_on_document": "Sophia Martinez",
                        "warnings": []
                      },
                      "vendor_data": "user-123",
                      "metadata": {
                        "flow": "onboarding"
                      },
                      "created_at": "2026-08-19T16:40:12.318Z"
                    }
                  },
                  "In Review — missing required field": {
                    "summary": "`net_pay`を読み取れませんでした。デフォルトのアクションはREVIEWです",
                    "value": {
                      "request_id": "3f2a9c7b-5d4e-4b1a-8c6f-0e9d8c7b6a5f",
                      "document_ai": {
                        "status": "In Review",
                        "extracted_data": {
                          "employer_name": "Acme Payments Ltd",
                          "employee_name": "Sophia Martinez",
                          "net_pay": null,
                          "pay_date": "2026-07-31"
                        },
                        "detected_codes": [],
                        "fields": [
                          {
                            "key": "employer_name",
                            "name": "Employer name",
                            "instruction": "The employer or company issuing the payslip.",
                            "type": "text",
                            "required": true,
                            "is_full_name": false
                          },
                          {
                            "key": "employee_name",
                            "name": "Employee name",
                            "instruction": "The full name of the employee as printed on the payslip.",
                            "type": "text",
                            "required": true,
                            "is_full_name": true
                          },
                          {
                            "key": "net_pay",
                            "name": "Net pay",
                            "instruction": "The net amount paid to the employee for the period.",
                            "type": "number",
                            "required": true,
                            "is_full_name": false
                          },
                          {
                            "key": "pay_date",
                            "name": "Pay date",
                            "instruction": "The payment date shown on the payslip.",
                            "type": "date",
                            "required": false,
                            "is_full_name": false
                          }
                        ],
                        "name_match_score": 100.0,
                        "name_on_document": "Sophia Martinez",
                        "warnings": [
                          {
                            "risk": "DOCUMENT_AI_MISSING_REQUIRED_FIELDS",
                            "feature": "DOCUMENT_AI",
                            "additional_data": {
                              "missing_fields": [
                                "Net pay"
                              ]
                            },
                            "log_type": "warning",
                            "short_description": "Required fields could not be extracted",
                            "long_description": "One or more fields configured as required could not be extracted from the uploaded document."
                          }
                        ]
                      },
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-08-19T16:41:05.002Z"
                    }
                  },
                  "Declined — suspected manipulation": {
                    "summary": "PDFフォレンジックで既知の編集ソフトが検出されました。デフォルトのアクションはDECLINE",
                    "value": {
                      "request_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
                      "document_ai": {
                        "status": "Declined",
                        "extracted_data": {
                          "employer_name": "Acme Payments Ltd",
                          "employee_name": "Sophia Martinez",
                          "net_pay": 3120.5,
                          "pay_date": "2026-07-31"
                        },
                        "detected_codes": [],
                        "fields": [
                          {
                            "key": "employer_name",
                            "name": "Employer name",
                            "instruction": "The employer or company issuing the payslip.",
                            "type": "text",
                            "required": true,
                            "is_full_name": false
                          },
                          {
                            "key": "employee_name",
                            "name": "Employee name",
                            "instruction": "The full name of the employee as printed on the payslip.",
                            "type": "text",
                            "required": true,
                            "is_full_name": true
                          },
                          {
                            "key": "net_pay",
                            "name": "Net pay",
                            "instruction": "The net amount paid to the employee for the period.",
                            "type": "number",
                            "required": true,
                            "is_full_name": false
                          },
                          {
                            "key": "pay_date",
                            "name": "Pay date",
                            "instruction": "The payment date shown on the payslip.",
                            "type": "date",
                            "required": false,
                            "is_full_name": false
                          }
                        ],
                        "name_match_score": null,
                        "name_on_document": "Sophia Martinez",
                        "warnings": [
                          {
                            "risk": "DOCUMENT_AI_SUSPECTED_MANIPULATION",
                            "feature": "DOCUMENT_AI",
                            "additional_data": {
                              "detection_method": "known_editor",
                              "processed_by_known_editor": "ilovepdf"
                            },
                            "log_type": "error",
                            "short_description": "Suspected document manipulation",
                            "long_description": "The system detected signs of potential manipulation or editing in the uploaded document."
                          }
                        ]
                      },
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-08-19T16:42:40.771Z"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "document_ai": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined",
                            "In Review"
                          ],
                          "description": "却下またはレビューに該当する警告がない場合は`Approved`、少なくとも1つのリスクが`DECLINE`に対応する場合は`Declined`、それ以外で少なくとも1つが`REVIEW`に対応する場合は`In Review`になります。理由は`warnings`リストで確認できます。"
                        },
                        "extracted_data": {
                          "type": "object",
                          "additionalProperties": true,
                          "description": "要求されたフィールドキーごとに1エントリー。値はフィールドの`type`に従って型付けされます。`text`は文字列、`number`は数値、`date`は`YYYY-MM-DD`形式の文字列で、値を読み取れなかった場合は`null`です。",
                          "example": {
                            "employer_name": "Acme Payments Ltd",
                            "employee_name": "Sophia Martinez",
                            "net_pay": 3120.5,
                            "pay_date": "2026-07-31"
                          }
                        },
                        "detected_codes": {
                          "type": "array",
                          "description": "処理済みのすべてのページで検出されたQRコードとバーコード。見つからない場合は空です。位置は特定できたもののデコードできないQRコードは`parsed_payload: null`となります。",
                          "items": {
                            "$ref": "#/components/schemas/DocumentAIDetectedCode"
                          }
                        },
                        "fields": {
                          "type": "array",
                          "description": "この抽出に使用された正規化済みのフィールド定義をそのまま返します（`save_api_request=true`の場合はセッションにも保存されます）。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "instruction": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "text",
                                  "number",
                                  "date"
                                ]
                              },
                              "required": {
                                "type": "boolean"
                              },
                              "is_full_name": {
                                "type": "boolean"
                              }
                            }
                          }
                        },
                        "name_match_score": {
                          "type": "number",
                          "nullable": true,
                          "minimum": 0,
                          "maximum": 100,
                          "description": "`name_on_document`と、想定される人物名または企業名とのあいまい類似度（0–100）。名前の値と想定される名前の両方が存在する場合は、一致時**および**不一致時のいずれでも返されます。それ以外の場合は`null`です。",
                          "example": 96.0
                        },
                        "name_on_document": {
                          "type": "string",
                          "nullable": true,
                          "description": "書類から取得された名前の値(`is_full_name`フィールド、または最初の名前に類するテキストフィールド)で、想定される名前と比較されたものです。名前の値が取得できなかった場合は`null`です。",
                          "example": "Sophia Martinez"
                        },
                        "warnings": {
                          "type": "array",
                          "description": "問題なく承認された場合は空です。各エントリは検出されたリスク1件を説明します。`log_type: \"error\"`のエントリは`status`を`Declined`に設定し、`log_type: \"warning\"`のエントリは`In Review`に設定します。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "enum": [
                                  "DOCUMENT_AI_UNREADABLE_DOCUMENT",
                                  "DOCUMENT_AI_MISSING_REQUIRED_FIELDS",
                                  "DOCUMENT_AI_SUSPECTED_MANIPULATION",
                                  "DOCUMENT_AI_NAME_MISMATCH",
                                  "DOCUMENT_AI_UNSUPPORTED_FILE"
                                ],
                                "description": "機械可読なリスクコードです。それぞれ、対応する`document_ai_*_action`リクエストオプションで制御されます。",
                                "example": "DOCUMENT_AI_MISSING_REQUIRED_FIELDS"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "DOCUMENT_AI"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`DOCUMENT_AI`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "リスクに関する追加コンテキストです。必須フィールドが欠けている場合は`{\"missing_fields\": [\"Net pay\"]}`、氏名が一致しない場合は`{\"name_on_document\", \"score\", \"threshold\"}`、改ざんの疑いがある場合はフォレンジックの検出結果(`detection_method`、作成ツール/編集ツールの詳細)が入ります。追加する情報がない場合は`null`です。",
                                "example": {
                                  "missing_fields": [
                                    "Net pay"
                                  ]
                                }
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error",
                                  "warning",
                                  "information"
                                ],
                                "description": "設定されたアクションから導出される重大度：`error`（DECLINE）、`warning`（REVIEW）、`information`（NO_ACTION）。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを説明する、人が読める形式の1行の説明。",
                                "example": "Required fields could not be extracted"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "人が読める説明文。必要に応じて`additional_data`の値が埋め込まれます。"
                              }
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "リクエストが処理された日時（UTC、ISO 8601）。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションまたは処理のエラーです。フィールド単位の問題は、DRFの標準エンベロープ(問題のあるフィールドごとにメッセージの配列が1つ)で返されます。暗号化された書類や読み取れない書類、抽出の失敗は`{\"error\": ...}`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing document": {
                    "summary": "フォームデータに`document`が含まれていません",
                    "value": {
                      "document": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Invalid fields payload": {
                    "summary": "`fields`がJSONエンコードされた単一の配列文字列ではありません",
                    "value": {
                      "fields": [
                        "fields must be a valid JSON array string."
                      ]
                    }
                  },
                  "Duplicate field keys": {
                    "summary": "2つの項目が同じ`key`を共有しています",
                    "value": {
                      "fields": [
                        "Every fields item must have a unique key."
                      ]
                    }
                  },
                  "Conflicting expectations": {
                    "summary": "個人と企業の期待値を同時に送信",
                    "value": {
                      "non_field_errors": [
                        "Provide either person expected-name fields or expected_company_name, not both."
                      ]
                    }
                  },
                  "Invalid metadata": {
                    "summary": "`metadata`がJSONオブジェクトではありません（またはNUL文字を含みます）",
                    "value": {
                      "metadata": [
                        "Metadata must be a JSON object."
                      ]
                    }
                  },
                  "Oversized vendor_data": {
                    "summary": "`vendor_data`が上限の2,000バイトを超えている",
                    "value": {
                      "vendor_data": [
                        "vendor_data is too long (maximum 2000 bytes)."
                      ]
                    }
                  },
                  "Encrypted PDF": {
                    "summary": "パスワードで保護されたPDF",
                    "value": {
                      "error": "The PDF is encrypted. Please upload a decrypted PDF or a photo instead."
                    }
                  },
                  "Extraction failed": {
                    "summary": "抽出パイプラインで書類を処理できませんでした",
                    "value": {
                      "error": [
                        "Error extracting Document AI information"
                      ]
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合、および料金表にDocument AI APIの項目がない契約請求の組織の場合は、書類の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  },
                  "Contract rate missing": {
                    "summary": "料金表にDocument AI APIの項目がない、契約請求の組織",
                    "value": {
                      "error": "Document AI API is not included in your contract rate card. Contact support@didit.me to enable it."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.document_ai.analyze(\n    document=open(\"document.pdf\", \"rb\"),\n    fields=\"[{\\\"key\\\": \\\"employer_name\\\", \\\"name\\\": \\\"Employer name\\\", \\\"instruction\\\": \\\"The employer or company issuing the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"employee_name\\\", \\\"name\\\": \\\"Employee name\\\", \\\"instruction\\\": \\\"The full name of the employee as printed on the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": true}, {\\\"key\\\": \\\"net_pay\\\", \\\"name\\\": \\\"Net pay\\\", \\\"instruction\\\": \\\"The net amount paid to the employee for the period.\\\", \\\"type\\\": \\\"number\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"pay_date\\\", \\\"name\\\": \\\"Pay date\\\", \\\"instruction\\\": \\\"The payment date shown on the payslip.\\\", \\\"type\\\": \\\"date\\\", \\\"required\\\": false, \\\"is_full_name\\\": false}]\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.documentAi.analyze({\n  document: await fileFromPath(\"document.pdf\"),\n  fields: \"[{\\\"key\\\": \\\"employer_name\\\", \\\"name\\\": \\\"Employer name\\\", \\\"instruction\\\": \\\"The employer or company issuing the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"employee_name\\\", \\\"name\\\": \\\"Employee name\\\", \\\"instruction\\\": \\\"The full name of the employee as printed on the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": true}, {\\\"key\\\": \\\"net_pay\\\", \\\"name\\\": \\\"Net pay\\\", \\\"instruction\\\": \\\"The net amount paid to the employee for the period.\\\", \\\"type\\\": \\\"number\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"pay_date\\\", \\\"name\\\": \\\"Pay date\\\", \\\"instruction\\\": \\\"The payment date shown on the payslip.\\\", \\\"type\\\": \\\"date\\\", \\\"required\\\": false, \\\"is_full_name\\\": false}]\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.DocumentAi.Analyze(ctx, didit.DocumentAiAnalyzeParams{\n\tDocument: didit.FileFromPath(\"document.pdf\"),\n\tFields:   \"[{\\\"key\\\": \\\"employer_name\\\", \\\"name\\\": \\\"Employer name\\\", \\\"instruction\\\": \\\"The employer or company issuing the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"employee_name\\\", \\\"name\\\": \\\"Employee name\\\", \\\"instruction\\\": \\\"The full name of the employee as printed on the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": true}, {\\\"key\\\": \\\"net_pay\\\", \\\"name\\\": \\\"Net pay\\\", \\\"instruction\\\": \\\"The net amount paid to the employee for the period.\\\", \\\"type\\\": \\\"number\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"pay_date\\\", \\\"name\\\": \\\"Pay date\\\", \\\"instruction\\\": \\\"The payment date shown on the payslip.\\\", \\\"type\\\": \\\"date\\\", \\\"required\\\": false, \\\"is_full_name\\\": false}]\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.types.DocumentAiAnalyzeParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.documentAi().analyze(DocumentAiAnalyzeParams.builder()\n        .document(Path.of(\"document.pdf\"))\n        .fields(\"[{\\\"key\\\": \\\"employer_name\\\", \\\"name\\\": \\\"Employer name\\\", \\\"instruction\\\": \\\"The employer or company issuing the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"employee_name\\\", \\\"name\\\": \\\"Employee name\\\", \\\"instruction\\\": \\\"The full name of the employee as printed on the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": true}, {\\\"key\\\": \\\"net_pay\\\", \\\"name\\\": \\\"Net pay\\\", \\\"instruction\\\": \\\"The net amount paid to the employee for the period.\\\", \\\"type\\\": \\\"number\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"pay_date\\\", \\\"name\\\": \\\"Pay date\\\", \\\"instruction\\\": \\\"The payment date shown on the payslip.\\\", \\\"type\\\": \\\"date\\\", \\\"required\\\": false, \\\"is_full_name\\\": false}]\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->documentAi->analyze([\n    'document' => File::fromPath('document.pdf'),\n    'fields' => '[{\"key\": \"employer_name\", \"name\": \"Employer name\", \"instruction\": \"The employer or company issuing the payslip.\", \"type\": \"text\", \"required\": true, \"is_full_name\": false}, {\"key\": \"employee_name\", \"name\": \"Employee name\", \"instruction\": \"The full name of the employee as printed on the payslip.\", \"type\": \"text\", \"required\": true, \"is_full_name\": true}, {\"key\": \"net_pay\", \"name\": \"Net pay\", \"instruction\": \"The net amount paid to the employee for the period.\", \"type\": \"number\", \"required\": true, \"is_full_name\": false}, {\"key\": \"pay_date\", \"name\": \"Pay date\", \"instruction\": \"The payment date shown on the payslip.\", \"type\": \"date\", \"required\": false, \"is_full_name\": false}]',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.document_ai.analyze(\n  document: Pathname(\"document.pdf\"),\n  fields: \"[{\\\"key\\\": \\\"employer_name\\\", \\\"name\\\": \\\"Employer name\\\", \\\"instruction\\\": \\\"The employer or company issuing the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"employee_name\\\", \\\"name\\\": \\\"Employee name\\\", \\\"instruction\\\": \\\"The full name of the employee as printed on the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": true}, {\\\"key\\\": \\\"net_pay\\\", \\\"name\\\": \\\"Net pay\\\", \\\"instruction\\\": \\\"The net amount paid to the employee for the period.\\\", \\\"type\\\": \\\"number\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"pay_date\\\", \\\"name\\\": \\\"Pay date\\\", \\\"instruction\\\": \\\"The payment date shown on the payslip.\\\", \\\"type\\\": \\\"date\\\", \\\"required\\\": false, \\\"is_full_name\\\": false}]\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.DocumentAi.AnalyzeAsync(new DocumentAiAnalyzeParams\n{\n    Document = FileUpload.FromPath(\"document.pdf\"),\n    Fields = \"[{\\\"key\\\": \\\"employer_name\\\", \\\"name\\\": \\\"Employer name\\\", \\\"instruction\\\": \\\"The employer or company issuing the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"employee_name\\\", \\\"name\\\": \\\"Employee name\\\", \\\"instruction\\\": \\\"The full name of the employee as printed on the payslip.\\\", \\\"type\\\": \\\"text\\\", \\\"required\\\": true, \\\"is_full_name\\\": true}, {\\\"key\\\": \\\"net_pay\\\", \\\"name\\\": \\\"Net pay\\\", \\\"instruction\\\": \\\"The net amount paid to the employee for the period.\\\", \\\"type\\\": \\\"number\\\", \\\"required\\\": true, \\\"is_full_name\\\": false}, {\\\"key\\\": \\\"pay_date\\\", \\\"name\\\": \\\"Pay date\\\", \\\"instruction\\\": \\\"The payment date shown on the payslip.\\\", \\\"type\\\": \\\"date\\\", \\\"required\\\": false, \\\"is_full_name\\\": false}]\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/aml/": {
      "post": {
        "summary": "AMLスクリーニング（単体）",
        "operationId": "post_v3aml",
        "x-didit-sdk": {
          "resource": "aml",
          "method": "screen",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "最大255文字の任意の再試行安全キーです。同じキーを同じリクエストボディで再利用すると、2回目のスクリーニングを実行・請求することなく元のレスポンスが返されます。異なるボディでキーを再利用すると`409`が返されます。",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "description": "PEP、制裁、警告/ウォッチリスト、ネガティブメディアの各データセットに対して、個人または企業を1回の呼び出しでスクリーニングします。\n\n**2スコアモデル。** 各ヒットには`match_score`(0–100、本人同一性の信頼度)と`risk_score`(0–100、エンティティのリスク)が付与されます。`match_score`が`aml_match_score_threshold`(デフォルト**93**)未満のヒットには`review_status: \"False Positive\"`のタグが付き、リスク評価では無視されます。残りのヒットのうち最も高い`risk_score`が`aml.score`になります。最終的な`aml.status`は設定したしきい値に従います。`score`が`aml_score_review_threshold`(デフォルト**100**)を超える場合は`Declined`、`score`が`aml_score_approve_threshold`(デフォルト**80**)を超える場合は`In Review`、それ以外は`Approved`になります。`score`が0以外で、かつ承認しきい値以上の場合は必ず`POSSIBLE_MATCH_FOUND`警告が追加されます(スコアがちょうど0の場合、警告は出ません)。\n\n**一致スコアの重み。** `aml_name_weight`、`aml_dob_weight`、`aml_country_weight`の合計はちょうど100である必要があります(デフォルトは60/25/15)。リクエストに含まれない要素は除外したうえで再正規化されます。`document_number`が一致した場合はゴールデンキーとして扱われ、`match_score`が100に上書きされます。\n\n**レイテンシ。** 通常のスクリーニングは通常数秒で完了します。`include_adverse_media=true`の場合、APIはネガティブメディアのエンリッチメントを待機します(最初に約5秒の待機、その後最大約25秒のポーリング)。クライアントのタイムアウトは**60秒以上**に設定してください。\n\n**永続化。** `save_api_request`のデフォルトは**true**です。スクリーニングはセッションとして保存され(`request_id`は`GET /v3/session/{sessionId}/decision/`で使用できます)、コンソールに表示され、`status.updated` Webhookが送信され、ヒットのレビューステータスを後から更新できます。`save_api_request=false`の場合は何も保存されず、`request_id`は一時的な相関IDになります。`include_ongoing_monitoring=true`を指定するとプロファイルの再スクリーニングが継続的に行われ、`save_api_request=true`が必須です(満たさない場合は`400`が返されます)。\n\n**冪等性。** タイムアウトや一時的なエラーの後に再試行する場合は、`Idempotency-Key`ヘッダーを送信してください。キーのスコープは、アプリケーションと完全に同一のリクエストボディです。最初に完了したリクエストのレスポンスが保存され、以降の同一の再試行には同じレスポンスが返されます。AMLスクリーニングが再度実行されることも、再度課金されることもありません。元のリクエストがまだ実行中の場合は、後で同じキーを使って再試行してください。同じキーを異なるボディで再利用すると、APIは`409`を返します。\n\n**請求。** 最初のスクリーニングが成功した後に、AML APIクレジットが1件分課金されます。冪等性により再送されたレスポンスは再度課金されません。残高が不足している場合は、新しいスクリーニングが行われる前に`403`が返されます。\n\n**サンドボックス。** サンドボックスアプリケーションのキーでは、スクリーニングと請求が完全にスキップされ、モックの結果が返されます。`sandbox_scenario`を渡さない限り、結果はヒット0件の`Approved`です。`save_api_request`は本番環境のキーと同じように動作するため、保存されたサンドボックスのスクリーニングは`GET /v3/session/{sessionId}/decision/`および`GET /v3/session/{sessionId}/generate-pdf/`で取得できます。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "full_name"
                ],
                "properties": {
                  "full_name": {
                    "type": "string",
                    "minLength": 2,
                    "description": "スクリーニング対象の人物または企業の正式名称。最低**2文字**で、これはスクリーニングプロバイダー自体の下限です。これより短い名前または空の名前の場合、スクリーニングが実行される前にこのフィールドで`400`が返されるため、課金は発生しません。",
                    "example": "Antonio Ejemplo Modelo"
                  },
                  "entity_type": {
                    "type": "string",
                    "enum": [
                      "person",
                      "company"
                    ],
                    "default": "person",
                    "description": "スクリーニング対象のエンティティの種類。デフォルトは`person`です。"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "description": "生年月日（個人）または設立日（企業）、`YYYY-MM-DD`形式。生年月日の重みにより照合精度が向上します。",
                    "example": "1972-02-29"
                  },
                  "nationality": {
                    "type": "string",
                    "description": "ISO 3166-1 **alpha-2**の国コード（例: `ES`）。無効なコードは`400`を返します。国の重み付けにより一致精度が向上します。",
                    "example": "ES"
                  },
                  "document_number": {
                    "type": "string",
                    "description": "本人確認書類の番号。重み付けはされず、決定的なキーとして機能します: 完全一致の場合はヒットの`match_score`が100に上書きされ、明確な不一致の場合はスコアが減点されます。スクリーニングプロバイダーに検索フィルターとして送信されるのは、**2〜50文字**の場合のみです。この範囲外の値も受け付けられて保存され、スクリーニングも実行されて料金が請求されますが、書類番号による絞り込みは行われません。"
                  },
                  "aml_score_approve_threshold": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 80,
                    "description": "これ以下であれば結果が`Approved`になるリスクスコアのしきい値です。`aml_score_review_threshold`以下である必要があります(そうでない場合は`400`)。"
                  },
                  "aml_score_review_threshold": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 100,
                    "description": "これを超えると結果が`Declined`になるリスクスコアのしきい値です。2つのしきい値の間のスコアは`In Review`になります。"
                  },
                  "aml_name_weight": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 60,
                    "description": "ヒットごとの一致スコアにおける氏名類似度の重み。3つの重みの合計はちょうど100である必要があります（そうでない場合は`400`）。"
                  },
                  "aml_dob_weight": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 25,
                    "description": "ヒットごとの一致スコアにおける生年月日の重み。"
                  },
                  "aml_country_weight": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 15,
                    "description": "ヒットごとの一致スコアにおける国/国籍の重み。"
                  },
                  "aml_match_score_threshold": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100,
                    "default": 93,
                    "description": "ヒットごとのカットオフ値。`match_score`がこの値未満のヒットは`False Positive`（リスク評価から除外）となり、この値以上のヒットは`Unreviewed`の一致候補となります。"
                  },
                  "include_adverse_media": {
                    "type": "boolean",
                    "default": false,
                    "description": "ネガティブな報道についてニュースメディアも検索します。結果の収集中に最大約30秒のレイテンシーが加わるため、60秒以上のクライアントタイムアウトを使用してください。"
                  },
                  "include_ongoing_monitoring": {
                    "type": "boolean",
                    "default": false,
                    "description": "このプロファイルの再スクリーニングを継続し、変更をWebhookで通知します。`save_api_request=true`が必要です（指定しない場合は`400`）。"
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "スクリーニングをセッションとして保存します（コンソールでの表示、判定エンドポイント、Webhook、ヒットのレビュー）。ステートレスなチェックにするには`false`に設定します。"
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "スクリーニング対象ユーザーに対するお客様側の識別子です。そのまま返され、セッションとともに保存されます。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "リクエストとともに保存され、そのまま返される自由形式のJSON。"
                  },
                  "sandbox_scenario": {
                    "type": "string",
                    "description": "サンドボックス専用のシナリオスラッグ。APIキーがサンドボックスモードのアプリケーションに属する場合にのみ受け付けられ、本番アプリケーションでは拒否されます。単体のスクリーニングには準備対象のセッションがないため、スラッグはスクリーニングリクエスト自体に指定します。`decline_aml_hit`は本番と同じ形式のヒットを1件返してスクリーニングを`Declined`として確定し、`review_aml_possible_match`は`In Review`として確定します。AMLの結果を準備しないシナリオでは、スクリーニングはクリーンのままです。シナリオカタログはGET /v1/sandbox/scenarios/または[サンドボックスとテストデータ](/ja/integration/sandbox-testing)を参照してください。",
                    "example": "decline_aml_hit"
                  }
                }
              },
              "example": {
                "full_name": "Antonio Ejemplo Modelo",
                "entity_type": "person",
                "date_of_birth": "1972-02-29",
                "nationality": "ES",
                "include_adverse_media": false,
                "vendor_data": "user-1234"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/aml/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -H 'Idempotency-Key: aml-user-1234-2026-08-20' \\\n  -d '{\n    \"full_name\": \"Antonio Ejemplo Modelo\",\n    \"entity_type\": \"person\",\n    \"date_of_birth\": \"1972-02-29\",\n    \"nationality\": \"ES\",\n    \"include_adverse_media\": false,\n    \"vendor_data\": \"user-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.aml.screen(\n    full_name=\"Antonio Ejemplo Modelo\",\n    entity_type=\"person\",\n    date_of_birth=\"1972-02-29\",\n    nationality=\"ES\",\n    include_adverse_media=False,\n    vendor_data=\"user-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.aml.screen({\n  full_name: \"Antonio Ejemplo Modelo\",\n  entity_type: \"person\",\n  date_of_birth: \"1972-02-29\",\n  nationality: \"ES\",\n  include_adverse_media: false,\n  vendor_data: \"user-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.AML.Screen(ctx, didit.AMLScreenParams{\n\tFullName:            \"Antonio Ejemplo Modelo\",\n\tEntityType:          didit.Some(didit.AMLScreenParamsEntityType(\"person\")),\n\tDateOfBirth:         didit.String(\"1972-02-29\"),\n\tNationality:         didit.String(\"ES\"),\n\tIncludeAdverseMedia: didit.Bool(false),\n\tVendorData:          didit.String(\"user-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport me.didit.Didit;\nimport me.didit.types.AmlScreenParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.aml().screen(AmlScreenParams.builder()\n        .fullName(\"Antonio Ejemplo Modelo\")\n        .entityType(AmlScreenParams.EntityType.of(\"person\"))\n        .dateOfBirth(LocalDate.parse(\"1972-02-29\"))\n        .nationality(\"ES\")\n        .includeAdverseMedia(false)\n        .vendorData(\"user-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->aml->screen([\n    'full_name' => 'Antonio Ejemplo Modelo',\n    'entity_type' => 'person',\n    'date_of_birth' => '1972-02-29',\n    'nationality' => 'ES',\n    'include_adverse_media' => false,\n    'vendor_data' => 'user-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.aml.screen(\n  full_name: \"Antonio Ejemplo Modelo\",\n  entity_type: \"person\",\n  date_of_birth: \"1972-02-29\",\n  nationality: \"ES\",\n  include_adverse_media: false,\n  vendor_data: \"user-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Aml.ScreenAsync(new AmlScreenParams\n{\n    FullName = \"Antonio Ejemplo Modelo\",\n    EntityType = new AmlScreenParamsEntityType(\"person\"),\n    DateOfBirth = \"1972-02-29\",\n    Nationality = \"ES\",\n    IncludeAdverseMedia = false,\n    VendorData = \"user-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "スクリーニングが完了しました。`aml.status`は設定したしきい値を反映します。内部の掲載下限以上のヒットはすべて`aml.hits`に一覧表示され、本人同一性の`match_score`、エンティティの`risk_score`、および一致内容を説明する`score_breakdown`が含まれます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "aml": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "In Review",
                            "Declined"
                          ],
                          "description": "`score` > `aml_score_review_threshold`の場合は`Declined`、`score` > `aml_score_approve_threshold`の場合は`In Review`、それ以外（スコアが取得できない場合を含む）は`Approved`です。"
                        },
                        "total_hits": {
                          "type": "integer",
                          "description": "`hits`内のエントリー数。"
                        },
                        "entity_type": {
                          "type": "string",
                          "enum": [
                            "person",
                            "company"
                          ],
                          "description": "スクリーニング対象のエンティティタイプをそのまま返します。"
                        },
                        "hits": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "description": "スクリーニングのヒット1件です。`match_score`（0–100）は身元の確からしさを示します。`aml_match_score_threshold`未満のヒットには`review_status: \"False Positive\"`がタグ付けされ、リスク評価から除外されます。しきい値以上のヒットは`\"Unreviewed\"`の一致候補です。`risk_score`（0–100）は一致したエンティティのリスクの高さを示し、トップレベルの`aml.score`を決定します。",
                            "properties": {
                              "id": {
                                "type": "string",
                                "nullable": true,
                                "description": "ヒットに対するDiditの安定した識別子で、`hit_`の後に16進数24文字が続きます。対象者を再度スクリーニングした場合も、一致した同じエンティティは同じ`id`を保持します。AMLヒットレビューのエンドポイントには`hit_id`として渡してください。"
                              },
                              "url": {
                                "type": "string",
                                "nullable": true,
                                "description": "一致したエンティティのソースURL(利用可能な場合)。"
                              },
                              "match": {
                                "type": "boolean",
                                "nullable": true,
                                "description": "レガシーの完全一致フラグ。`match_score`と`review_status`の使用を推奨します。"
                              },
                              "score": {
                                "type": "number",
                                "nullable": true,
                                "description": "非推奨。0〜1の範囲の加重一致スコア。代わりに`match_score`を使用してください。"
                              },
                              "match_score": {
                                "type": "number",
                                "nullable": true,
                                "description": "本人一致の信頼度(0–100)。`aml_match_score_threshold`と比較され、誤検知と一致の可能性を区別するために使用されます。"
                              },
                              "risk_score": {
                                "type": "number",
                                "nullable": true,
                                "description": "エンティティのリスクスコア（0–100）。誤検知ではないヒットのうち最も高い`risk_score`が、トップレベルの`aml.score`になります。"
                              },
                              "target": {
                                "type": "boolean",
                                "nullable": true
                              },
                              "caption": {
                                "type": "string",
                                "nullable": true,
                                "description": "一致したエンティティの表示名です。"
                              },
                              "datasets": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "PEP",
                                    "PEP Level 1",
                                    "PEP Level 2",
                                    "PEP Level 3",
                                    "PEP Level 4",
                                    "Sanctions",
                                    "Adverse Media",
                                    "Warnings and Regulatory Enforcement",
                                    "Fitness and Probity",
                                    "SIP",
                                    "SIE",
                                    "Insolvency",
                                    "Other Lists"
                                  ]
                                },
                                "description": "エンティティが掲載されているリスクカテゴリーです。`PEP`(レベル`PEP Level 1`から`PEP Level 4`を含む)、`Sanctions`、`Adverse Media`、`Warnings and Regulatory Enforcement`、`Fitness and Probity`、`SIP`、`SIE`または`Insolvency`のいずれかです。エンティティの情報源がこれらのカテゴリーをいずれも示していない場合は`Other Lists`になります。"
                              },
                              "features": {
                                "type": "object",
                                "nullable": true
                              },
                              "properties": {
                                "type": "object",
                                "nullable": true,
                                "description": "エンティティのプロファイル：`name`、`alias`、`notes`、`gender`、`birthDate`、`birthPlace`、`nationality`、`position`、およびその他の経歴情報の配列（いずれもnull許容）。"
                              },
                              "rca_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "ヒットがRCAの場合に、エンティティの一致の経由元となった近しい関係者の名前。"
                              },
                              "pep_matches": {
                                "type": "array",
                                "description": "このヒットの根拠となるPEPリストのエントリー。",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "list_name": {
                                      "type": "string"
                                    },
                                    "publisher": {
                                      "type": "string"
                                    },
                                    "source_url": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "type": "string"
                                    },
                                    "matched_name": {
                                      "type": "string"
                                    },
                                    "pep_position": {
                                      "type": "string"
                                    },
                                    "date_of_birth": {
                                      "type": "string"
                                    },
                                    "place_of_birth": {
                                      "type": "string"
                                    },
                                    "aliases": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "education": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "other_sources": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              },
                              "sanction_matches": {
                                "type": "array",
                                "items": {
                                  "type": "object"
                                },
                                "description": "このヒットの根拠となる制裁リストのエントリー（`pep_matches`と同じ根拠リストの形式に、制裁固有のフィールドを加えたもの）。"
                              },
                              "warning_matches": {
                                "type": "array",
                                "items": {
                                  "type": "object"
                                },
                                "description": "このヒットの根拠となる警告/ウォッチリストのエントリ。"
                              },
                              "adverse_media_matches": {
                                "type": "array",
                                "description": "ネガティブメディアの記事。`include_adverse_media=true`の場合にのみ設定されます。",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "headline": {
                                      "type": "string"
                                    },
                                    "summary": {
                                      "type": "string"
                                    },
                                    "sentiment": {
                                      "type": "string"
                                    },
                                    "sentiment_score": {
                                      "type": "number"
                                    },
                                    "source_url": {
                                      "type": "string"
                                    },
                                    "thumbnail": {
                                      "type": "string",
                                      "nullable": true
                                    },
                                    "country": {
                                      "type": "string",
                                      "nullable": true
                                    },
                                    "author_name": {
                                      "type": "string",
                                      "nullable": true
                                    },
                                    "publication_date": {
                                      "type": "string",
                                      "nullable": true
                                    },
                                    "adverse_keywords": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "other_sources": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              },
                              "adverse_media_details": {
                                "type": "object",
                                "nullable": true,
                                "description": "エンティティに関するネガティブメディアのセンチメントの集計（`sentiment`、`sentiment_score`、`adverse_keywords`の頻度マップ）。`include_adverse_media=true`の場合にのみ設定されます。"
                              },
                              "first_seen": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "エンティティがデータセットに初めて登場した日時。"
                              },
                              "last_seen": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "そのエンティティを含んだ直近のデータセット更新。"
                              },
                              "linked_entities": {
                                "type": "array",
                                "description": "一致したエンティティの既知の関係（家族、関係者、企業）。",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "relation": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "status": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "details": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "active": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              },
                              "risk_view": {
                                "type": "object",
                                "nullable": true,
                                "description": "項目ごとのリスク内訳（`crimes`、`countries`、`categories`、`custom_list`）。それぞれ`score`、`weightage`、`risk_level`、`risk_scores`マップを含みます。"
                              },
                              "additional_information": {
                                "type": "object",
                                "nullable": true,
                                "description": "自由形式の追加コンテキスト。例えば、エンティティがフラグ付けされた理由を説明する`flag_summary`配列などです。"
                              },
                              "review_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "False Positive",
                                  "Unreviewed",
                                  "Confirmed Match",
                                  "Inconclusive"
                                ],
                                "description": "`False Positive`：`match_score`が`aml_match_score_threshold`を下回り、リスク評価から除外されたものです。`Unreviewed`：レビュー待ちの一致の可能性があるものです。`Confirmed Match` / `Inconclusive`：保存済みのセッションでレビュアーが（Business Consoleから）手動で設定するものです。このレビュー機能は本仕様の対象外です。"
                              },
                              "score_breakdown": {
                                "type": "object",
                                "nullable": true,
                                "description": "`match_score`の算出方法です。氏名、生年月日、国はそれぞれ`<component>_score` × `<component>_weight_normalized`ポイントを加算します。スクリーニング対象データに要素が欠けている場合、重みは再正規化されます。書類番号には重みが付かず、「ゴールデンキー」として機能します。`MATCH`の場合はスコアが100に上書きされ、`NEUTRAL`の場合は変更されず、`HARD_MISMATCH`の場合はペナルティが適用されます。",
                                "properties": {
                                  "name_score": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "名前の生の類似度（0–100）。"
                                  },
                                  "name_weight": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "設定済みの氏名の重み（`aml_name_weight`）。"
                                  },
                                  "name_weight_normalized": {
                                    "type": "number",
                                    "nullable": true,
                                    "description": "再正規化後の名前の重み（0–100）。"
                                  },
                                  "name_contribution": {
                                    "type": "number",
                                    "nullable": true,
                                    "description": "名前が`total_score`に寄与したポイント。"
                                  },
                                  "dob_score": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "生年月日スコア。重みに対する割合で表します（−100〜100）。"
                                  },
                                  "dob_weight": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "設定済みの生年月日の重み（`aml_dob_weight`）。"
                                  },
                                  "dob_weight_normalized": {
                                    "type": "number",
                                    "nullable": true,
                                    "description": "再正規化後の生年月日の重み（0〜100）。"
                                  },
                                  "dob_contribution": {
                                    "type": "number",
                                    "nullable": true,
                                    "description": "生年月日が`total_score`に寄与したポイント。"
                                  },
                                  "country_score": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "重みに対する割合で表した国のスコア（−100〜100）。"
                                  },
                                  "country_weight": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "設定済みの国の重み（`aml_country_weight`）。"
                                  },
                                  "country_weight_normalized": {
                                    "type": "number",
                                    "nullable": true,
                                    "description": "再正規化後の国の重み（0〜100）。"
                                  },
                                  "country_contribution": {
                                    "type": "number",
                                    "nullable": true,
                                    "description": "国が`total_score`に寄与したポイント。"
                                  },
                                  "document_number_match_type": {
                                    "type": "string",
                                    "nullable": true,
                                    "enum": [
                                      "MATCH",
                                      "NEUTRAL",
                                      "HARD_MISMATCH"
                                    ],
                                    "description": "書類番号比較のゴールデンキー結果。"
                                  },
                                  "document_number_effect": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "書類番号の影響を人が読める形で説明したもの。"
                                  },
                                  "total_score": {
                                    "type": "integer",
                                    "nullable": true,
                                    "description": "最終的な加重一致スコア（0–100）です。`match_score`と同じ値です。"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "score": {
                          "type": "number",
                          "nullable": true,
                          "description": "AMLの総合リスクスコア（0–100）：誤検知ではないヒットのうち最も高い`risk_score`。2つのしきい値によって`status`が決まります。"
                        },
                        "screened_data": {
                          "type": "object",
                          "description": "スクリーニング対象をそのまま返します：`full_name`、`date_of_birth`、`nationality`、`document_number`（存在しないフィールドは`null`）。",
                          "properties": {
                            "full_name": {
                              "type": "string"
                            },
                            "date_of_birth": {
                              "type": "string",
                              "nullable": true
                            },
                            "nationality": {
                              "type": "string",
                              "nullable": true
                            },
                            "document_number": {
                              "type": "string",
                              "nullable": true
                            }
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "feature": {
                                "type": "string",
                                "description": "警告を発生させた機能。"
                              },
                              "risk": {
                                "type": "string",
                                "description": "機械可読なリスク識別子です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "description": "警告に関する追加コンテキストです(利用可能な場合)。"
                              },
                              "log_type": {
                                "type": "string",
                                "description": "`warning`、`information`、または`error`。リスクが結果にどう影響したかを示します。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "人が読める1行の要約です。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "人が読める形式の詳細な説明。"
                              }
                            }
                          },
                          "description": "`score`が0以外で、かつ`aml_score_approve_threshold`以上の場合は常に`POSSIBLE_MATCH_FOUND`警告が含まれます（スコアがちょうど0の場合は警告されません）。それ以外の場合は空です。"
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`をそのまま返します。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "description": "送信した`metadata`のエコー。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "examples": {
                  "No hits (Approved)": {
                    "summary": "クリーンなスクリーニング: ヒット0件",
                    "value": {
                      "request_id": "d27c5509-7a66-45a9-b05e-d69d9f4c336a",
                      "aml": {
                        "status": "Approved",
                        "total_hits": 0,
                        "entity_type": "person",
                        "hits": [],
                        "score": 0,
                        "screened_data": {
                          "full_name": "Maximilian Mustermann-Doe",
                          "date_of_birth": "1992-03-14",
                          "nationality": "DE",
                          "document_number": null
                        },
                        "warnings": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": {
                        "internal_ref": "abc-123"
                      },
                      "created_at": "2026-06-11T10:21:07.013938+00:00"
                    }
                  },
                  "PEP hit (Approved — risk below approve threshold)": {
                    "summary": "PEPの一致候補が1件あり、リスクスコア73はデフォルトの承認しきい値である80を下回ります",
                    "value": {
                      "request_id": "0b7e7a3e-65a1-4f3d-9c7a-1de2f9a40111",
                      "aml": {
                        "status": "Approved",
                        "total_hits": 1,
                        "entity_type": "person",
                        "hits": [
                          {
                            "id": "hit_7c1e9a40b2d35f86e0a4c912",
                            "url": "https://news.example.org/articles/sample",
                            "match": false,
                            "score": 0.93,
                            "match_score": 93.0,
                            "risk_score": 73.0,
                            "target": null,
                            "caption": "Antonio Ejemplo Modelo",
                            "datasets": [
                              "PEP Level 1",
                              "PEP"
                            ],
                            "features": null,
                            "rca_name": "",
                            "first_seen": "2026-01-07T00:00:00",
                            "last_seen": "2026-01-07T00:00:00",
                            "review_status": "Unreviewed",
                            "properties": {
                              "name": [
                                "Antonio Ejemplo Modelo",
                                "Antonio Ejemplo"
                              ],
                              "alias": [
                                "Antonio Ejemplo Modelo",
                                "Ejemplo Modelo, Pedro"
                              ],
                              "notes": [
                                "Prime Minister of Spain"
                              ],
                              "gender": [
                                "male"
                              ],
                              "birthDate": [
                                "1972-02-29"
                              ],
                              "birthPlace": [
                                "Madrid, Spain"
                              ],
                              "nationality": null,
                              "position": null
                            },
                            "risk_view": {
                              "crimes": {
                                "score": 0.0,
                                "weightage": 20,
                                "risk_level": "Low",
                                "risk_scores": {}
                              },
                              "countries": {
                                "score": 9.64,
                                "weightage": 30,
                                "risk_level": "Low",
                                "risk_scores": {
                                  "Spain": 25.71
                                }
                              },
                              "categories": {
                                "score": 62.5,
                                "weightage": 50,
                                "risk_level": "High",
                                "risk_scores": {
                                  "PEP": 100.0,
                                  "PEP Level 1": 100.0
                                }
                              },
                              "custom_list": {}
                            },
                            "score_breakdown": {
                              "name_score": 89,
                              "name_weight": 60,
                              "name_weight_normalized": 60.0,
                              "name_contribution": 53.4,
                              "dob_score": 100,
                              "dob_weight": 25,
                              "dob_weight_normalized": 25.0,
                              "dob_contribution": 25.0,
                              "country_score": 100,
                              "country_weight": 15,
                              "country_weight_normalized": 15.0,
                              "country_contribution": 15.0,
                              "document_number_match_type": "NEUTRAL",
                              "document_number_effect": "No document number provided for screening",
                              "total_score": 93
                            },
                            "pep_matches": [
                              {
                                "aliases": [],
                                "education": [],
                                "list_name": "Presidency of the Government of Spain",
                                "publisher": "Presidency of the Government of Spain",
                                "source_url": "https://news.example.org/articles/sample",
                                "description": "The Presidency of the Government is the central institutional body in Spain that supports the Prime Minister and coordinates the general action of the central government.",
                                "matched_name": "Antonio Ejemplo Modelo",
                                "pep_position": "",
                                "date_of_birth": "1972-02-29",
                                "other_sources": [],
                                "place_of_birth": "Madrid, Spain"
                              }
                            ],
                            "sanction_matches": [],
                            "warning_matches": [],
                            "adverse_media_matches": [],
                            "adverse_media_details": null,
                            "linked_entities": [
                              {
                                "name": [
                                  "Maria Begona Gomez Fernandez"
                                ],
                                "active": [],
                                "status": [],
                                "details": [],
                                "relation": [
                                  "spouse"
                                ]
                              }
                            ],
                            "additional_information": {
                              "flag_summary": [
                                "Antonio Ejemplo Modelo has been flagged as a Level 1 Politically Exposed Person (PEP) from Spain, serving as the President of the Government of Spain."
                              ]
                            }
                          }
                        ],
                        "score": 73.0,
                        "screened_data": {
                          "full_name": "Pedro Sanchez Perez-Castejon",
                          "date_of_birth": "1972-02-29",
                          "nationality": "ES",
                          "document_number": null
                        },
                        "warnings": []
                      },
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-06-11T10:23:44.812000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールド単位の問題はDRFの標準エンベロープ（問題のあるフィールドごとにメッセージの配列1つ）で返されます。フィールド間のルール（重みの合計、しきい値の順序、保存なしのモニタリング）は`{\"error\": [...]}`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing full_name": {
                    "summary": "必須フィールドは`full_name`のみです",
                    "value": {
                      "full_name": [
                        "This field is required."
                      ]
                    }
                  },
                  "Short full_name": {
                    "summary": "`full_name`は2文字以上である必要があります",
                    "value": {
                      "full_name": [
                        "Ensure this field has at least 2 characters."
                      ]
                    }
                  },
                  "Invalid nationality": {
                    "summary": "`nationality`はISO 3166-1 alpha-2である必要があります",
                    "value": {
                      "nationality": [
                        "Invalid ISO 3166-1 alpha-2 country code."
                      ]
                    }
                  },
                  "Weights do not sum to 100": {
                    "summary": "`aml_name_weight` + `aml_dob_weight` + `aml_country_weight` ≠ 100",
                    "value": {
                      "error": [
                        "AML weights must sum to 100. Current sum: 90 (name: 50, dob: 25, country: 15)"
                      ]
                    }
                  },
                  "Thresholds out of order": {
                    "summary": "承認のしきい値がレビューのしきい値を上回っています",
                    "value": {
                      "error": [
                        "Approve threshold (90.0) cannot be greater than review threshold (80.0)"
                      ]
                    }
                  },
                  "Monitoring without saving": {
                    "summary": "`include_ongoing_monitoring=true`と`save_api_request=false`の併用",
                    "value": {
                      "error": [
                        "Ongoing monitoring can only be enabled when the API request is saved."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、スクリーニングやプロバイダーの呼び出しが行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/face-search/": {
      "post": {
        "summary": "顔検索",
        "description": "アプリケーションの顔検索インデックス（認証セッションから登録された顔、保存されたスタンドアロンのAPI呼び出し、ユーザープロフィールへ直接アップロードされた顔、ブロックリストと許可リスト）に対して顔画像を検索（1:N）し、類似度順に並んだ一致結果と、ブロックリストおよび重複に関する警告を取得します。\n\n**仕組み** `user_image`内で検出された最も大きな顔がエンベディング化され、アプリケーションの範囲内でインデックスに対して検索されます。類似度の下限を上回る一致が最大**5件**、`matches`で返されます。各一致には`similarity_percentage`、元のセッション（`session_id`、`session_number`、`status`、`vendor_data`）、そのセッションの書類認証中に抽出された`user_details`、`is_blocklisted` / `is_allowlisted`フラグ、および`source`の識別子（`session`、`imported`、または`list_entry`）が含まれます。\n\n- `search_type=most_similar`（デフォルト）は、登録されたすべての顔を類似度順に並べます。重複排除や不正グループの調査に使用してください。\n- `search_type=blocklisted_or_approved`は、候補をブロックリストの顔、許可リストの顔、承認済みセッションの顔、インポートされたユーザープロフィールの顔に限定し、ブロックリストのエントリーを最上位に並べます。ブロックリストのスクリーニングが主な目的の場合に使用してください。\n\n`status`が`Declined`になるのは、`FACE_IN_BLOCKLIST`または`POSSIBLE_FACE_IN_BLOCKLIST`の警告が発生した場合のみです。`DUPLICATED_FACE` / `POSSIBLE_DUPLICATED_FACE`（`information`）と`MULTIPLE_FACES_DETECTED`（`warning`）によって却下されることはありません。Passive Livenessとは異なり、このエンドポイントは同じ`vendor_data`を持つ過去のセッションを照合対象から除外**しません**。パッシブライブネス分析も内部で実行され、保存されたセッションとともに記録されますが、その結果はこのレスポンスには含まれません。\n\n**請求** `200`レスポンスごとに顔検索APIクレジットを1つ消費します（プランのクレジットまたはチャージ残高から支払われます）。残高が不足している場合は、画像処理の前に`403`が返されます。\n\n**セッションの保存と顔の登録（`save_api_request`、デフォルトは`true`）** `true`の場合、呼び出しはAPIタイプのセッションとして保存され（Business Console、返された`request_id`を使用した`GET /v3/session/{sessionId}/decision/`、`status.updated` Webhook）、検索された顔は顔検索インデックスに登録されます。顔検索の呼び出しによって登録された顔は以降の顔検索結果から除外されるため、繰り返し検索しても互いに一致することはありません。`false`の場合、呼び出しは1回限りです。何も保存されず、顔は登録されず、`match_image_url`の値はダウンロード可能なURLではなく内部ストレージのパスになります。\n\n**サンドボックス** サンドボックスのAPIキーでは、すべての処理と請求がスキップされます。リクエストの検証後（不正な入力には引き続き`400`が返されます）、エンドポイントは静的な`Approved`のモックペイロードを返し、セッションは保存されず、クレジットも消費されません。\n\n**認証** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない場合や無効な場合は`403`（`{\"detail\": \"You do not have permission to perform this action.\"}`）が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`が返されます。",
        "operationId": "post_v3face-search",
        "x-didit-sdk": {
          "resource": "face_search",
          "method": "search",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "user_image"
                ],
                "properties": {
                  "user_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "検索に使用する正面を向いた顔画像。使用可能な拡張子: `tiff`、`jpg`、`jpeg`、`png`、`webp`。最大アップロードサイズ: **5 MB**（これを超えるファイルは`400`で拒否されます）。画像は処理前に自動的に約0.5 MBに圧縮されるため、解像度を非常に高くしても精度は向上しません。画像には検出可能な顔が少なくとも1つ含まれている必要があり、含まれていない場合はエンドポイントが`400`を返します。複数の顔が含まれる場合は最も大きい顔が検索され、`MULTIPLE_FACES_DETECTED`警告が追加されます。"
                  },
                  "search_type": {
                    "type": "string",
                    "default": "most_similar",
                    "enum": [
                      "most_similar",
                      "blocklisted_or_approved"
                    ],
                    "description": "検索ポリシー。`most_similar`（デフォルト）は、アプリケーションに登録されているすべての顔を類似度順にランク付けします。`blocklisted_or_approved`は、候補をブロックリストに登録された顔、許可リストに登録された顔、承認済みセッションの顔、インポートされたユーザープロファイルの顔に限定し、ブロックリストのエントリーを最上位にランク付けします。",
                    "example": "most_similar"
                  },
                  "rotate_image": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、入力を90度ずつ回転させて試し、最も良好に顔を検出できる向きを使用します。EXIFの向き情報がない場合に便利です。レイテンシが増加します。",
                    "example": false
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しをAPIタイプのセッションとして保存し、`status.updated`Webhookを送信し、`match_image_url`の値に署名付きURLを発行し、検索した顔を顔検索インデックスに登録します（顔検索による登録は、以降の検索の対象から除外されます）。`false`の場合、検索は1回限りで、セッションは保存されず、顔も登録されません。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な識別子（ユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、そのまま返されます。検索結果から同一ユーザーの顔が除外されることはありません。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、そのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "dedup_check"
                    }
                  }
                }
              },
              "example": {
                "user_image": "(binary JPEG/PNG selfie)",
                "search_type": "most_similar",
                "rotate_image": false,
                "save_api_request": true,
                "vendor_data": "user-123",
                "metadata": {
                  "flow": "dedup_check"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "顔検索が完了しました。`face_search.matches`には、類似した顔が類似度の高い順に最大5件含まれます。空の配列は、登録済みの顔のいずれも類似度の下限を超えなかったことを意味します。`status`が`Declined`になるのはブロックリストに一致した場合のみです。重複の一致だけでは`Approved`が返されるため、`status`だけでなく`matches`と`warnings`を確認してください。`save_api_request=true`の場合、`request_id`は保存されたセッションIDです。各一致には`source`（`session`、`imported`、`list_entry`、または`retained_template`）、`vendor_user_id`、`biometric_template_id`が含まれます。`retained_template`の一致は、元のセッションが削除された後に保持された画像を含まない生体認証テンプレートに由来するもので、セッションのフィールド、`match_image_url`、`user_details`は`null`になります。",
            "content": {
              "application/json": {
                "examples": {
                  "Blocklist hit (Declined)": {
                    "summary": "顔がブロックリストに登録された顔と一致しています",
                    "value": {
                      "request_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
                      "face_search": {
                        "status": "Declined",
                        "total_matches": 1,
                        "matches": [
                          {
                            "session_id": "882c42d5-8a4d-4d20-8080-a22f57822c86",
                            "session_number": 323442,
                            "similarity_percentage": 99.99,
                            "source": "session",
                            "vendor_data": "user-1",
                            "verification_date": "2025-01-01T00:00:00Z",
                            "user_details": {
                              "full_name": "Jane Marie Doe",
                              "document_type": "ID",
                              "document_number": "X1234567"
                            },
                            "match_image_url": "https://<media-host>/face/3f6a1c2e/reference.jpg",
                            "status": "Approved",
                            "is_blocklisted": true,
                            "is_allowlisted": false,
                            "api_service": null,
                            "vendor_user_id": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
                            "biometric_template_id": null
                          }
                        ],
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                40,
                                40,
                                120,
                                120
                              ],
                              "confidence": 0.732973
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": [
                          {
                            "risk": "FACE_IN_BLOCKLIST",
                            "feature": "LIVENESS",
                            "additional_data": {
                              "blocklisted_session_id": "882c42d5-8a4d-4d20-8080-a22f57822c86",
                              "blocklisted_session_number": 323442,
                              "api_service": null
                            },
                            "log_type": "error",
                            "short_description": "Face in blocklist",
                            "long_description": "The system identified a face in the blocklist, which means the face is not allowed to be verified."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  },
                  "Duplicate found (Approved)": {
                    "summary": "この顔は別の承認済みセッションですでに検出されています。情報提供のみで、却下にはなりません",
                    "value": {
                      "request_id": "5e0c3a1f-7b2d-4c8e-9f10-2a3b4c5d6e7f",
                      "face_search": {
                        "status": "Approved",
                        "total_matches": 1,
                        "matches": [
                          {
                            "session_id": "1f2e3d4c-5b6a-7980-1122-334455667788",
                            "session_number": 1024,
                            "similarity_percentage": 87.42,
                            "source": "session",
                            "vendor_data": "user-9",
                            "verification_date": "2025-11-20T09:15:00Z",
                            "user_details": null,
                            "match_image_url": "https://<media-host>/face/9c8b7a6d/reference.jpg",
                            "status": "Approved",
                            "is_blocklisted": false,
                            "is_allowlisted": false,
                            "api_service": "PASSIVE_LIVENESS",
                            "vendor_user_id": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
                            "biometric_template_id": null
                          }
                        ],
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                40,
                                40,
                                120,
                                120
                              ],
                              "confidence": 0.732973
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": [
                          {
                            "risk": "DUPLICATED_FACE",
                            "feature": "LIVENESS",
                            "additional_data": {
                              "duplicated_session_id": "1f2e3d4c-5b6a-7980-1122-334455667788",
                              "duplicated_session_number": 1024,
                              "api_service": "PASSIVE_LIVENESS"
                            },
                            "log_type": "information",
                            "short_description": "Duplicated face from other approved session",
                            "long_description": "The system identified a duplicated face from another approved session, requiring further investigation."
                          }
                        ]
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  },
                  "No matches (Approved)": {
                    "summary": "類似度の下限を超える登録済みの顔はありませんでした",
                    "value": {
                      "request_id": "9d8c7b6a-5f4e-3d2c-1b0a-998877665544",
                      "face_search": {
                        "status": "Approved",
                        "total_matches": 0,
                        "matches": [],
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                40,
                                40,
                                120,
                                120
                              ],
                              "confidence": 0.732973
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": []
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "face_search": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined"
                          ],
                          "description": "`FACE_IN_BLOCKLIST`または`POSSIBLE_FACE_IN_BLOCKLIST`の警告が発生した場合にのみ`Declined`になります。重複一致や複数の顔に関する警告によって却下されることはありません。"
                        },
                        "total_matches": {
                          "type": "integer",
                          "description": "`matches`内のエントリー数（0–5）。",
                          "example": 1
                        },
                        "matches": {
                          "type": "array",
                          "maxItems": 5,
                          "description": "顔検索インデックスに登録された顔のうち、類似度の下限を超えるものを最大5件、類似度順に返します（`search_type=blocklisted_or_approved`の場合はブロックリストのエントリが先頭に並びます）。十分に類似した登録済みの顔がない場合は空です。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "session_id": {
                                "type": "string",
                                "format": "uuid",
                                "nullable": true,
                                "description": "一致した顔が属する検証セッションのID。`source`が`imported`、`list_entry`、`retained_template`のいずれかの場合は`null`です。",
                                "example": "882c42d5-8a4d-4d20-8080-a22f57822c86"
                              },
                              "session_number": {
                                "type": "integer",
                                "nullable": true,
                                "description": "Business Consoleに表示されるわかりやすいセッション番号。セッション以外の一致では`null`です。",
                                "example": 323442
                              },
                              "similarity_percentage": {
                                "type": "number",
                                "format": "float",
                                "minimum": 0,
                                "maximum": 100,
                                "description": "送信された顔と一致した顔の類似度(0〜100)。",
                                "example": 99.99
                              },
                              "source": {
                                "type": "string",
                                "enum": [
                                  "session",
                                  "imported",
                                  "list_entry",
                                  "retained_template"
                                ],
                                "description": "一致した顔の登録元です。`session`は検証セッションまたは保存されたスタンドアロンのAPI呼び出し、`imported`はユーザープロフィールに直接アップロードされた顔、`list_entry`はいずれかのリストに添付された顔、`retained_template`はユーザーに保存された画像を含まない生体認証テンプレートで、`/v3/biometric-templates/`に一覧表示されます。"
                              },
                              "vendor_data": {
                                "type": "string",
                                "nullable": true,
                                "description": "一致したセッション、またはインポートされた顔および保持されたテンプレートの顔の場合は紐付けられたユーザーの`vendor_data`です。",
                                "example": "user-1"
                              },
                              "vendor_user_id": {
                                "type": "string",
                                "format": "uuid",
                                "nullable": true,
                                "description": "リンクされたユーザーのID。リストエントリおよびユーザーのないセッションの一致の場合は`null`。",
                                "example": "2f7c1a9e-4b28-4a6d-97f1-83576f80e1b4"
                              },
                              "biometric_template_id": {
                                "type": "string",
                                "format": "uuid",
                                "nullable": true,
                                "description": "保持された生体認証テンプレートのID。`source`が`retained_template`の場合のみ設定され、それ以外の場合は`null`です。",
                                "example": null
                              },
                              "verification_date": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "一致した顔が最初に撮影された日時、または保持されたテンプレートが作成された日時（`YYYY-MM-DDThh:mm:ssZ`）。`list_entry`の一致では`null`です。",
                                "example": "2025-01-01T00:00:00Z"
                              },
                              "user_details": {
                                "type": "object",
                                "nullable": true,
                                "description": "一致したセッションの書類検証で抽出された本人データ。一致したセッションに書類データがない場合(ライブネスのみのセッションなど)は`null`となり、`retained_template`の一致では常に`null`です。`source: imported`の一致では、代わりにユーザープロフィールから値が設定されます: `full_name`は設定され、`document_type`/`document_number`はnullです。",
                                "properties": {
                                  "full_name": {
                                    "type": "string",
                                    "nullable": true,
                                    "example": "Jane Marie Doe"
                                  },
                                  "document_type": {
                                    "type": "string",
                                    "nullable": true,
                                    "example": "ID"
                                  },
                                  "document_number": {
                                    "type": "string",
                                    "nullable": true,
                                    "example": "X1234567"
                                  }
                                }
                              },
                              "match_image_url": {
                                "type": "string",
                                "nullable": true,
                                "description": "`save_api_request=true`の場合、一致した顔の参照画像の期限付きURL(`https://<media-host>/...`)です。`save_api_request=false`の場合は内部ストレージのパスとなり、直接ダウンロードすることはできません。保持されたテンプレートには画像が含まれないため、`retained_template`の一致では常に`null`です。",
                                "example": "https://<media-host>/face/3f6a1c2e/reference.jpg"
                              },
                              "status": {
                                "type": "string",
                                "nullable": true,
                                "description": "一致したセッションのステータス（`Approved`、`Declined`、`In Review`など）。`imported`/`list_entry`の一致では`null`です。",
                                "example": "Approved"
                              },
                              "is_blocklisted": {
                                "type": "boolean",
                                "description": "一致した顔が顔のブロックリストに登録されている場合は`true`です。十分に類似したブロックリスト上の一致が1件でもあれば、検索は却下されます。"
                              },
                              "is_allowlisted": {
                                "type": "boolean",
                                "description": "一致した顔がいずれかの許可リストに登録されている場合は`true`です。許可リストに登録された一致では、重複の警告が抑制されます。"
                              },
                              "api_service": {
                                "type": "string",
                                "nullable": true,
                                "description": "照合された顔がスタンドアロンのAPI呼び出し（例：`PASSIVE_LIVENESS`）で登録された場合に設定されます。通常の認証セッションおよびインポートされた顔では`null`です。",
                                "example": null
                              }
                            }
                          }
                        },
                        "user_image": {
                          "type": "object",
                          "description": "送信された画像の顔検出結果。ここでのエントリには`bbox`と`confidence`のみが含まれます。",
                          "properties": {
                            "entities": {
                              "type": "array",
                              "description": "検出された顔ごとに1エントリー。最も大きい顔が検索対象です。",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "bbox": {
                                    "type": "array",
                                    "items": {
                                      "type": "integer"
                                    },
                                    "minItems": 4,
                                    "maxItems": 4,
                                    "description": "ピクセル単位のバウンディングボックス`[x_min, y_min, x_max, y_max]`。",
                                    "example": [
                                      40,
                                      40,
                                      120,
                                      120
                                    ]
                                  },
                                  "confidence": {
                                    "type": "number",
                                    "format": "float",
                                    "minimum": 0,
                                    "maximum": 1,
                                    "description": "顔検出の信頼度（0～1）。",
                                    "example": 0.732973
                                  }
                                }
                              }
                            },
                            "best_angle": {
                              "type": "integer",
                              "description": "最も良好な顔検出結果が得られた回転角度(度)。`rotate_image=true`によって向きが補正された場合にのみゼロ以外になります。このエンドポイントではnullになることはありません(モデルが値を省略した場合は0がデフォルトになります)。",
                              "example": 0
                            }
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "description": "リスクシグナル。`FACE_IN_BLOCKLIST` / `POSSIBLE_FACE_IN_BLOCKLIST`(`error`)は検索を却下します。`MULTIPLE_FACES_DETECTED`(`warning`)と`DUPLICATED_FACE` / `POSSIBLE_DUPLICATED_FACE`(`information`)は参考情報です。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "enum": [
                                  "MULTIPLE_FACES_DETECTED",
                                  "FACE_IN_BLOCKLIST",
                                  "POSSIBLE_FACE_IN_BLOCKLIST",
                                  "DUPLICATED_FACE",
                                  "POSSIBLE_DUPLICATED_FACE"
                                ],
                                "description": "機械可読なリスクコードです。"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "LIVENESS"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`LIVENESS`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "`MULTIPLE_FACES_DETECTED`の場合は`null`。ブロックリストの一致には`{blocklisted_session_id, blocklisted_session_number, api_service}`が含まれ、重複の一致には最初に一致したセッションを指す`{duplicated_session_id, duplicated_session_number, api_service}`が含まれます。"
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error",
                                  "warning",
                                  "information"
                                ],
                                "description": "重大度。`error`の警告は`status`を`Declined`にします。`warning`と`information`のエントリーは参考情報であり、それ単独で却下になることはありません。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で1行にまとめた要約。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で説明したもの。"
                              }
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "レスポンスが生成された日時を示すISO 8601タイムスタンプ（UTC）。例: `2026-06-12T01:04:42.763237+00:00`。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。`user_image`がない、5MBを超える、サポートされていない拡張子である、または送信された画像で**顔が検出されない**場合に返されます。フィールドエラーはDRFの`{field: [messages]}`エンベロープを使用し、顔検出の失敗は`{\"error\": ...}`を使用します。",
            "content": {
              "application/json": {
                "examples": {
                  "No face detected": {
                    "summary": "画像は正常にデコードできますが、検出可能な顔が含まれていません",
                    "value": {
                      "error": "No face detected in the image"
                    }
                  },
                  "Missing image": {
                    "summary": "フォームデータに`user_image`が含まれていません",
                    "value": {
                      "user_image": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Unsupported file extension": {
                    "summary": "ファイル拡張子がtiff/jpg/jpeg/png/webp以外",
                    "value": {
                      "user_image": [
                        "File extension “txt” is not allowed. Allowed extensions are: tiff, jpg, jpeg, png, webp."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "アップロードが5MBの上限を超えています",
                    "value": {
                      "user_image": [
                        "File size should not exceed 5 MB"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、画像の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/face-search/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'user_image=@./selfie.jpg' \\\n  -F 'search_type=most_similar' \\\n  -F 'save_api_request=true' \\\n  -F 'vendor_data=user-123'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.face_search.search(\n    user_image=open(\"user_image.jpg\", \"rb\"),\n    search_type=\"most_similar\",\n    rotate_image=False,\n    save_api_request=True,\n    vendor_data=\"user-123\",\n    metadata={\"flow\": \"dedup_check\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.faceSearch.search({\n  user_image: await fileFromPath(\"user_image.jpg\"),\n  search_type: \"most_similar\",\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"dedup_check\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FaceSearch.Search(ctx, didit.FaceSearchSearchParams{\n\tUserImage:      didit.FileFromPath(\"user_image.jpg\"),\n\tSearchType:     didit.Some(didit.FaceSearchSearchParamsSearchType(\"most_similar\")),\n\tRotateImage:    didit.Bool(false),\n\tSaveAPIRequest: didit.Bool(true),\n\tVendorData:     didit.String(\"user-123\"),\n\tMetadata:       didit.Some(map[string]any{\"flow\": \"dedup_check\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.FaceSearchSearchParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.faceSearch().search(FaceSearchSearchParams.builder()\n        .userImage(Path.of(\"user_image.jpg\"))\n        .searchType(FaceSearchSearchParams.SearchType.of(\"most_similar\"))\n        .rotateImage(false)\n        .saveApiRequest(true)\n        .vendorData(\"user-123\")\n        .metadata(Map.of(\"flow\", \"dedup_check\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->faceSearch->search([\n    'user_image' => File::fromPath('user_image.jpg'),\n    'search_type' => 'most_similar',\n    'rotate_image' => false,\n    'save_api_request' => true,\n    'vendor_data' => 'user-123',\n    'metadata' => ['flow' => 'dedup_check'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.face_search.search(\n  user_image: Pathname(\"user_image.jpg\"),\n  search_type: \"most_similar\",\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"dedup_check\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.FaceSearch.SearchAsync(new FaceSearchSearchParams\n{\n    UserImage = FileUpload.FromPath(\"user_image.jpg\"),\n    SearchType = new FaceSearchSearchParamsSearchType(\"most_similar\"),\n    RotateImage = false,\n    SaveApiRequest = true,\n    VendorData = \"user-123\",\n    Metadata = new Dictionary<string, object> { [\"flow\"] = \"dedup_check\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/sessions/": {
      "get": {
        "summary": "フィルターとページネーションを使用して認証セッション（KYCおよび/またはKYB）を一覧表示",
        "description": "APIキーで識別されるアプリケーションの検証セッションを、ページ分割されたリストとして新しい順(`session_number`の降順)で返します。\n\n**正規URL:** ルートは`/v3/sessions/`(末尾スラッシュあり)です。スラッシュなしの`/v3/sessions`へのリクエストには、クエリ文字列を保持したままスラッシュ付きURLへの`301`リダイレクトが返されます。ほとんどのHTTPクライアントは、GETではこのリダイレクトを透過的にたどります。\n\n**このエンドポイントとWebhookの使い分け。** ダッシュボード、バックオフィスでの検索、照合、一括エクスポートにはこのエンドポイントを使用してください。個々の認証の進捗を追跡するためにこのエンドポイントをポーリングしないでください。代わりに[Webhook](/ja/integration/webhooks)を設定してください。Webhookはセッションが変化した時点で`status.updated`イベントをプッシュします。1件のセッションの完全な結果を取得するには、`GET /v3/session/{sessionId}/decision/`を呼び出してください。\n\n**KYCセッションとKYBセッション。** `session_kind`で、一覧に含める種類を選択します。\n- `user`(デフォルト): ユーザー認証 (KYC)セッションのみ。後方互換の動作です。\n- `business`: 法人確認 (KYB)セッションのみ。行の形状は異なり、より小さくなります(レスポンススキーマを参照)。\n- `all`: 両方の種類を1つのレスポンスで返します。同じ`limit`/`offset`に対するKYCのページとKYBのページが`results`内で連結される(KYCの行が先)ため、1ページに最大`2 x limit`行が含まれる場合があります。`count`は両方の種類の合計で、`next`/`previous`はKYC側のページネーションを反映します。混在データを厳密にページ分割するには、`user`と`business`を別々に呼び出してください。\n\nすべての行に、`session_kind`識別子(`\"user\"`または`\"business\"`)が含まれます。\n\n**ページネーション。** 標準のlimit/offset方式です。`limit`(デフォルト50)と`offset`(デフォルト0)を使用し、`next`/`previous`にはそのまま使えるページURLが返されます。KYCの行では`count`は正確な値です。KYBの行では`count`は範囲を限定したスキャンで算出され、上限は100です。一致が100件を超える場合も100のままとなるため、`count`から総ページ数を計算するのではなく、`next`を使って(または満杯のページが返ってきたかどうかを確認して)反復処理してください。\n\n**フィルターの仕様。** すべてのフィルターはANDで組み合わされ、KYCの行に適用されます。`session_kind`が`business`または`all`の場合、KYB側では共通パラメーターの`vendor_data`、`status`、`workflow_id`、`country`(登記企業の国コード)、`date_from`、`date_to`、`search`(企業名、登記番号(登記番号は区切り文字なしで入力してください。例: `DPC-001`ではなく`DPC001`)、vendor_data、セッション番号、またはセッションUUID)、`warning`、`organization_name`が適用されます。その他のKYC専用フィルターは、KYBの行では無視されます。カンマ区切りのパラメーター(`status`、`country`、`document_type`、`region`、`workflow_id`、`document_name`、`warning`、`organization_name`、`session_type`)は、列挙した値のいずれかに一致します(パラメーター内ではOR)。`vendor_data`は完全一致です。部分一致には`search`を使用してください。リストフィルターに不明な値を指定した場合は、単に行が返されません(エラーにはなりません)。型付きの値(`date_from`、`date_to`、`didit_internal_id`、`api_service`、`session_kind`)の形式が不正な場合は、フィールドごとのエラーオブジェクトとともに`400`が返されます。\n\n**検索。** `search`は入力内容に応じて動作が変わります。完全なUUIDの場合は`session_id`を検索します。数字(任意で`+ - . space`を含む)の場合は、セッション番号の前方一致、書類番号または個人番号、電話番号の前方一致、または`vendor_data`に一致します。`@`を含む値はメールアドレスの前方一致に一致します。それ以外のテキストは、名前(アクセントを区別しない)と`vendor_data`に一致します。\n\nエンドポイントごとの固定のレート制限は適用されませんが、リストのポーリングは低頻度に抑え、リアルタイムの更新にはWebhookを利用してください。",
        "operationId": "get_v3_sessions",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "session_kind",
            "in": "query",
            "required": false,
            "description": "一覧表示するセッションの種類：`user`（KYCのみ、デフォルト）、`business`（KYBのみ）、または`all`（両方を連結したもの。統合ページネーションの仕様については説明を参照してください）。照合では大文字と小文字は区別されません（`BUSINESS`も有効です）。`user`/`business`/`all`の大文字小文字違い以外の値を指定すると`400`が返されます。",
            "schema": {
              "type": "string",
              "enum": [
                "user",
                "business",
                "all"
              ],
              "default": "user"
            },
            "example": "all"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1ページあたりの最大行数（`session_kind=all`の場合は種類ごと）です。デフォルトは50です。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "example": 20
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "最初に返す行の前にスキップする行数です。デフォルトは0です。レスポンスの`next`/`previous`のURLをたどる方法を推奨します。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "example": 20
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "含めるセッションステータスのカンマ区切りリスト(例:`Approved,In Review`)。値は大文字と小文字が区別されます。[認証ステータス](/ja/integration/verification-statuses)を参照してください。不明な値はどれにも一致しません。",
            "schema": {
              "type": "string"
            },
            "example": "Approved,In Review"
          },
          {
            "name": "vendor_data",
            "in": "query",
            "required": false,
            "description": "セッション作成時に送信した`vendor_data`（自社のユーザーまたは企業の識別子）による完全一致フィルターです。部分一致には代わりに`search`を使用してください。",
            "schema": {
              "type": "string"
            },
            "example": "your-user-id-123"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "`S-0001`(ユーザー)や`B-0001`(企業)のような表示上の完全な参照番号は、そのセッション番号と種類にのみ一致します。先頭のゼロや大文字・小文字の違いは一致判定に影響しません。スマートなフリーテキスト検索です。完全なUUIDは`session_id`に一致し、数値の入力はセッション番号の前方一致、書類番号/個人番号、電話番号の前方一致、または`vendor_data`に一致します。`@`を含む入力はメールアドレスの前方一致に、その他のテキストは氏名(アクセントを区別しない)と`vendor_data`に一致します。数字を含むフリーテキストは、さらに書類番号/個人番号の検索フィールドとセッション番号の前方一致にも一致します。",
            "schema": {
              "type": "string"
            },
            "example": "jane doe"
          },
          {
            "name": "workflow_id",
            "in": "query",
            "required": false,
            "description": "カンマ区切りのワークフローUUID（Consoleのワークフローページで確認できます）。リスト内の不正な形式のUUIDは無視され、有効なものが1つもない場合、結果は空になります。",
            "schema": {
              "type": "string"
            },
            "example": "9f9b1234-aaaa-bbbb-cccc-1234567890ab"
          },
          {
            "name": "date_from",
            "in": "query",
            "required": false,
            "description": "この日付（UTC）以降に作成されたセッションのみ。形式は`YYYY-MM-DD`です。不正な形式の日付は`400`を返します。",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-06-01"
          },
          {
            "name": "date_to",
            "in": "query",
            "required": false,
            "description": "この日付（UTC）までに作成されたセッションのみ。形式は`YYYY-MM-DD`です。KYCの行では当日全体が含まれます。KYBの行では比較が`created_at <= date_to`（午前0時）となるため、KYBセッションの1日分をすべて含めるには翌日の日付を使用してください。",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-06-30"
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りのタグID（アプリケーションの`tags`）。いずれかのタグが付いたセッションを返します。有効なUUIDでないIDは無視され、有効なIDが1つもない場合、リストは空になります。"
          },
          {
            "name": "decided_from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "ISO 8601形式の日時。ステータスがこの日時以降に最後に変更されたセッションを返します。作成日時ではなく、最後のステータス変更日時でフィルタリングします。"
          },
          {
            "name": "decided_to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "ISO 8601形式の日時。ステータスがこの日時より前に最後に変更されたセッションを返します。`decided_from`と組み合わせると半開区間を指定できます。"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "カンマ区切りの国フィルター。KYCの行の場合は、本人確認書類の発行国を示すISO 3166-1 alpha-3コード(例:`ESP,USA`)で、国籍とは異なる場合があります。KYBの行の場合は、登記上の企業の国コードです。",
            "schema": {
              "type": "string"
            },
            "example": "ESP,USA"
          },
          {
            "name": "document_type",
            "in": "query",
            "required": false,
            "description": "セッションで検証された本人確認書類の種類コードのカンマ区切りリスト（KYC行のみ）: `P`（パスポート）、`ID`（身分証明書）、`DL`（運転免許証）、`RP`（在留許可証）、`SSC`（社会保障カード）、`HIC`（健康保険証）、`WP`（労働許可証）、`TC`（納税カード）、`VISA`、`PSC`（公共サービスカード）、`BC`（出生証明書）、`OTHER`。なお、レスポンスフィールド`document_type`にはコードではなく表示名が含まれます。",
            "schema": {
              "type": "string"
            },
            "example": "P,ID"
          },
          {
            "name": "document_name",
            "in": "query",
            "required": false,
            "description": "書類名の完全一致です。複数の名前をカンマ区切りで渡せますが、値がカンマで分割されるのは` - `区切りが2つ以上含まれる場合のみです（カンマを含む単一の名前は全体で照合されます）。名前は書類検証（表面または裏面）で認識されたもので、例えば`Spain - Id Card (2021)`です。KYCの行のみが対象です。",
            "schema": {
              "type": "string"
            },
            "example": "Spain - Id Card (2021)"
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "description": "カンマ区切りの書類の地域/州の値(米国の運転免許証など、地域ごとに発行される書類向け)。KYCの行のみが対象です。",
            "schema": {
              "type": "string"
            },
            "example": "CA,TX"
          },
          {
            "name": "didit_internal_id",
            "in": "query",
            "required": false,
            "description": "Diditの内部ユーザー識別子(レスポンスフィールド`didit_internal_id`)で絞り込み、認証済みの1人のユーザーのすべてのセッションを一覧表示します。有効なUUIDである必要があり、不正な形式の値を指定すると`400`が返ります。KYCの行のみが対象です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "d9e78474-6c8d-4f2a-bb90-6f5c2f3a1147"
          },
          {
            "name": "session_type",
            "in": "query",
            "required": false,
            "description": "カンマ区切りのセッション作成チャネル:`API`、`HOSTED`、`MIGRATED`。特別な値`ALL`を指定する(またはパラメーターを省略する)と、フィルターが無効になります。KYCの行のみが対象です。",
            "schema": {
              "type": "string"
            },
            "example": "HOSTED"
          },
          {
            "name": "api_service",
            "in": "query",
            "required": false,
            "description": "スタンドアロンAPIセッションをサービスで絞り込みます。無効な値を指定すると`400`が返されます。KYCの行のみが対象です。",
            "schema": {
              "type": "string",
              "enum": [
                "ID_VERIFICATION",
                "FACE_MATCH",
                "AGE_ESTIMATION",
                "FACE_SEARCH",
                "POA",
                "AML",
                "KYB_REGISTRY",
                "PASSIVE_LIVENESS",
                "DATABASE_VALIDATION",
                "PHONE_VERIFICATION",
                "EMAIL_VERIFICATION"
              ]
            },
            "example": "AML"
          },
          {
            "name": "screened_full_name",
            "in": "query",
            "required": false,
            "description": "AMLおよびデータベース検証でスクリーニングされたデータ内を、アクセントを区別せずに名前で検索します。`api_service=AML`または`api_service=DATABASE_VALIDATION`と組み合わせると、検索はその機能のスクリーニング済みデータに限定されます。KYCの行のみが対象です。",
            "schema": {
              "type": "string"
            },
            "example": "Jane Doe"
          },
          {
            "name": "warning",
            "in": "query",
            "required": false,
            "description": "カンマ区切りの警告リスクコード。いずれかのコードが発生したセッションを返します（例：`POSSIBLE_FRAUD`）。リスクコードは、[警告のドキュメント](/ja/integration/webhooks)に機能ごとに記載されています。KYCの行に適用され、企業の警告コードを指定した場合はKYBの行にも適用されます。",
            "schema": {
              "type": "string"
            },
            "example": "POSSIBLE_FRAUD"
          },
          {
            "name": "status_initialized_as_in_review",
            "in": "query",
            "required": false,
            "description": "`true`の場合、判定が最初に`In Review`となったセッションのみを対象にします（手動レビューの件数の監査に便利です）。KYCの行のみが対象です。",
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "is_kyc_to_be_reviewed",
            "in": "query",
            "required": false,
            "description": "`true`を指定すると書類検証が手動レビュー対象としてフラグ付けされたセッションを返し、`false`を指定すると書類検証が明示的にフラグ付けされていないセッションを返します。無効にするには省略します。KYCの行のみが対象です。",
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "euuid",
            "in": "query",
            "required": false,
            "description": "エンドユーザーのeuuid（認証を行うユーザーに割り当てられたUUIDで、Consoleのディープリンクで使用されます）で絞り込みます。有効なUUIDでなければなりません。不正な形式の値を指定すると、フィールドエラー付きの400が返されます。KYCの行のみが対象です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "0f8fad5b-d9cb-469f-a165-70867728950e"
          },
          {
            "name": "organization_name",
            "in": "query",
            "required": false,
            "description": "カンマ区切りの組織名。Console向けの機能です。APIキー(すでに1つのアプリケーションにスコープされています)を使用する場合は、自分の組織名にのみ一致します。",
            "schema": {
              "type": "string"
            },
            "example": "Acme Inc"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたセッション一覧。`results`の各項目は、`session_kind`に応じてKYCの行、KYBの行、またはその両方になります。各行の`session_kind`フィールドで種類を判別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "フィルターに一致したセッションの数です。100件までは正確な値で、それを超える場合は100で打ち切られるため、合計値としては使用しないでください。さらにページがあるかどうかは`next`で確認してください。`session_kind=all`の場合は両方の種類の合計で、それぞれ100で打ち切られます。",
                      "example": 2
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。",
                      "example": "https://verification.didit.me/v3/sessions/?limit=20&offset=20"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。",
                      "example": null
                    },
                    "results": {
                      "type": "array",
                      "description": "セッションの行（新しい順）。`session_kind=all`の場合、KYCの行が先に並び、その後にKYBの行が続きます。",
                      "items": {
                        "oneOf": [
                          {
                            "$ref": "#/components/schemas/UserSessionListItem"
                          },
                          {
                            "$ref": "#/components/schemas/BusinessSessionListItem"
                          }
                        ],
                        "discriminator": {
                          "propertyName": "session_kind",
                          "mapping": {
                            "user": "#/components/schemas/UserSessionListItem",
                            "business": "#/components/schemas/BusinessSessionListItem"
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "KYC sessions (default)": {
                    "summary": "session_kind=user - 完了済みのセッション1件と未開始のセッション1件",
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "session_id": "5b3720ed-d429-42ef-b67f-37ea805f48ee",
                          "session_kind": "user",
                          "session_number": 720,
                          "session_url": "https://verify.didit.me/session/CuXoBYCYVO5Y",
                          "portrait_image": "https://<media-host>/portraits/5b3720ed.jpg?X-Amz-Expires=3600&X-Amz-Signature=...",
                          "document_type": "Passport",
                          "full_name": "Jane Marie Doe",
                          "country": "ESP",
                          "status": "Approved",
                          "vendor_data": "your-user-id-123",
                          "didit_internal_id": "d9e78474-6c8d-4f2a-bb90-6f5c2f3a1147",
                          "created_at": "2026-06-09T12:26:54.328364Z",
                          "features": [
                            {
                              "feature": "ID_VERIFICATION",
                              "status": "Approved"
                            },
                            {
                              "feature": "LIVENESS",
                              "status": "Approved"
                            },
                            {
                              "feature": "FACE_MATCH",
                              "status": "Approved"
                            },
                            {
                              "feature": "AML",
                              "status": "Approved"
                            },
                            {
                              "feature": "IP_ANALYSIS",
                              "status": "Approved"
                            }
                          ],
                          "phone_number": {
                            "number": "+14155552671",
                            "is_verified": true
                          },
                          "email_address": {
                            "email": "jane@example.com",
                            "is_verified": true
                          },
                          "additional_details": {
                            "aml": {
                              "total_hits": 0,
                              "entity_type": "person",
                              "is_adverse_media_fetched": false
                            },
                            "liveness": {
                              "method": "PASSIVE",
                              "score": 0.98
                            },
                            "face_match": {
                              "score": 0.95
                            }
                          }
                        },
                        {
                          "session_id": "038ad62f-5ebd-46c2-afe9-4b2956bf687f",
                          "session_kind": "user",
                          "session_number": 719,
                          "session_url": "https://verify.didit.me/session/7RGKiO6ioGH6",
                          "portrait_image": null,
                          "document_type": null,
                          "full_name": null,
                          "country": null,
                          "status": "Not Started",
                          "vendor_data": "your-user-id-124",
                          "didit_internal_id": "eb4e679d-ca4b-461f-9685-687bac29ebdb",
                          "created_at": "2026-06-09T08:02:23.343053Z",
                          "features": [
                            {
                              "feature": "ID_VERIFICATION",
                              "status": "Not Finished"
                            },
                            {
                              "feature": "LIVENESS",
                              "status": "Not Finished"
                            },
                            {
                              "feature": "FACE_MATCH",
                              "status": "Not Finished"
                            },
                            {
                              "feature": "AML",
                              "status": "Not Finished"
                            },
                            {
                              "feature": "IP_ANALYSIS",
                              "status": "Not Finished"
                            }
                          ],
                          "phone_number": null,
                          "email_address": null,
                          "additional_details": null
                        }
                      ]
                    }
                  },
                  "Mixed KYC + KYB (session_kind=all)": {
                    "summary": "session_kind=all - KYCの行の後にKYBの行が続く例",
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "session_id": "5b3720ed-d429-42ef-b67f-37ea805f48ee",
                          "session_kind": "user",
                          "session_number": 720,
                          "session_url": "https://verify.didit.me/session/CuXoBYCYVO5Y",
                          "portrait_image": null,
                          "document_type": "Identity Card",
                          "full_name": "Jane Marie Doe",
                          "country": "ESP",
                          "status": "In Review",
                          "vendor_data": "your-user-id-123",
                          "didit_internal_id": "d9e78474-6c8d-4f2a-bb90-6f5c2f3a1147",
                          "created_at": "2026-06-09T12:26:54.328364Z",
                          "features": [
                            {
                              "feature": "ID_VERIFICATION",
                              "status": "In Review"
                            },
                            {
                              "feature": "LIVENESS",
                              "status": "Approved"
                            }
                          ],
                          "phone_number": null,
                          "email_address": null,
                          "additional_details": {
                            "liveness": {
                              "method": "PASSIVE",
                              "score": 0.98
                            }
                          }
                        },
                        {
                          "session_id": "8a1f63c2-1b9e-4f3a-9c41-2f6a1f0b7d52",
                          "session_kind": "business",
                          "session_number": 42,
                          "status": "Approved",
                          "vendor_data": "your-company-id-77",
                          "created_at": "2026-06-08T09:14:02.118450Z",
                          "workflow_id": "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                          "workflow_type": "kyb",
                          "workflow_label": "Standard KYB",
                          "company_name": "Acme Holdings S.L.",
                          "registration_number": "B12345678",
                          "country": "ES"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "301": {
            "description": "末尾にスラッシュが付いた正規URLへリダイレクトします。リクエストパスが`/v3/sessions`（末尾のスラッシュなし）の場合に返されます。`Location`ヘッダーはクエリ文字列を保持したまま`/v3/sessions/`を指します。GETクライアントは通常、自動的にリダイレクトに従います。"
          },
          "400": {
            "description": "クエリパラメーターが無効です。ボディは、問題のあるパラメーターをキーとするオブジェクトです。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid session_kind": {
                    "summary": "session_kindがuser/business/allのいずれでもありません",
                    "value": {
                      "session_kind": "Must be \"user\", \"business\", or \"all\"."
                    }
                  },
                  "Invalid date": {
                    "summary": "date_from/date_toの形式が不正です",
                    "value": {
                      "date_from": [
                        "Enter a valid date."
                      ]
                    }
                  },
                  "Invalid didit_internal_id": {
                    "summary": "didit_internal_idがUUIDではありません",
                    "value": {
                      "didit_internal_id": [
                        "Enter a valid UUID."
                      ]
                    }
                  },
                  "Invalid api_service": {
                    "summary": "api_serviceが許可された選択肢に含まれていません",
                    "value": {
                      "api_service": [
                        "Select a valid choice. FOO is not one of the available choices."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、または失効しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。\n\n**削除されたアプリケーション:** アプリケーションが削除されてから数分間は、そのアプリケーションのAPIキーを使ったリクエストに`{\"detail\": \"This application was deleted.\", \"code\": \"application_deleted\"}`が返されることがあります。再試行しないでください。アプリケーションとそのAPIキーはすでに存在しません。この数分が過ぎると、キーは他の無効なキーと同様に拒否されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "You do not have permission to perform this action."
                    },
                    "code": {
                      "type": "string",
                      "description": "機械可読な理由で、一部の失敗時にのみ含まれます。`application_deleted`：APIキーが削除済みのアプリケーションに属しています。",
                      "example": "application_deleted"
                    }
                  },
                  "required": [
                    "detail"
                  ]
                },
                "examples": {
                  "Forbidden": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "ApplicationDeleted": {
                    "summary": "削除されたアプリケーションのAPIキー",
                    "value": {
                      "detail": "This application was deleted.",
                      "code": "application_deleted"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -s 'https://verification.didit.me/v3/sessions/?status=Approved,In%20Review&date_from=2026-06-01&limit=20' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.sessions.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.sessions.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.ListAutoPaging(ctx, didit.SessionsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.sessions().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->sessions->list() as $item) {\n    print_r($item);\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Sessions.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/share/": {
      "post": {
        "summary": "完了した認証セッションの共有トークンを発行",
        "description": "特定のDiditアプリケーションがこの完了済みセッションをインポートできるようにする、有効期間の短いJWTを発行します。`POST /v3/session/import-shared/`と組み合わせて使用します。",
        "operationId": "post_v3_session_share",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "share",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "responses": {
          "200": {
            "description": "共有トークンが発行されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "share_token": {
                      "type": "string",
                      "description": "HS256で署名されたJWT。対象のアプリケーションで、[`POST /v3/session/import-shared/`](/sessions-api/import-shared-session)に`share_token`としてそのまま渡してください。",
                      "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
                    },
                    "for_application_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "トークンが紐づく対象アプリケーションのUUIDをそのまま返します。",
                      "example": "a5f3bca2-46e2-411e-90ef-a580900a57ee"
                    },
                    "session_kind": {
                      "type": "string",
                      "enum": [
                        "user",
                        "business"
                      ],
                      "description": "元のセッションがユーザー認証(KYC)セッションか法人確認(KYB)セッションか。"
                    }
                  }
                },
                "examples": {
                  "User session": {
                    "summary": "KYCセッションを共有する",
                    "value": {
                      "share_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uX2lkIjoiMjBiYjNjM2ItNjE0Ni00MzlmLTg0YTQtYmQzMGQwMGFjNmEyIiwiZnJvbV9hcHBsaWNhdGlvbl9pZCI6ImRiZDIwZTM0LTQyZTktNGYyYy1iYTkxLWNmMDc2MjAxNmY2NCIsImZvcl9hcHBsaWNhdGlvbl9pZCI6ImE1ZjNiY2EyLTQ2ZTItNDExZS05MGVmLWE1ODA5MDBhNTdlZSIsImlhdCI6MTc1MzYzMDY2NiwiZXhwIjoxNzUzNjM0MjY2fQ.JJ9pNE_hqZsOtbR0XYZIWw4JzidjdEl279iUrsIkhGE",
                      "for_application_id": "a5f3bca2-46e2-411e-90ef-a580900a57ee",
                      "session_kind": "user"
                    }
                  },
                  "Business session": {
                    "summary": "KYBセッションを共有する",
                    "value": {
                      "share_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
                      "for_application_id": "a5f3bca2-46e2-411e-90ef-a580900a57ee",
                      "session_kind": "business"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報がないか無効です。ほとんどのv3エンドポイントとは異なり、このエンドポイントは権限デコレーターを通じて認証を行い、有効なトークンまたはキーが提示されない場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Unauthorized": {
                    "summary": "未認証",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`session_id`のセッションがアプリケーション内に存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "セッションが見つかりません",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドエラーはフィールド名をキーとして返されます。未完了エラーは`detail`キーの下に（配列として）返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Wrong status": {
                    "summary": "ソースセッションが完了していません",
                    "value": {
                      "detail": [
                        "Only finished sessions (\"Approved\", \"Declined\", \"In Review\") can be shared."
                      ]
                    }
                  },
                  "Target missing": {
                    "summary": "対象のアプリケーションが存在しません",
                    "value": {
                      "for_application_id": [
                        "Target application does not exist."
                      ]
                    }
                  },
                  "Self-share": {
                    "summary": "対象が呼び出し元のアプリケーションです",
                    "value": {
                      "for_application_id": [
                        "Cannot share a session with the same application."
                      ]
                    }
                  },
                  "TTL bounds": {
                    "summary": "ttl_in_secondsが範囲外です",
                    "value": {
                      "ttl_in_seconds": [
                        "Ensure this value is greater than or equal to 60."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報は有効ですが、このアプリケーションに対する`write:sessions`権限がありません。",
            "content": {
              "application/json": {
                "examples": {
                  "No Permission": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    },
                    "summary": "権限がありません"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "トークンを発行する元の検証セッションのUUID。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "for_application_id"
                ],
                "properties": {
                  "for_application_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "トークンを利用するDiditアプリケーションのUUIDです。存在し、削除されておらず、かつ呼び出し元アプリケーションとは異なる必要があります。Business Consoleの**Settings → Application**で確認できます。",
                    "example": "a5f3bca2-46e2-411e-90ef-a580900a57ee"
                  },
                  "ttl_in_seconds": {
                    "type": "integer",
                    "description": "トークンの有効期間(秒)。最小は`60`、最大は`86400`(24時間)です。デフォルトは`3600`(1時間)です。",
                    "minimum": 60,
                    "maximum": 86400,
                    "default": 3600,
                    "example": 3600
                  }
                }
              },
              "example": {
                "for_application_id": "a5f3bca2-46e2-411e-90ef-a580900a57ee",
                "ttl_in_seconds": 7200
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/share/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"for_application_id\": \"a5f3bca2-46e2-411e-90ef-a580900a57ee\",\n    \"ttl_in_seconds\": 7200\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.share(\n    \"11111111-2222-3333-4444-555555555555\",\n    for_application_id=\"a5f3bca2-46e2-411e-90ef-a580900a57ee\",\n    ttl_in_seconds=7200,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.share(\"11111111-2222-3333-4444-555555555555\", {\n  for_application_id: \"a5f3bca2-46e2-411e-90ef-a580900a57ee\",\n  ttl_in_seconds: 7200,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Share(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsShareParams{\n\tForApplicationID: \"a5f3bca2-46e2-411e-90ef-a580900a57ee\",\n\tTTLInSeconds:     didit.Int(7200),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsShareParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().share(\"11111111-2222-3333-4444-555555555555\", SessionsShareParams.builder()\n        .forApplicationId(\"a5f3bca2-46e2-411e-90ef-a580900a57ee\")\n        .ttlInSeconds(7200L)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->share('11111111-2222-3333-4444-555555555555', [\n    'for_application_id' => 'a5f3bca2-46e2-411e-90ef-a580900a57ee',\n    'ttl_in_seconds' => 7200,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.share(\n  \"11111111-2222-3333-4444-555555555555\",\n  for_application_id: \"a5f3bca2-46e2-411e-90ef-a580900a57ee\",\n  ttl_in_seconds: 7200\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ShareAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsShareParams\n{\n    ForApplicationId = \"a5f3bca2-46e2-411e-90ef-a580900a57ee\",\n    TtlInSeconds = 7200,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/import-shared/": {
      "post": {
        "summary": "共有トークンを使用して、認証セッションを自分のアプリケーションに複製する",
        "description": "共有トークンを使用して、KYCまたはKYBセッションを新しい`session_id`で呼び出し元のアプリケーションに複製します。冪等ではありません。トークンは受信者ごとに1回のみ使用できます。",
        "operationId": "post_v3_session_import_shared",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "import_shared",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "responses": {
          "201": {
            "description": "セッションが複製されました。ボディはどちらの種類でもV3の判定ペイロードで、`session_kind`で区別されます。`\"user\"`（KYC）には`id_verifications`、`liveness_checks`、`aml_screenings`などのリスト形式の機能ブロックが含まれ、`\"business\"`（KYB）には`registry_checks`や`key_people_checks`などのブロックが含まれます。どちらにも`shared_from_session`（ソースアプリケーションにおける元のセッションの`session_id`）が含まれます。`trust_review: false`の場合、複製されたセッションの`status`は強制的に`In Review`になります。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionDecision"
                },
                "examples": {
                  "User session imported": {
                    "summary": "複製されたKYCセッション（省略版。実際には完全なV3判定ペイロード）",
                    "value": {
                      "session_id": "11111111-2222-3333-4444-555555555555",
                      "session_kind": "user",
                      "shared_from_session": "99999999-8888-7777-6666-555555555555",
                      "session_number": 43762,
                      "session_url": null,
                      "status": "In Review",
                      "workflow_id": "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                      "vendor_data": "user-1",
                      "created_at": "2026-05-17T08:42:11Z",
                      "expires_at": "2026-05-24T08:42:11Z"
                    }
                  },
                  "Business session imported": {
                    "summary": "複製されたKYBセッション（省略版。実際には完全なV3 KYB判定ペイロード）",
                    "value": {
                      "session_id": "22222222-3333-4444-5555-666666666666",
                      "session_kind": "business",
                      "shared_from_session": "88888888-7777-6666-5555-444444444444",
                      "session_number": 982,
                      "session_url": null,
                      "status": "Approved",
                      "workflow_id": "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                      "vendor_data": "company-1"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー（トークンが無効、期限切れ、対象が誤っている、またはすでに存在しないセッションを参照している）。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Share Token": {
                    "summary": "無効なJWT",
                    "value": {
                      "share_token": [
                        "Invalid share token."
                      ]
                    }
                  },
                  "Expired Share Token": {
                    "summary": "`exp`を過ぎたトークン",
                    "value": {
                      "share_token": [
                        "Share token has expired."
                      ]
                    }
                  },
                  "Wrong audience": {
                    "summary": "このアプリケーションに紐付けられていないトークン",
                    "value": {
                      "share_token": [
                        "This token is not valid for this application."
                      ]
                    }
                  },
                  "Original missing": {
                    "summary": "ソースセッションは削除されました",
                    "value": {
                      "share_token": [
                        "Original session does not exist."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがありません（誤った、失効した、または期限切れのキーの場合は`401`）。または、このソースセッションは呼び出し元のアプリケーションにすでにインポートされています（受信側ごとに引き換えは1回のみ）。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "summary": "アクセス禁止",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Already imported": {
                    "summary": "このソースはすでに一度インポートされています",
                    "value": {
                      "detail": "This session has already been shared with your application."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`workflow_id`が呼び出し元のアプリケーションに属していません。",
            "content": {
              "application/json": {
                "examples": {
                  "Workflow not found": {
                    "summary": "不明なワークフロー",
                    "value": {
                      "detail": "Workflow does not exist for this application."
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "share_token",
                  "trust_review",
                  "workflow_id"
                ],
                "properties": {
                  "share_token": {
                    "type": "string",
                    "description": "[`POST /v3/session/{sessionId}/share/`](/sessions-api/share-session)で発行されたJWT共有トークン。",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
                  },
                  "trust_review": {
                    "type": "boolean",
                    "description": "`true`の場合、複製されたセッションは元のセッションの最終的な`status`を維持します。`false`の場合は強制的に`In Review`になります。",
                    "example": false
                  },
                  "workflow_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "呼び出し元アプリケーション内のワークフローのUUIDです。別のアプリケーションのIDは`404`で拒否されます。",
                    "example": "9f9b1234-aaaa-bbbb-cccc-1234567890ab"
                  },
                  "vendor_data": {
                    "type": "string",
                    "nullable": true,
                    "description": "複製されたセッションの`vendor_data`を任意で上書きします。",
                    "example": "user-1"
                  }
                }
              },
              "example": {
                "share_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
                "trust_review": false,
                "workflow_id": "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                "vendor_data": "user-1"
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/import-shared/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"share_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"trust_review\": false,\n    \"workflow_id\": \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n    \"vendor_data\": \"user-1\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.import_shared(\n    share_token=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    trust_review=False,\n    workflow_id=\"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n    vendor_data=\"user-1\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.importShared({\n  share_token: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  trust_review: false,\n  workflow_id: \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n  vendor_data: \"user-1\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ImportShared(ctx, didit.SessionsImportSharedParams{\n\tShareToken:  \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n\tTrustReview: false,\n\tWorkflowID:  \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n\tVendorData:  didit.String(\"user-1\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsImportSharedParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().importShared(SessionsImportSharedParams.builder()\n        .shareToken(\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\")\n        .trustReview(false)\n        .workflowId(\"9f9b1234-aaaa-bbbb-cccc-1234567890ab\")\n        .vendorData(\"user-1\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->importShared([\n    'share_token' => 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',\n    'trust_review' => false,\n    'workflow_id' => '9f9b1234-aaaa-bbbb-cccc-1234567890ab',\n    'vendor_data' => 'user-1',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.import_shared(\n  share_token: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  trust_review: false,\n  workflow_id: \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n  vendor_data: \"user-1\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ImportSharedAsync(new SessionsImportSharedParams\n{\n    ShareToken = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    TrustReview = false,\n    WorkflowId = \"9f9b1234-aaaa-bbbb-cccc-1234567890ab\",\n    VendorData = \"user-1\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/kyb/search/": {
      "post": {
        "summary": "KYB法人登記の企業検索（スタンドアロン）",
        "operationId": "post_v3_kyb_search",
        "x-didit-sdk": {
          "resource": "kyb",
          "method": "search",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [],
        "description": "会社名、登記番号、またはその両方で公式の法人登記を検索し、候補となる企業を取得します。これは2段階のレジストリフローのステップ1です。**検索**では軽量な候補が返され、続いて`POST /v3/kyb/select/`で候補1件の完全なプロファイルを取得します。\n\n**検索の請求。** 有料の企業データソースを使用した検索が成功すると、候補の件数にかかわらずリクエスト1件あたりUSD 0.50が課金されます。結果が空の場合、失敗した場合、および他のソースのみから提供された結果には課金されません。該当する料金は検索前に確保されます。残高が不足している場合は、コード`insufficient_credits`とともに403が返されます。合意がある場合は契約料金が適用され、契約の検索料金が設定されていない場合は403が返されます。サンドボックスでの検索は無料です。成功した検索を繰り返すと、再度課金される場合があります。コールバックの配信による追加の課金はありません。プロファイルの取得は別途請求されます。この検索料金はv2にも適用されます。候補は常に`fetch_status: \"pending\"`で返されます。企業の完全なデータはselect時にのみ取得（および請求）されます。\n\n**`kyb_response_id`は一時的なものです。** これは検索ごとのハンドルであり、安定した企業IDではありません。検索後は速やかにselectを実行してください。ハンドルを保存するのではなく、再検索して新しいハンドルを取得してください。\n\n**`tier`でプロバイダーチェーンを選択します。** `tier`は検索を実行するレジストリのレベルを指定します。指定できる値は`basic`（デフォルト、Liteチェーン）、`shareholders`、`ubo`です。検索ではそのレベルを提供するプロバイダーチェーンが使用されますが、これはLite検索が参照するチェーンと常に同じとは限りません。そのため、Lite検索の結果が空であっても、レジストリにその企業が登録されていない証拠にはなりません。必要なレベルで再度検索してください。指定したレベルを提供していない国では、そのレベルまでの範囲で提供されている最も高いレベルで検索されます。候補は、そのレベルを提供するエンドポイントから取得してください。`POST /v3/kyb/select/`（Lite）、`POST /v3/kyb/shareholders/`、または`POST /v3/kyb/ubo/`です。\n\n**認証。** `POST /v3/kyb/search/`（および`/v2/`）では、アプリケーションのAPIキーを`x-api-key`ヘッダーで渡します。ホスト型の`POST /v1/kyb/search/`は、ホスト型検証フローが呼び出すセッション認証のルートです。APIキーに対しては`403`を返し、`tier`は受け付けません。チェーンはワークフローのKYBレジストリ設定によって選択されます。\n\n**2つのモード。**\n- *同期（デフォルト）：* APIは検索が完了するまでレジストリをポーリングし、最終的な候補リストを返します（`search_resolved: true`）。\n- *非同期：* `webhook_url`を渡すと、APIはすぐにレスポンスを返します（通常は`search_status: \"pending\"`と空の候補リスト）。その後、レジストリの処理が完了すると、指定したURLに`kyb.registry_search.resolved`コールバックをPOSTします。コールバックの本文は`{\"event_id\", \"event_type\": \"kyb.registry_search.resolved\", \"request_id\", \"vendor_data\", \"metadata\", \"search_status\", \"search_resolved\", \"kyb_registry\", \"timestamp\", \"created_at\"}`です。コールバック内の`timestamp`と`created_at`は、このエンドポイントのISO形式の`created_at`とは異なり、エポック秒の整数である点に注意してください。また、コールバックは**署名なし**で送信されます（ヘッダー`X-Didit-Unsigned-Callback: true`、`X-Signature`なし）。\n\n**国コード。** ISO 3166-1 alpha-2（`GB`、`DE`）に加え、レジストリが地域単位の場合は`XX-YY`形式の地域区分コードを使用します。例：カリフォルニア州は`US-CA`。\n\n**サンドボックス。** サンドボックスアプリケーションのキーでは、どのレジストリにも接続せずに固定の候補が1件返されます。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "country_code"
                ],
                "properties": {
                  "country_code": {
                    "type": "string",
                    "maxLength": 10,
                    "description": "検索する法人登記の国を示すISO 3166-1 alpha-2コード。例: `GB`。法人登記が州や省のレベルで運営されている場合は、ISO 3166-2の地域区分コードを`XX-YY`の形式で付加します。`US-CA`はカリフォルニア州の登記を検索します。米国の検索では常に地域区分の指定が必要で、`US`のみの指定は拒否されます。大文字と小文字は区別されず、大文字に正規化されます。",
                    "example": "GB"
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "検索する会社名。`name`または`registration_number`のいずれかが必須です。",
                    "example": "Tesco"
                  },
                  "registration_number": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "検索する登記番号。`name`または`registration_number`のいずれかが必須です。"
                  },
                  "tier": {
                    "type": "string",
                    "enum": [
                      "basic",
                      "shareholders",
                      "ubo"
                    ],
                    "default": "basic",
                    "description": "この検索を実行するプロバイダーチェーンの登記レベル。`basic`（デフォルト）はその国のLiteチェーンを検索し、`shareholders`と`ubo`はそのレベルの所有構造チェーンを検索します。所有構造チェーンは別の情報源である場合があるため、Lite検索で結果が空でも、登記所にその企業が存在しないことの証明にはなりません。指定したレベルを提供していない国では、そのレベルまでの範囲で提供されている最上位のレベルで検索されます。候補は、検索したレベルを提供するエンドポイントから取得してください: `POST /v3/kyb/select/`（Lite）、`POST /v3/kyb/shareholders/`または`POST /v3/kyb/ubo/`。",
                    "example": "basic"
                  },
                  "search_type": {
                    "type": "string",
                    "enum": [
                      "contains"
                    ],
                    "default": "contains",
                    "description": "法人登記検索で適用される名前照合方式です。受け付けられる値は`contains`のみです。検索の背後にあるどの法人登記ソースも前方一致モードやあいまい一致モードを提供していないため、`start_with`と`fuzzy`は`400`（`not a valid choice`）で拒否されます。"
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "この照会に対するお客様側の識別子です。そのまま返され、Webhookコールバックに含まれます。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "自由形式のJSON。そのまま返され、Webhookコールバックにも含まれます。"
                  },
                  "webhook_url": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 500,
                    "description": "検索を非同期モードに切り替えます。APIは即座にレスポンスを返し、候補リストの準備ができると、署名なしの`kyb.registry_search.resolved`コールバックをこのURLにPOSTします。"
                  }
                }
              },
              "example": {
                "country_code": "GB",
                "name": "Tesco",
                "search_type": "contains",
                "vendor_data": "company-1234"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/kyb/search/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"country_code\": \"GB\",\n    \"name\": \"Tesco\",\n    \"search_type\": \"contains\",\n    \"vendor_data\": \"company-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.kyb.search(\n    country_code=\"GB\",\n    name=\"Tesco\",\n    search_type=\"contains\",\n    vendor_data=\"company-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.kyb.search({\n  country_code: \"GB\",\n  name: \"Tesco\",\n  search_type: \"contains\",\n  vendor_data: \"company-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.Search(ctx, didit.KYBSearchParams{\n\tCountryCode: \"GB\",\n\tName:        didit.String(\"Tesco\"),\n\tSearchType:  didit.Some(didit.KYBSearchParamsSearchType(\"contains\")),\n\tVendorData:  didit.String(\"company-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.KybSearchParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.kyb().search(KybSearchParams.builder()\n        .countryCode(\"GB\")\n        .name(\"Tesco\")\n        .searchType(KybSearchParams.SearchType.of(\"contains\"))\n        .vendorData(\"company-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->kyb->search([\n    'country_code' => 'GB',\n    'name' => 'Tesco',\n    'search_type' => 'contains',\n    'vendor_data' => 'company-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.kyb.search(\n  country_code: \"GB\",\n  name: \"Tesco\",\n  search_type: \"contains\",\n  vendor_data: \"company-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Kyb.SearchAsync(new KybSearchParams\n{\n    CountryCode = \"GB\",\n    Name = \"Tesco\",\n    SearchType = new KybSearchParamsSearchType(\"contains\"),\n    VendorData = \"company-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "検索を受け付けました。同期モードでは解決済みの候補リストが返されます。Webhookモードではすぐにレスポンスが返され（多くの場合`search_status: \"pending\"`）、最終的なリストは`kyb.registry_search.resolved`コールバックで配信されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`webhook_url`を指定した場合：保存された検索リクエストのID。`kyb.registry_search.resolved`コールバックで`request_id`として返されます。`webhook_url`を指定しない場合：一時的な相関UUIDです（検索は保存されません）。"
                    },
                    "kyb_registry": {
                      "$ref": "#/components/schemas/KYBRegistrySearchResults"
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`をそのまま返します。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "description": "送信した`metadata`のエコー。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "examples": {
                  "Resolved search": {
                    "summary": "同期モード: 最終候補リスト",
                    "value": {
                      "request_id": "0c7e9a40-3a13-4f7e-8a44-9d2e2f1c5b6a",
                      "kyb_registry": {
                        "companies": [
                          {
                            "kyb_response_id": "69aeeb95febb0f1704042259",
                            "name": "Tesco PLC",
                            "registration_number": "00445790",
                            "status": "active",
                            "type": "Public Limited Company",
                            "risk_level": null,
                            "fetch_status": "pending"
                          },
                          {
                            "kyb_response_id": "69aeeb95febb0f170404225a",
                            "name": "E-TESCO LTD",
                            "registration_number": "15168476",
                            "status": "active",
                            "type": "Private Limited Company",
                            "risk_level": null,
                            "fetch_status": "pending"
                          }
                        ],
                        "pagination": {
                          "total": 2,
                          "page": 1,
                          "per_page": 25
                        },
                        "search_status": "resolved",
                        "search_resolved": true
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:40:00.000000+00:00"
                    }
                  },
                  "Pending search (webhook mode)": {
                    "summary": "`webhook_url`が指定されています。候補はkyb.registry_search.resolvedコールバックで届きます",
                    "value": {
                      "request_id": "5f2d8c1b-7e4a-4b9c-9f0d-3a6e8c2b1d4f",
                      "kyb_registry": {
                        "companies": [],
                        "pagination": {
                          "total": 0,
                          "page": 1,
                          "per_page": 25
                        },
                        "search_status": "pending",
                        "search_resolved": false
                      },
                      "vendor_data": "company-1234",
                      "metadata": {
                        "source": "onboarding"
                      },
                      "created_at": "2026-06-11T10:41:00.000000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールド単位の問題はDRFの標準エンベロープを使用します。名称/登記番号のルールは`non_field_errors`の下に報告されます。登記所が対応していない国の場合は、`code: kyb_registry_country_unsupported`とともに`400`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing search criteria": {
                    "summary": "`name`と`registration_number`のどちらも指定されていません",
                    "value": {
                      "non_field_errors": [
                        "Either 'name' or 'registration_number' is required."
                      ]
                    }
                  },
                  "Invalid country_code": {
                    "summary": "`XX`（alpha-2）または`XX-YY`の行政区画形式である必要があります",
                    "value": {
                      "country_code": [
                        "country_code must be a 2-letter ISO code."
                      ]
                    }
                  },
                  "Invalid search_type": {
                    "summary": "`contains`のみ受け付けます",
                    "value": {
                      "search_type": [
                        "\"start_with\" is not a valid choice."
                      ]
                    }
                  },
                  "Invalid webhook_url": {
                    "summary": "`webhook_url`は有効なURLである必要があります",
                    "value": {
                      "webhook_url": [
                        "Enter a valid URL."
                      ]
                    }
                  },
                  "Country not covered": {
                    "summary": "この国をカバーする法人登記はありません",
                    "value": {
                      "detail": "Company registry search is not available for this country. Enter the company details manually to continue.",
                      "code": "kyb_registry_country_unsupported"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。また、該当する検索料金を賄えない場合（`code: \"insufficient_credits\"`）や、契約上の検索料金が設定されていない場合にも、検索前に返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過したか、検索の利用枠を使い切りました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有し、`X-RateLimit-*`および`Retry-After`ヘッダーが返されます。これとは別に、有料の法人登記検索はアプリケーションごとに1時間あたり600件に制限されています。これを超えるとレスポンスは`code: kyb_registry_search_limit_reached`を伴う`429`になりますが、無料ソースのみで処理される検索は引き続き利用できます。しばらく待ってから再度検索してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  },
                  "Search allowance spent": {
                    "summary": "直近1時間に600件を超える有料検索",
                    "value": {
                      "detail": "The maximum number of company registry searches for this session has been reached. Enter the company details manually to continue.",
                      "code": "kyb_registry_search_limit_reached"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "KYB登記プロバイダーが一時的に利用できません（上流の登記機関からの5xxレスポンス、タイムアウト、または接続失敗）。この検索は課金されません。後で再試行してください。Diditのホスト型検証フローでは、再試行のみのエラーではなく、企業情報の手動入力がユーザーに自動的に提示されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Registry provider outage": {
                    "summary": "法人登記のプロバイダーが検索に応答しませんでした",
                    "value": {
                      "detail": "The KYB registry provider is temporarily unavailable. Please try again shortly.",
                      "code": "kyb_registry_provider_unavailable"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/kyb/select/": {
      "post": {
        "summary": "KYB法人登記の企業選択、Liteレベル（スタンドアロン）",
        "operationId": "post_v3_kyb_select",
        "x-didit-sdk": {
          "resource": "kyb",
          "method": "select",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [],
        "description": "`POST /v3/kyb/search/`が返した1つの候補の**Lite**登記プロフィールを取得します。会社の詳細、登記住所、識別子、ステータス、事業活動、役員に加え、登記所から返された生のペイロードが含まれます。株主と最終的な実質的支配者は、`POST /v3/kyb/shareholders/`と`POST /v3/kyb/ubo/`で提供されます。\n\n**検索との対応付け。**同じアプリケーションの検索で返された候補の`kyb_response_id`を、そのまま渡してください。このハンドルは一時的なもので、その検索に限定されます。速やかに選択し、ハンドルを保存するのではなく、再検索して新しいハンドルを取得してください。\n\n**請求。**選択ごとに、その国のLite料金で請求されます（検索料金は別途）。[KYB登記の料金](/ja/getting-started/kyb-registry-pricing)を参照してください。残高は登記所への呼び出し前に確認され（不足時は`403`）、料金は作成された企業セッションに対して記録されます。\n\n**永続化は必須です。**請求と取得を追跡できるよう、選択のたびに企業セッション（そのIDが`request_id`）が作成され、コンソールに表示されます。`save_api_request`は対称性のために受け付けられますが、`true`（デフォルト）である必要があります。`false`を送信すると`400`が返ります。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KYBRegistryCandidateRequest"
              },
              "example": {
                "kyb_response_id": "69aeeb95febb0f1704042259",
                "vendor_data": "company-1234"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/kyb/select/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"kyb_response_id\": \"69aeeb95febb0f1704042259\",\n    \"vendor_data\": \"company-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.kyb.select(\n    kyb_response_id=\"69aeeb95febb0f1704042259\",\n    vendor_data=\"company-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.kyb.select({\n  kyb_response_id: \"69aeeb95febb0f1704042259\",\n  vendor_data: \"company-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.Select(ctx, didit.KYBRegistryCandidateRequest{\n\tKYBResponseID: \"69aeeb95febb0f1704042259\",\n\tVendorData:    didit.String(\"company-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.KYBRegistryCandidateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.kyb().select(KYBRegistryCandidateRequest.builder()\n        .kybResponseId(\"69aeeb95febb0f1704042259\")\n        .vendorData(\"company-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->kyb->select([\n    'kyb_response_id' => '69aeeb95febb0f1704042259',\n    'vendor_data' => 'company-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.kyb.select(\n  kyb_response_id: \"69aeeb95febb0f1704042259\",\n  vendor_data: \"company-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Kyb.SelectAsync(new KYBRegistryCandidateRequest\n{\n    KybResponseId = \"69aeeb95febb0f1704042259\",\n    VendorData = \"company-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "企業情報が取得され、請求されました。`kyb_registry`にはプロフィール全体が含まれます。`data_resolved`を確認してください。`false`の場合は登記側でまだ処理中であり、保存されたレコードは処理が完了すると自動的に補完されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "この取得のために作成された企業セッションのID。レスポンスの後に登記情報が確定した場合も、保存されたレコード（コンソールで確認可能）は更新され続けます。"
                    },
                    "registry_tier_requested": {
                      "type": "string",
                      "enum": [
                        "basic",
                        "shareholders",
                        "ubo"
                      ],
                      "description": "このエンドポイントが提供するレベル: `basic`（Lite、一部対象のみ）、`shareholders`、`ubo`。"
                    },
                    "registry_tier_delivered": {
                      "type": "string",
                      "enum": [
                        "basic",
                        "shareholders",
                        "ubo"
                      ],
                      "description": "実際に提供され、請求されたレベル。その国の登記機関が所有構造データを保持していない場合、または登記機関にこの企業の所有構造の記録がない場合は、リクエストしたレベルより低くなります。"
                    },
                    "kyb_registry": {
                      "type": "object",
                      "description": "法人登記上の企業の完全なプロフィール。",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "description": "この企業レコードに対するDiditのIDです。"
                        },
                        "node_id": {
                          "type": "string",
                          "example": "feature_kyb_registry"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "Not Finished",
                            "Approved",
                            "Declined",
                            "In Review"
                          ],
                          "description": "登記チェックに対するDiditの評価です（例：企業が登記上アクティブでない場合、または所有構造データを導出できなかった場合は`In Review`）。"
                        },
                        "registry_status": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "active",
                            "dissolved",
                            "deregistered",
                            "see full details",
                            "authorised",
                            "appointed representative",
                            "unauthorised",
                            "inactive",
                            "no longer authorised",
                            "closed",
                            "struck off"
                          ],
                          "description": "登記機関が報告した、正規化された企業ステータス。"
                        },
                        "data_resolved": {
                          "type": "boolean",
                          "description": "法人登記から完全なプロファイルが返されると`true`になります。ポーリング後も法人登記側でまだ処理中だった場合は`false`です。法人登記側の処理が完了すると、保存されたレコードは自動的に補完されます。"
                        },
                        "company_name": {
                          "type": "string",
                          "example": "Tesco PLC"
                        },
                        "registration_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "00445790"
                        },
                        "country_code": {
                          "type": "string",
                          "description": "ISO 3166-1 alpha-2。",
                          "example": "GB"
                        },
                        "region": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記機関が地域単位の場合の地域区分コード（例: `US-CA`の場合は`CA`）。それ以外の場合は空です。"
                        },
                        "company_type": {
                          "type": "string",
                          "nullable": true,
                          "example": "Public Limited Company"
                        },
                        "incorporation_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "example": "1947-11-27"
                        },
                        "registered_address": {
                          "type": "string",
                          "nullable": true,
                          "example": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA"
                        },
                        "tax_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "GB412 8925 93"
                        },
                        "risk_level": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記所が報告したリスクレベル（取得できる場合）。"
                        },
                        "verification_status": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記上の認証ステータス（取得できる場合）。"
                        },
                        "is_from_registry": {
                          "type": "boolean",
                          "description": "このエンドポイントでは常に`true`です。プロファイルは公式の登記簿から取得されています。"
                        },
                        "fetch_status": {
                          "type": "string",
                          "enum": [
                            "pending",
                            "resolved"
                          ],
                          "description": "登記取得のライフサイクル。`data_resolved`に反映されます。"
                        },
                        "alternative_names": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合の、別名、商号、旧社名、または原語表記の企業名（テキスト）です。"
                        },
                        "nature_of_business": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合、事業内容の説明または分類コード。"
                        },
                        "registered_capital": {
                          "type": "string",
                          "nullable": true
                        },
                        "registered_capital_amount": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合の、文字列形式の10進数の金額。"
                        },
                        "registered_capital_currency": {
                          "type": "string",
                          "nullable": true,
                          "description": "ISO 4217通貨コード（報告されている場合）。"
                        },
                        "website": {
                          "type": "string",
                          "nullable": true,
                          "example": "https://www.tesco.com/"
                        },
                        "email": {
                          "type": "string",
                          "nullable": true,
                          "example": "customer.service@tesco.co.uk"
                        },
                        "phone": {
                          "type": "string",
                          "nullable": true,
                          "example": "03301231688"
                        },
                        "legal_entity_identifier": {
                          "type": "string",
                          "nullable": true,
                          "description": "LEI（報告されている場合）。"
                        },
                        "location_of_registration": {
                          "type": "string",
                          "nullable": true,
                          "description": "企業が登録されている登記所・法域（報告されている場合）。"
                        },
                        "vat_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "EUのVAT番号。ホスト型の登記ステップで収集された場合、またはその後に編集された場合に設定されます。選択時点では通常まだ設定されていません。VATおよび納税者番号の検証は、エンドユーザーがホスト型フローで登記ステップを送信した時点で実行されます。"
                        },
                        "vat_validation_status": {
                          "type": "string",
                          "enum": [
                            "valid",
                            "invalid",
                            "format_valid",
                            "invalid_format",
                            "could_not_validate",
                            "not_applicable"
                          ],
                          "description": "登記の送信時に、VAT番号（ない場合は`tax_number`）を検証した結果。`valid` / `invalid`：その国の公式登記（EU VIES、ノルウェー、スイス、ブラジル、コロンビア、コスタリカ、エクアドル、パラグアイ。ポーランドは国内のVAT登録簿でも判定）によって判定されます。`format_valid` / `invalid_format`：照会できる登記がない場合に、その国の形式およびチェックディジットのルールによって判定されます。`could_not_validate`：登記を利用できませんでした。`not_applicable`：番号がない、登記もルールもない国である、またはサンドボックスのセッションです。"
                        },
                        "vat_validated_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "確認された番号で、ソース側で認識されている形式のもの（例: フランスのSIRENやオランダのRSINから導出されたVAT番号）。確認が実行されなかった場合は`null`です。"
                        },
                        "vat_validation_source": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "eu_vies",
                            "pl_vat_white_list",
                            "no_brreg",
                            "ch_uid_register",
                            "br_receita_federal",
                            "co_rues",
                            "cr_hacienda",
                            "ec_sri",
                            "py_dnit",
                            "format_rules",
                            null
                          ],
                          "description": "`vat_validation_status`を決定したソース。公式の登記簿、または`format_rules`です。チェックが実行されなかった場合は`null`です。"
                        },
                        "vat_validated_name": {
                          "type": "string",
                          "nullable": true,
                          "description": "番号を検証したソースに登録されている名義（ソースが開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                        },
                        "vat_validated_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "番号を検証した情報源に登録されている住所（情報源が開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                        },
                        "vat_checked_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "チェックの日時。チェックが実行されなかった場合は`null`です。"
                        },
                        "financial_summary": {
                          "type": "object",
                          "nullable": true,
                          "description": "登記所が報告した株式・資本の詳細（通貨、発行済株式総数、株式の種類）（取得できる場合）。"
                        },
                        "officers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "uuid": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "name": {
                                "type": "string",
                                "example": "MELISSA BETHELL"
                              },
                              "designation": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記上の生の役職名（例: `Director`、`Secretary`）。"
                              },
                              "role": {
                                "type": "string",
                                "description": "役職名から導出された正規化された役割。モデルは17種類の値をすべて持ちますが、このエンドポイントでの登記情報の解析では通常、director、non_executive_director、secretary、chairman、company_officerのいずれかが出力されます。",
                                "enum": [
                                  "director",
                                  "non_executive_director",
                                  "secretary",
                                  "chairman",
                                  "ubo",
                                  "shareholder",
                                  "representative",
                                  "founder",
                                  "legal_advisor",
                                  "authorized_signatory",
                                  "trustee",
                                  "beneficiary",
                                  "company_officer",
                                  "settlor",
                                  "protector",
                                  "investor",
                                  "other"
                                ]
                              },
                              "nationality": {
                                "type": "string",
                                "nullable": true
                              },
                              "is_active": {
                                "type": "boolean",
                                "description": "登記簿でその任命が辞任済みとされている場合は`false`。"
                              },
                              "kyc_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "Approved",
                                  "Declined",
                                  "Pending"
                                ],
                                "description": "この役員に対してKYCセッションが開始された場合、そのセッションのステータスです。それ以外の場合は`null`です。"
                              },
                              "kyc_session_url": {
                                "type": "string",
                                "nullable": true,
                                "description": "関連するKYCセッションが存在する場合、その認証URL。"
                              },
                              "first_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記機関が明示的に報告した場合の名。氏名からは推測されません。"
                              },
                              "last_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿で明示的に報告されている場合の姓。"
                              },
                              "address": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿に記載されている役員の住所。"
                              },
                              "appointment_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "役員の就任日。",
                                "format": "date"
                              },
                              "termination_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "役職の終了日（報告されている場合）。",
                                "format": "date"
                              },
                              "date_of_birth": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記で報告された完全な生年月日。生年または生年月のみが判明している場合はnullです。",
                                "format": "date"
                              },
                              "date_of_birth_year": {
                                "type": "integer",
                                "nullable": true,
                                "minimum": 1,
                                "maximum": 9999,
                                "description": "登記所が報告した生まれ年。完全な日付が取得できない場合も含みます。"
                              },
                              "date_of_birth_month": {
                                "type": "integer",
                                "nullable": true,
                                "minimum": 1,
                                "maximum": 12,
                                "description": "登記所が報告した生まれ月。年のみ判明している場合はnullです。"
                              }
                            }
                          },
                          "description": "登記から抽出された取締役、秘書役、その他の役員です。"
                        },
                        "beneficial_owners": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "uuid": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "name": {
                                "type": "string"
                              },
                              "first_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "last_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "entity_type": {
                                "type": "string",
                                "enum": [
                                  "person",
                                  "company"
                                ],
                                "description": "所有者が自然人か法人か。"
                              },
                              "roles": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "正規化された役割（例: `ubo`、`shareholder`）。"
                              },
                              "ownership_min_shares": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿が報告する所有比率帯の下限（例: `25%`）。"
                              },
                              "ownership_max_shares": {
                                "type": "string",
                                "nullable": true,
                                "description": "法人登記が報告した所有構造における比率範囲の上限値。"
                              },
                              "is_active": {
                                "type": "boolean"
                              },
                              "kyc_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "Approved",
                                  "Declined",
                                  "Pending"
                                ]
                              },
                              "kyc_session_url": {
                                "type": "string",
                                "nullable": true
                              },
                              "effective_ownership_percent": {
                                "type": "number",
                                "nullable": true,
                                "description": "解析済みの所有割合(上限値、ない場合は下限値)。"
                              },
                              "company_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "registration_number": {
                                "type": "string",
                                "nullable": true
                              },
                              "country_of_birth": {
                                "type": "string",
                                "nullable": true
                              },
                              "email": {
                                "type": "string",
                                "nullable": true
                              },
                              "nationality": {
                                "type": "string",
                                "nullable": true
                              },
                              "designation": {
                                "type": "string",
                                "nullable": true
                              },
                              "voting_min_shares": {
                                "type": "string",
                                "nullable": true
                              },
                              "voting_max_shares": {
                                "type": "string",
                                "nullable": true
                              },
                              "date_of_birth": {
                                "type": "string",
                                "nullable": true,
                                "description": "報告されている場合の完全な生年月日。",
                                "format": "date"
                              },
                              "appointment_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "報告されている場合の任命日。",
                                "format": "date"
                              },
                              "shareholding": {
                                "$ref": "#/components/schemas/KYBRegistryShareholding"
                              }
                            }
                          },
                          "description": "登記簿から抽出された実質的支配者または重要な支配権を有する者です。登記簿が所有構造を公開していない場合は空になることがあります。"
                        },
                        "addresses": {
                          "type": "array",
                          "nullable": true,
                          "description": "登記簿に記載されているすべての住所を、1つの標準形式で示します。記載がない場合はnullです。",
                          "items": {
                            "$ref": "#/components/schemas/KYBRegistryAddress"
                          }
                        },
                        "industries": {
                          "type": "array",
                          "nullable": true,
                          "description": "登記上で会社が分類されている事業活動。単一の正規化された形式です。登記に記載がない場合はnullです。",
                          "items": {
                            "$ref": "#/components/schemas/KYBRegistryIndustry"
                          }
                        },
                        "accounts": {
                          "type": "object",
                          "nullable": true,
                          "additionalProperties": true,
                          "description": "登記申告の日付（取得できる場合）。年次報告書と株主総会にはlast_annual_return_dateとlast_agm_dateを使用し、これらは財務諸表とは区別されます。"
                        },
                        "registry_data": {
                          "$ref": "#/components/schemas/KYBRegistryData"
                        },
                        "user_provided_data": {
                          "type": "object",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です（エンドユーザーが登記データを編集する際に、ホスト型のKYBフローで使用されます）。"
                        },
                        "confirmed_by_user_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です。"
                        },
                        "last_console_edit_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "後でコンソールのレビュアーがレコードを編集したときに設定されます。"
                        },
                        "is_editable": {
                          "type": "boolean",
                          "description": "登記情報から取得したデータをホスト型フローやコンソールで引き続き編集できるかどうか。"
                        },
                        "registry_tier_delivered": {
                          "type": "string",
                          "enum": [
                            "basic",
                            "shareholders",
                            "ubo"
                          ],
                          "description": "トップレベルの`registry_tier_delivered`と同じ。"
                        },
                        "registry_ownership_status": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "not_requested",
                            "delivered",
                            "not_held",
                            "unavailable"
                          ],
                          "description": "所有構造データが返された場合は`delivered`、所有構造の登記簿が応答したもののこの企業が掲載されていない場合は`not_held`（`registry_data.ownership_error`を参照）、所有構造のレベルがリクエストされたものの登記簿にこの企業のデータがなかったか照会できなかった場合は`unavailable`（`registry_data.ownership_error`を参照）、Liteレベルでは`not_requested`です。"
                        },
                        "ownership": {
                          "$ref": "#/components/schemas/KYBRegistryOwnership"
                        },
                        "registry_tier": {
                          "type": "string",
                          "nullable": true,
                          "description": "ワークフローが指定した登記のレベル: `basic`、`shareholders`または`ubo`。`ownership.tier_requested`にも含まれます。"
                        },
                        "registry_monitoring": {
                          "type": "object",
                          "nullable": true,
                          "description": "その企業の最新の登記モニターです。存在しない場合は`null`です。",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid"
                            },
                            "status": {
                              "type": "string"
                            },
                            "unavailable_reason": {
                              "type": "string",
                              "nullable": true
                            },
                            "enrolled_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "cancelled_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "last_bill_date": {
                              "type": "string",
                              "format": "date",
                              "nullable": true
                            },
                            "next_bill_date": {
                              "type": "string",
                              "format": "date",
                              "nullable": true
                            },
                            "last_event_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "events_count": {
                              "type": "integer"
                            },
                            "watched_fields": {
                              "description": "モニターが監視する企業フィールド。"
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`をそのまま返します。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "description": "送信した`metadata`のエコー。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "examples": {
                  "Resolved company": {
                    "summary": "登記上の完全なプロフィール（役員リストは簡潔にするため省略）",
                    "value": {
                      "request_id": "9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e",
                      "kyb_registry": {
                        "uuid": "f1e2d3c4-b5a6-4789-9c0d-1e2f3a4b5c6d",
                        "node_id": "feature_kyb_registry",
                        "status": "In Review",
                        "registry_status": "active",
                        "data_resolved": true,
                        "company_name": "Tesco PLC",
                        "registration_number": "00445790",
                        "country_code": "GB",
                        "region": "",
                        "company_type": "Public Limited Company",
                        "incorporation_date": "1947-11-27",
                        "registered_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
                        "tax_number": "GB412 8925 93",
                        "risk_level": "low risk",
                        "verification_status": "verified",
                        "is_from_registry": true,
                        "fetch_status": "resolved",
                        "alternative_names": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
                        "nature_of_business": null,
                        "registered_capital": null,
                        "registered_capital_amount": null,
                        "registered_capital_currency": null,
                        "website": "https://www.tesco.com/",
                        "email": "customer.service@tesco.co.uk",
                        "phone": "03301231688",
                        "legal_entity_identifier": null,
                        "location_of_registration": null,
                        "financial_summary": {
                          "currency": "Pound (£)",
                          "total_number_of_shares": "8174378721",
                          "meta_detail": {
                            "Class_Of_Share": "Ordinary"
                          }
                        },
                        "officers": [
                          {
                            "uuid": "a1b2c3d4-e5f6-4789-9a0b-1c2d3e4f5a6b",
                            "name": "CHRISTOPHER JON TAYLOR",
                            "designation": "Secretary",
                            "role": "secretary",
                            "nationality": null,
                            "is_active": true,
                            "kyc_status": null,
                            "kyc_session_url": null
                          },
                          {
                            "uuid": "b2c3d4e5-f6a7-4890-8b1c-2d3e4f5a6b7c",
                            "name": "MELISSA BETHELL",
                            "designation": "Director",
                            "role": "director",
                            "nationality": "British",
                            "is_active": true,
                            "kyc_status": null,
                            "kyc_session_url": null
                          }
                        ],
                        "beneficial_owners": [],
                        "addresses": [
                          {
                            "address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
                            "type": "legal_entity_registry_address",
                            "description": "registered office address"
                          }
                        ],
                        "industries": null,
                        "accounts": {
                          "last_account": "26 February 2025",
                          "next_account": "26 February 2026",
                          "due_by_date": "26 August 2026"
                        },
                        "registry_data": {},
                        "user_provided_data": null,
                        "confirmed_by_user_at": null,
                        "last_console_edit_at": null,
                        "is_editable": true
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:45:00.000000+00:00"
                    }
                  },
                  "Pending (registry still resolving)": {
                    "summary": "ポーリング後も保留のままのセレクト。フィールドが少なく、サーバー側で自動補完されます",
                    "value": {
                      "request_id": "9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e",
                      "kyb_registry": {
                        "uuid": "7c0a4f7e-2b1d-4f6a-9c3e-8d5b2a1f0e9d",
                        "node_id": "feature_kyb_registry",
                        "status": "Not Finished",
                        "registry_status": null,
                        "data_resolved": false,
                        "company_name": "Tesco PLC",
                        "registration_number": "00445790",
                        "country_code": "GB",
                        "region": null,
                        "company_type": null,
                        "incorporation_date": null,
                        "registered_address": null,
                        "tax_number": null,
                        "risk_level": null,
                        "verification_status": null,
                        "is_from_registry": true,
                        "fetch_status": "pending",
                        "alternative_names": null,
                        "nature_of_business": null,
                        "registered_capital": null,
                        "registered_capital_amount": null,
                        "registered_capital_currency": null,
                        "website": null,
                        "email": null,
                        "phone": null,
                        "legal_entity_identifier": null,
                        "location_of_registration": null,
                        "financial_summary": {},
                        "officers": [],
                        "beneficial_owners": [],
                        "addresses": null,
                        "industries": null,
                        "accounts": null,
                        "registry_data": {},
                        "user_provided_data": null,
                        "confirmed_by_user_at": null,
                        "last_console_edit_at": null,
                        "is_editable": true
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:45:00.000000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールド単位の問題はDRFの標準エンベロープを使用します。登記所が対応していない国の場合は、`code: kyb_registry_country_unsupported`とともに`400`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing kyb_response_id": {
                    "summary": "`kyb_response_id`は必須です",
                    "value": {
                      "kyb_response_id": [
                        "This field is required."
                      ]
                    }
                  },
                  "save_api_request=false rejected": {
                    "summary": "セレクトは常に保存されます",
                    "value": {
                      "save_api_request": [
                        "KYB registry select must be saved so billing and retrieval can be tracked."
                      ]
                    }
                  },
                  "Country not covered": {
                    "summary": "この国をカバーする法人登記はありません",
                    "value": {
                      "detail": "Company registry search is not available for this country. Enter the company details manually to continue.",
                      "code": "kyb_registry_country_unsupported"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、スクリーニングやプロバイダーの呼び出しが行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/passive-liveness/": {
      "post": {
        "summary": "パッシブライブネス",
        "description": "単一の顔画像から、プレゼンテーション攻撃（印刷された写真、画面の再生、マスク、ディープフェイク）を検知します。動画、動作、ユーザー操作は不要です。\n\n**仕組み。** 画像は生体認証モデルで分析され、検出された顔のうち最も大きいものが評価され、ライブネスの`score`（0〜100）が算出されます。`error`重大度の警告が1つでも発生すると、`status`は`Declined`になります：\n- `NO_FACE_DETECTED`：ライブネスモデルが顔を検出できなかった\n- `LOW_LIVENESS_SCORE`：スコアが`face_liveness_score_decline_threshold`（デフォルトは`30`）以下\n- `LIVENESS_FACE_ATTACK`：モデルがプレゼンテーション攻撃を検知した\n- `FACE_IN_BLOCKLIST` / `POSSIBLE_FACE_IN_BLOCKLIST`：顔が顔ブロックリストのエントリと一致した\n\n`MULTIPLE_FACES_DETECTED`は`warning`重大度のシグナルです（却下にはなりません）。`DUPLICATED_FACE` / `POSSIBLE_DUPLICATED_FACE`は、同じ顔が別の承認済みセッションにすでに登場していることを示す`information`重大度のシグナルです（却下になることはありません）。`face_quality`と`face_luminance`（0〜100、null許容）は撮影品質を表します。\n\n**ブロックリストと重複のスクリーニング。** `save_api_request`の有無にかかわらず、**すべての**呼び出しで実行され、検出された顔をアプリケーションの顔検索インデックスと照合します。同じ`vendor_data`を持つ過去の顔はインデックス検索全体から除外されます。そのため、同じユーザーに対してライブネスを再実行しても`DUPLICATED_FACE`はトリガーされません。また、呼び出し元自身の`vendor_data`を持つセッションに由来するブロックリスト登録済みの顔もフラグ付けされません（同じ`vendor_data`の顔については`FACE_IN_BLOCKLIST`のスクリーニングがスキップされます）。\n\n**請求。** `200`レスポンス1件ごとに、Passive Liveness APIのクレジットを1つ消費します（プランのクレジットまたはチャージ残高から支払われます）。残高が不足している場合は、画像処理の前に`403`が返されます。\n\n**セッションの保存と顔の登録（`save_api_request`、デフォルトは`true`）。** `true`の場合、呼び出しはAPIタイプのセッションとして保存され（Business Console、返された`request_id`を使った`GET /v3/session/{sessionId}/decision/`、`status.updated`のWebhook）、参照画像と顔の切り抜きが保存され、検出された顔が**顔検索インデックスに登録**されます。これにより、以降の顔検索の呼び出しや重複チェックでこの顔を照合できます。`false`の場合、呼び出しは1回限りで、何も保存されず、顔も登録されません（ブロックリストと重複のスクリーニングは引き続き実行されます）。\n\n**サンドボックス。** サンドボックスのAPIキーでは、すべての処理と請求がスキップされます。リクエストの検証後（不正な入力には引き続き`400`が返されます）、エンドポイントは固定の`Approved`モックペイロードを返します。セッションは保存されず、クレジットも消費されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない、または無効な場合は`403`（`{\"detail\": \"You do not have permission to perform this action.\"}`）が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`が返されます。",
        "operationId": "post_v3passive-liveness",
        "x-didit-sdk": {
          "resource": "passive_liveness",
          "method": "check",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "user_image"
                ],
                "properties": {
                  "user_image": {
                    "type": "string",
                    "format": "binary",
                    "description": "正面を向いた顔画像（セルフィーなど）。使用可能な拡張子: `tiff`、`jpg`、`jpeg`、`png`、`webp`。最大アップロードサイズ: **5 MB**（これを超えるファイルは`400`で拒否されます）。画像は処理前に自動的に約0.5 MBに圧縮されるため、解像度を非常に高くしても精度は向上しません。画像には被写体を1人だけ含めてください。複数の顔が含まれる場合は最も大きい顔が評価され、`MULTIPLE_FACES_DETECTED`警告が追加されます。"
                  },
                  "face_liveness_score_decline_threshold": {
                    "type": "number",
                    "format": "float",
                    "default": 30,
                    "minimum": 0,
                    "maximum": 100,
                    "description": "ライブネススコアのしきい値（0–100）。算出されたスコアがこの値**以下**の場合、`LOW_LIVENESS_SCORE`警告が出され、`status`が`Declined`に設定されます。デフォルトは`30`です。より厳格ななりすまし対策にするには値を上げてください。0–100の範囲外の値は`400`を返します。",
                    "example": 30
                  },
                  "rotate_image": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、入力を90度ずつ回転させて試し、最も良好に顔を検出できる向きを使用します。EXIFの向き情報がない場合に便利です。レイテンシが増加します。",
                    "example": false
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "`true`（デフォルト）の場合、呼び出しをAPIタイプのセッションとして保存し、顔画像を保存し、`status.updated`Webhookを送信し、検出された顔を顔検索インデックスに登録します。`false`の場合、呼び出しは1回限りで、何も保存されず、顔も登録されません。ブロックリストと重複のスクリーニングは、どちらの場合も実行されます。",
                    "example": true
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "任意の不透明な識別子（ユーザーID、メールアドレス、UUIDなど）です。保存されたセッションに格納され、そのまま返されます。また、同じ`vendor_data`を持つ過去のセッションを重複顔チェックから除外するためにも使用されるため、同じユーザーを再検証しても`DUPLICATED_FACE`は発生しません。",
                    "example": "user-123"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "セッションとともに保存され（`save_api_request=true`の場合）、そのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください。オブジェクトとして解析されます。",
                    "example": {
                      "flow": "withdrawal"
                    }
                  }
                }
              },
              "example": {
                "user_image": "(binary JPEG/PNG selfie)",
                "face_liveness_score_decline_threshold": 30,
                "rotate_image": false,
                "save_api_request": true,
                "vendor_data": "user-123",
                "metadata": {
                  "flow": "withdrawal"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "パッシブライブネスが完了しました。`liveness.score`は、画像に生身の人物が写っていることに対するモデルの0〜100の信頼度です。`error`重大度の警告が発生しない限り、`status`は`Approved`です。なりすましの顔やブロックリストに登録された顔でも`200`が返るため、HTTPコードだけでなく`liveness.status`と`liveness.warnings`を確認してください。`save_api_request=true`の場合、`request_id`は保存されたセッションIDです。",
            "content": {
              "application/json": {
                "examples": {
                  "Approved": {
                    "summary": "実在する顔（警告なし）",
                    "value": {
                      "request_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
                      "liveness": {
                        "status": "Approved",
                        "method": "PASSIVE",
                        "score": 95.0,
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                661,
                                728,
                                1688,
                                2188
                              ],
                              "confidence": 0.732973,
                              "age": 26.91,
                              "gender": "male",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": [],
                        "face_quality": 84.21,
                        "face_luminance": 50.33
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  },
                  "Declined - presentation attack": {
                    "summary": "モデルがなりすまし(印刷物、リプレイ、マスクなど)を検出しました",
                    "value": {
                      "request_id": "f1c8c9b2-d3e4-4f5a-9b8c-7d6e5f4a3b2c",
                      "liveness": {
                        "status": "Declined",
                        "method": "PASSIVE",
                        "score": 12.5,
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                100,
                                120,
                                420,
                                540
                              ],
                              "confidence": 0.81,
                              "age": 30.1,
                              "gender": "female",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": [
                          {
                            "risk": "LOW_LIVENESS_SCORE",
                            "feature": "LIVENESS",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Low liveness score",
                            "long_description": "The liveness check resulted in a low score, indicating potential use of non-live facial representations or poor-quality biometric data."
                          },
                          {
                            "risk": "LIVENESS_FACE_ATTACK",
                            "feature": "LIVENESS",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Liveness Face Attack",
                            "long_description": "The system detected a potential attempt to bypass the liveness check."
                          }
                        ],
                        "face_quality": 72.4,
                        "face_luminance": 48.2
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  },
                  "Declined - face on blocklist": {
                    "summary": "実在する顔だが、ブロックリストのエントリと一致",
                    "value": {
                      "request_id": "0b54a1de-22aa-4e0f-9c84-5a2b1f3c4d5e",
                      "liveness": {
                        "status": "Declined",
                        "method": "PASSIVE",
                        "score": 93.75,
                        "user_image": {
                          "entities": [
                            {
                              "bbox": [
                                40,
                                40,
                                100,
                                100
                              ],
                              "confidence": 0.722082,
                              "age": 27.0,
                              "gender": "male",
                              "race": null
                            }
                          ],
                          "best_angle": 0
                        },
                        "warnings": [
                          {
                            "risk": "FACE_IN_BLOCKLIST",
                            "feature": "LIVENESS",
                            "additional_data": {
                              "blocklisted_session_id": "882c42d5-8a4d-4d20-8080-a22f57822c86",
                              "blocklisted_session_number": 3242,
                              "api_service": null
                            },
                            "log_type": "error",
                            "short_description": "Face in blocklist",
                            "long_description": "The system identified a face in the blocklist, which means the face is not allowed to be verified."
                          }
                        ],
                        "face_quality": null,
                        "face_luminance": null
                      },
                      "vendor_data": "user-123",
                      "metadata": null,
                      "created_at": "2026-06-12T01:04:42.763237+00:00"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "liveness": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined"
                          ],
                          "description": "重大度が`error`の警告が1つ以上発生した場合（顔が検出されない、スコアが低い、プレゼンテーション攻撃、ブロックリストへの該当）は`Declined`、それ以外は`Approved`です。`warning`/`information`のエントリ（複数の顔、重複）は、それだけで却下になることはありません。"
                        },
                        "method": {
                          "type": "string",
                          "enum": [
                            "PASSIVE"
                          ],
                          "description": "このエンドポイントでは常に`PASSIVE`です。"
                        },
                        "score": {
                          "type": "number",
                          "format": "float",
                          "nullable": true,
                          "minimum": 0,
                          "maximum": 100,
                          "description": "画像がなりすましではなく実在の人物を写していることを示すライブネスの信頼度（0–100、小数点以下2桁）。モデルが信頼度を返さなかった場合は`null`です。",
                          "example": 95.0
                        },
                        "user_image": {
                          "type": "object",
                          "description": "送信された画像の顔検出結果。",
                          "properties": {
                            "entities": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "bbox": {
                                    "type": "array",
                                    "items": {
                                      "type": "integer"
                                    },
                                    "minItems": 4,
                                    "maxItems": 4,
                                    "description": "処理済み画像内で検出された顔のバウンディングボックス。`[x_min, y_min, x_max, y_max]`のピクセル座標で示します。",
                                    "example": [
                                      661,
                                      728,
                                      1688,
                                      2188
                                    ]
                                  },
                                  "confidence": {
                                    "type": "number",
                                    "format": "float",
                                    "minimum": 0,
                                    "maximum": 1,
                                    "description": "顔検出の信頼度（0～1）。",
                                    "example": 0.732973
                                  },
                                  "age": {
                                    "type": "number",
                                    "format": "float",
                                    "description": "検出された顔についてモデルが推定した年齢（歳）。参考情報であり、ライブネス検知の判定には影響しません。",
                                    "example": 26.91
                                  },
                                  "gender": {
                                    "type": "string",
                                    "description": "検出された顔についてモデルが予測した性別（`male`または`female`）。参考情報です。",
                                    "example": "male"
                                  },
                                  "race": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "予約済みフィールドです。このエンドポイントのレスポンスでは常に`null`です。",
                                    "example": null
                                  }
                                }
                              },
                              "description": "検出された顔ごとに1エントリー。最も大きい顔が評価対象です。"
                            },
                            "best_angle": {
                              "type": "integer",
                              "nullable": true,
                              "description": "最も良好な顔検出結果が得られた回転角度(度)。`rotate_image=true`によって向きが補正された場合にのみゼロ以外になります。",
                              "example": 0
                            }
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "description": "リスクシグナル。重大度`error`(却下): `NO_FACE_DETECTED`、`LOW_LIVENESS_SCORE`(スコアがしきい値以下)、`LIVENESS_FACE_ATTACK`、`FACE_IN_BLOCKLIST`、`POSSIBLE_FACE_IN_BLOCKLIST`。重大度`warning`(レビュー対象、却下なし): `MULTIPLE_FACES_DETECTED`。重大度`information`(却下なし): `DUPLICATED_FACE`、`POSSIBLE_DUPLICATED_FACE`。同じ顔が別の承認済みセッションですでに検出されています。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "enum": [
                                  "NO_FACE_DETECTED",
                                  "LOW_LIVENESS_SCORE",
                                  "LIVENESS_FACE_ATTACK",
                                  "MULTIPLE_FACES_DETECTED",
                                  "FACE_IN_BLOCKLIST",
                                  "POSSIBLE_FACE_IN_BLOCKLIST",
                                  "DUPLICATED_FACE",
                                  "POSSIBLE_DUPLICATED_FACE"
                                ],
                                "description": "機械可読なリスクコードです。"
                              },
                              "feature": {
                                "type": "string",
                                "enum": [
                                  "LIVENESS"
                                ],
                                "description": "警告を発生させた機能。このエンドポイントでは常に`LIVENESS`です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "additionalProperties": true,
                                "description": "ほとんどの警告では`null`です。ブロックリストへのヒットには`{blocklisted_session_id, blocklisted_session_number, api_service}`が、重複へのヒットには一致したセッションを指す`{duplicated_session_id, duplicated_session_number, api_service}`が含まれます。"
                              },
                              "log_type": {
                                "type": "string",
                                "enum": [
                                  "error",
                                  "warning",
                                  "information"
                                ],
                                "description": "重大度。`error`の警告は`status`を`Declined`にします。`warning`と`information`のエントリーは参考情報であり、それ単独で却下になることはありません。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で1行にまとめた要約。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "リスクを人が読める形で説明したもの。"
                              }
                            }
                          }
                        },
                        "face_quality": {
                          "type": "number",
                          "format": "float",
                          "nullable": true,
                          "minimum": 0,
                          "maximum": 100,
                          "description": "検出された顔の撮影品質スコア（0〜100に正規化）。モデルが信頼できる値を算出できなかった場合は`null`です。",
                          "example": 84.21
                        },
                        "face_luminance": {
                          "type": "number",
                          "format": "float",
                          "nullable": true,
                          "minimum": 0,
                          "maximum": 100,
                          "description": "検出された顔の明るさ。0–100に正規化されています。利用できない場合は`null`です。",
                          "example": 50.33
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`のエコー、または`null`。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "送信した`metadata`オブジェクトのエコー、または`null`。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "レスポンスが生成された日時を示すISO 8601タイムスタンプ（UTC）。例: `2026-06-12T01:04:42.763237+00:00`。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。`user_image`がない、5MBを超える、サポートされていない拡張子である、サーバー側で画像のデコードに失敗した、またはオプションが範囲外の場合に返されます。フィールドエラーはDRFの`{field: [messages]}`エンベロープを使用し、画像デコードの失敗は`{\"error\": ...}`を使用します。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing image": {
                    "summary": "フォームデータに`user_image`が含まれていません",
                    "value": {
                      "user_image": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Invalid image format": {
                    "summary": "許可された拡張子だが、画像の内容をデコードできない",
                    "value": {
                      "error": "Invalid user image format.",
                      "code": "invalid_image"
                    }
                  },
                  "Unsupported file extension": {
                    "summary": "ファイル拡張子がtiff/jpg/jpeg/png/webp以外",
                    "value": {
                      "user_image": [
                        "File extension “txt” is not allowed. Allowed extensions are: tiff, jpg, jpeg, png, webp."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "アップロードが5MBの上限を超えています",
                    "value": {
                      "user_image": [
                        "File size should not exceed 5 MB"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、画像の処理が行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/passive-liveness/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'user_image=@./selfie.jpg' \\\n  -F 'face_liveness_score_decline_threshold=30' \\\n  -F 'save_api_request=true' \\\n  -F 'vendor_data=user-123'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.passive_liveness.check(\n    user_image=open(\"user_image.jpg\", \"rb\"),\n    face_liveness_score_decline_threshold=30.0,\n    rotate_image=False,\n    save_api_request=True,\n    vendor_data=\"user-123\",\n    metadata={\"flow\": \"withdrawal\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.passiveLiveness.check({\n  user_image: await fileFromPath(\"user_image.jpg\"),\n  face_liveness_score_decline_threshold: 30.0,\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"withdrawal\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.PassiveLiveness.Check(ctx, didit.PassiveLivenessCheckParams{\n\tUserImage:                         didit.FileFromPath(\"user_image.jpg\"),\n\tFaceLivenessScoreDeclineThreshold: didit.Float(30.0),\n\tRotateImage:                       didit.Bool(false),\n\tSaveAPIRequest:                    didit.Bool(true),\n\tVendorData:                        didit.String(\"user-123\"),\n\tMetadata:                          didit.Some(map[string]any{\"flow\": \"withdrawal\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.PassiveLivenessCheckParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.passiveLiveness().check(PassiveLivenessCheckParams.builder()\n        .userImage(Path.of(\"user_image.jpg\"))\n        .faceLivenessScoreDeclineThreshold(30.0)\n        .rotateImage(false)\n        .saveApiRequest(true)\n        .vendorData(\"user-123\")\n        .metadata(Map.of(\"flow\", \"withdrawal\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->passiveLiveness->check([\n    'user_image' => File::fromPath('user_image.jpg'),\n    'face_liveness_score_decline_threshold' => 30.0,\n    'rotate_image' => false,\n    'save_api_request' => true,\n    'vendor_data' => 'user-123',\n    'metadata' => ['flow' => 'withdrawal'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.passive_liveness.check(\n  user_image: Pathname(\"user_image.jpg\"),\n  face_liveness_score_decline_threshold: 30.0,\n  rotate_image: false,\n  save_api_request: true,\n  vendor_data: \"user-123\",\n  metadata: { flow: \"withdrawal\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.PassiveLiveness.CheckAsync(new PassiveLivenessCheckParams\n{\n    UserImage = FileUpload.FromPath(\"user_image.jpg\"),\n    FaceLivenessScoreDeclineThreshold = 30.0,\n    RotateImage = false,\n    SaveApiRequest = true,\n    VendorData = \"user-123\",\n    Metadata = new Dictionary<string, object> { [\"flow\"] = \"withdrawal\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/database-validation/": {
      "post": {
        "summary": "データベース検証（単体）",
        "operationId": "post_v3database-validation",
        "x-didit-sdk": {
          "resource": "database_validation",
          "method": "validate",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [],
        "description": "公式の政府および登記情報源に照らして、個人の本人情報を検証します。ブラジルのCPF、アルゼンチンのRENAPER、スペインとペルーのDNI登録簿、メキシコのINEのほか、60+か国にわたる100+のサービスに対応しています。\n\n**サービスの選択。** 各国は、`service_id`（例: `bra_cpf`、`arg_renaper`、`pan_cedula_sib`）で識別される1つ以上のカタログサービスを提供しています。実行したいサービスは`services`配列で指定します。省略した場合、デフォルトのサービス（その国で最も長く稼働している本番サービス）がちょうど**1つ**だけ実行されます。`services`を送信すると、レスポンスも`services_used`と`match_score`を含む拡張形式に切り替わります。サービス、その必須フィールド、料金は、`GET /v1/organization/database-validation-countries/`（本仕様には記載されていないカタログエンドポイント）またはBusiness Consoleのワークフローエディターで確認できます。一部のサービスはカタログで`requires_consent=true`のフラグが付いており、`consent=true`が必要です。また、呼び出す前に組織向けのオンボーディングが必要なサービスもあります。\n\n**入力フィールド。** `identification_number`は、適切な国別フィールドに自動的にマッピングされる共通フィールドです（その説明を参照）。国ごとの形式ルールはプロバイダーを呼び出す前に適用され（例: BRAのCPFは正確に11桁である必要があります）、形式エラーが請求されることはありません。生体認証サービスには`selfie`のアップロード（multipartのみ）が必要で、アルゼンチンのRENAPERではさらに`gender`が必要です。\n\n**結果。** 各サービスは、フィールドごとの`validation`マップと、ベンダーに依存しない`outcome_code`（`MATCH`、`PARTIAL_MATCH`、`NO_MATCH`、`DOCUMENT_NOT_FOUND`、`INVALID_DOCUMENT_FORMAT`、`INVALID_INPUT`、`MINOR_BLOCKED`、`DECEASED`、`BIOMETRIC_NO_MATCH`、`BIOMETRIC_IMAGE_UNUSABLE`、`INCONCLUSIVE`、`DOCUMENT_SUPERSEDED`、`REGISTRY_UNAVAILABLE`、`REGISTRY_ERROR`）を返します。次の違いに注意してください。`NO_MATCH`は確定的な不一致、`INCONCLUSIVE`は登録簿がどちらとも確認できなかったこと（却下ではなくレビュー）を意味し、`BIOMETRIC_IMAGE_UNUSABLE`は確定的な`BIOMETRIC_NO_MATCH`とは異なり、セルフィーの技術的な問題（再撮影）です。全体の`match_type`はサービス全体を集約したもので（いずれかが完全一致なら`full_match`、そうでなくいずれかが部分一致なら`partial_match`、それ以外は`no_match`）、`no_match_action`/`partial_match_action`がこれを最終的な`status`に変換します。`validation_type`は導出される値で、2つ以上の異なるサービスが完全一致（識別番号、氏名と生年月日の組み合わせ、または矛盾のない住所のいずれかで）を返した場合は`two_by_two`、それ以外は`one_by_one`になります。\n\n**保存。** `save_api_request`のデフォルトは**true**です。結果はセッションとして保存され（`request_id`は`GET /v3/session/{sessionId}/decision/`で使用できます）、コンソールに表示され、`status.updated`のWebhookが送信されます。また、`validations`の形式もこの設定で決まります。保存する場合はサービスごとのオブジェクト、保存しない場合は統合された`{field: match}`マップになります。\n\n**請求。** 請求はサービス単位です。課金対象の結果を返した各サービスに、それぞれのカタログ料金が請求されます。失敗またはスキップされたサービスは請求されず、`400`で拒否されたリクエストには費用がかかりません。事前の残高チェックでは、選択したサービスの料金の合計が対象になります（不足している場合は`403`）。\n\n**失敗。** 選択したどのサービスも使用可能な結果を返さない場合、応答のなかったすべての試行が入力を明示的に拒否したとき（`provider_rejected_input`、`retryable: false`）は、APIは`validation_errors`付きで`400`を返します。再試行する前に入力を修正してください。それ以外の場合は、入力の拒否と利用できなかったフォールバック試行が混在する場合も含め、`validation_errors`（`empty_provider_response`、`retryable: true`）付きで`502`を返します。何も請求されません（`save_api_request=true`の場合でも、セッションはステータス`Not Finished`で記録されます）。一部のサービスのみが失敗した場合は、`200`レスポンスの`database_validation.errors`にその失敗が含まれます。\n\n**サンドボックス。** サンドボックスアプリケーションのキーでは、登録簿の呼び出しと請求がスキップされ、静的な`full_match`レスポンスが返されます。サンドボックスのペイロードには、`services`の送信方法にかかわらず常に`services_used`と`match_score: 100`が含まれます。そのため、本番環境における拡張形式の切り替え条件や、0.0〜1.0の割合で表される`match_score`を、サンドボックスのレスポンスで検証しないでください。\n\nリクエストは`application/json`で送信するか、`selfie`をアップロードする場合は`multipart/form-data`で送信してください。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "issuing_state"
                ],
                "properties": {
                  "issuing_state": {
                    "type": "string",
                    "description": "照合先レジストリのISO 3166-1 **alpha-3**国コード（例: `BRA`、`ESP`、`COL`）。利用可能なサービスはこれによって決まります。サポートされていないコードは、有効な選択肢の完全な一覧とともに`400`を返します。",
                    "example": "BRA"
                  },
                  "services": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "この国で実行するカタログの`service_id`（例: `[\"bra_cpf\"]`）。単一の文字列、またはカンマ区切りやJSONエンコードされた文字列も受け付けます。**省略した場合または空の場合は、デフォルトのサービスが1つだけ実行されます**。これはその国で最も長く提供されている稼働中のサービスです。新しいサービス、生体認証サービス、従量課金サービスは明示的に指定する必要があります。`services`を送信すると、レスポンスが拡張形式に切り替わります（`services_used`と`match_score`が追加されます）。すべてのIDが存在し、かつ`issuing_state`で稼働している必要があります。オンボーディングが必要なサービスは、組織で有効化されるまで`400`を返します。国ごとに利用可能なサービスは、`GET /v1/organization/database-validation-countries/`（この仕様には記載されていないカタログエンドポイント）またはBusiness Consoleのワークフローエディターで確認できます。",
                    "example": [
                      "bra_cpf"
                    ]
                  },
                  "validation_type": {
                    "type": "string",
                    "deprecated": true,
                    "description": "非推奨。後方互換性のため受け付けますが、無視されます。レスポンスの`validation_type`は、完全一致したサービスの数から算出されるようになりました。特定のサービスを指定するには`services`を使用してください。"
                  },
                  "consent": {
                    "type": "boolean",
                    "default": false,
                    "description": "エンドユーザーが選択した検証サービスに明示的に同意した場合は`true`に設定します。カタログで`requires_consent=true`とフラグ付けされたサービスでは必須です。指定しない場合、それらのサービスは`services_requiring_consent`を含む`400`を返します。"
                  },
                  "identification_number": {
                    "type": "string",
                    "description": "汎用の識別番号です。国ごとの正しいフィールドに自動的にマッピングされるため、`personal_number`/`tax_number`/`document_number`の代わりに使用できます:ARG→document_number (DNI)、BOL→document_number (CI)、BRA→tax_number (CPF、11桁)、CHL→personal_number (RUT)、COL→personal_number (Cédula)、CRI→personal_number (Cédula)、DOM→personal_number (Cédula、11桁)、ECU→personal_number (Cédula、10桁)、ESP→personal_number (DNI/NIE)、GTM→document_number (DPI)、HND→document_number (DNI)、MEX→personal_number (CURP、18文字)、PAN→personal_number (Cédula)、PER→personal_number (DNI、8桁)、PRY→document_number (CI)、SLV→document_number (DUI)、URY→personal_number (CI)、VEN→document_number (Cédula)。明示的に指定された国別フィールドを上書きすることはありません。"
                  },
                  "first_name": {
                    "type": "string",
                    "description": "個人の名です。一部のサービスや国で必須です。",
                    "example": "John"
                  },
                  "last_name": {
                    "type": "string",
                    "description": "個人の姓です。一部のサービスや国で必須です。",
                    "example": "Doe"
                  },
                  "middle_name": {
                    "type": "string",
                    "description": "ミドルネーム。一部の国のサービス（AUS、NZL、…）で使用されます。"
                  },
                  "full_name": {
                    "type": "string",
                    "description": "氏名。一部のサービスでは、名と姓の代わりにこれを受け付けます（例：ネイティブ表記の氏名で照合するCHNのサービス）。"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "description": "生年月日（`YYYY-MM-DD`）。多くのサービスで必須です。",
                    "example": "1980-01-01"
                  },
                  "personal_number": {
                    "type": "string",
                    "description": "政府が発行する固有の個人識別番号。使用国: CHL(RUT)、COL(Cédula)、CRI、DOM、ECU、ESP(DNI/NIE)、MEX(CURP)、PAN(Cédula)、PER(DNI)、URY。代わりに`identification_number`の使用を検討してください。"
                  },
                  "tax_number": {
                    "type": "string",
                    "description": "納税者番号。使用国: BRA(CPF、11桁)。代わりに`identification_number`の使用を検討してください。"
                  },
                  "document_number": {
                    "type": "string",
                    "description": "書類番号。使用する国: ARG(DNI)、BOL(CI)、GTM(DPI)、HND(DNI)、PRY(CI)、SLV(DUI)、VEN(Cédula)。代わりに`identification_number`の使用を検討してください。"
                  },
                  "document_type": {
                    "type": "string",
                    "enum": [
                      "P",
                      "DL",
                      "ID",
                      "RP",
                      "SSC",
                      "HIC",
                      "WP",
                      "TC",
                      "VISA",
                      "PSC",
                      "BC",
                      "OTHER"
                    ],
                    "description": "検証対象の書類の種類：`P`はパスポート、`DL`は運転免許証、`ID`は国民IDカード、`RP`は在留許可証（ほかに`SSC`、`HIC`、`WP`、`TC`、`VISA`、`PSC`、`BC`、`OTHER`）。一部のサービス（例：ESP）で必須です。"
                  },
                  "expiration_date": {
                    "type": "string",
                    "format": "date",
                    "description": "書類の有効期限(`YYYY-MM-DD`)。ESP(スペイン)の検証に必須です。",
                    "example": "2030-01-15"
                  },
                  "date_of_issue": {
                    "type": "string",
                    "format": "date",
                    "description": "書類の発行日(`YYYY-MM-DD`、fecha de expedición)。COL(コロンビア)のcédula検証に必須です。",
                    "example": "2015-06-20"
                  },
                  "nationality": {
                    "type": "string",
                    "description": "ISO 3166-1 alpha-3形式の国籍。一部のサービスでは必須です。"
                  },
                  "gender": {
                    "type": "string",
                    "enum": [
                      "M",
                      "F",
                      "X"
                    ],
                    "description": "性別：`M`、`F`、または`X`（その他/不明）。アルゼンチンのRENAPER検証（`arg_renaper`）で必須です。"
                  },
                  "address": {
                    "description": "居住住所です。構造化オブジェクト`{\"street_1\":\"123 Main St\",\"street_2\":\"Apt 4B\",\"city\":\"Springfield\",\"region\":\"IL\",\"postal_code\":\"62701\",\"country\":\"US\"}`を推奨しますが、完全な1行の文字列も引き続き受け付けられます。住所検証サービスでは必須です。サービスが住所の要件を定義している場合、不足している項目があると`address_fields_required_by`を含む`400`が返されます。",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "street_1": {
                            "type": "string"
                          },
                          "street_2": {
                            "type": "string"
                          },
                          "city": {
                            "type": "string"
                          },
                          "region": {
                            "type": "string"
                          },
                          "postal_code": {
                            "type": "string"
                          },
                          "country": {
                            "type": "string"
                          }
                        }
                      },
                      {
                        "type": "string",
                        "description": "1行形式の完全な住所(レガシー)。"
                      }
                    ]
                  },
                  "address_element_1": {
                    "type": "string",
                    "description": "番地と通りの種別を含む通りの住所。省略した場合は`address`から導出されます。"
                  },
                  "address_element_2": {
                    "type": "string",
                    "description": "部屋番号、ユニット、建物、階、または追加の住所行。明示的に把握している場合にのみ送信してください。"
                  },
                  "address_element_3": {
                    "type": "string",
                    "description": "市区町村、郊外、地区、地域、または近隣地区。省略した場合は`address`から導出されます。"
                  },
                  "address_element_4": {
                    "type": "string",
                    "description": "州、県、地域、または町。省略した場合は`address`から導出されます。"
                  },
                  "address_element_5": {
                    "type": "string",
                    "description": "郵便番号。`postal_code`もエイリアスとして受け付けます。"
                  },
                  "postal_code": {
                    "type": "string",
                    "description": "住所ベースのサービスで使用する郵便番号(`address_element_5`のエイリアス)。"
                  },
                  "driver_license_number": {
                    "type": "string",
                    "description": "政府の書類検証サービス（AUS、NZL、IND）向けの運転免許証番号。"
                  },
                  "driver_license_card_number": {
                    "type": "string",
                    "description": "運転免許証番号とは別に必要な場合の、物理的な運転免許証カードの番号(AUS)。"
                  },
                  "driver_license_state": {
                    "type": "string",
                    "description": "運転免許証の発行州または準州（AUS）。"
                  },
                  "driver_license_version": {
                    "type": "string",
                    "description": "運転免許証のバージョンコード（NZL）。"
                  },
                  "passport_number": {
                    "type": "string",
                    "description": "政府のパスポート検証サービス（AUS、NZL、IND、CHN）で使用するパスポート番号。"
                  },
                  "passport_expiration_date": {
                    "type": "string",
                    "format": "date",
                    "description": "パスポートの有効期限（`YYYY-MM-DD`）。パスポート検証サービスで使用します。"
                  },
                  "passport_file_number": {
                    "type": "string",
                    "description": "パスポートのファイル番号（IND）。"
                  },
                  "passport_issue_country": {
                    "type": "string",
                    "description": "パスポート検証サービスで使用する、パスポートの発行国（ISO 3166-1 alpha-3）です。"
                  },
                  "medicare_card_number": {
                    "type": "string",
                    "description": "Medicareカード番号（オーストラリア）です。"
                  },
                  "immi_card_number": {
                    "type": "string",
                    "description": "オーストラリアのImmiCardの番号。"
                  },
                  "immi_card_expiry_date": {
                    "type": "string",
                    "format": "date",
                    "description": "オーストラリアのImmiCardの有効期限。"
                  },
                  "citizenship_certificate_number": {
                    "type": "string",
                    "description": "市民権証明書番号（AUS）。"
                  },
                  "birth_registration_number": {
                    "type": "string",
                    "description": "出生証明書の登録番号（AUS）。"
                  },
                  "birth_registration_date": {
                    "type": "string",
                    "format": "date",
                    "description": "出生証明書の登録日（AUS）。"
                  },
                  "birth_registration_state": {
                    "type": "string",
                    "description": "出生証明書の登録州（AUS）。"
                  },
                  "marriage_certificate_number": {
                    "type": "string",
                    "description": "婚姻証明書番号（AUS）。"
                  },
                  "change_of_name_certificate_number": {
                    "type": "string",
                    "description": "改名証明書番号（AUS）。"
                  },
                  "first_partner_name": {
                    "type": "string",
                    "description": "結婚証明書に記載された配偶者の名（AUS）。"
                  },
                  "last_partner_name": {
                    "type": "string",
                    "description": "婚姻証明書に記載されたパートナーの姓(AUS)。"
                  },
                  "voter_id": {
                    "type": "string",
                    "description": "有権者登録番号（IND EPIC、IRL）。"
                  },
                  "epic_card": {
                    "type": "string",
                    "description": "インドのEPIC有権者カード番号。"
                  },
                  "pan": {
                    "type": "string",
                    "description": "インドのPAN（Permanent Account Number）。"
                  },
                  "national_id": {
                    "type": "string",
                    "description": "国民ID番号（CHN、MYS、KEN、KHM、NGA、ZAF、…）。"
                  },
                  "cic": {
                    "type": "string",
                    "description": "メキシコINE/IFEのCódigo de Identificación de Credencial（CIC）、9桁。メキシコINE資格証有効性確認サービス（`mex_ine_vigencia`）で使用します。"
                  },
                  "identificador_ciudadano": {
                    "type": "string",
                    "description": "メキシコINEのIdentificador del Ciudadano（9桁）。`mex_ine_vigencia`で、現行INEモデル（E/F/G/H）に対して`cic`と組み合わせて使用します。"
                  },
                  "ocr": {
                    "type": "string",
                    "description": "メキシコINEのOCR番号（13桁、カード裏面）。`mex_ine_vigencia`で、モデルDに対して`cic`と組み合わせて使用します。"
                  },
                  "voter_number": {
                    "type": "string",
                    "description": "メキシコINEのClave de Elector（18文字）。`mex_ine_vigencia`で、旧IFEモデル（A/B/C）に対して`emission_number`と組み合わせて使用します。"
                  },
                  "emission_number": {
                    "type": "string",
                    "description": "メキシコINEのNúmero de Emisión。`mex_ine_vigencia`で、旧IFEモデル（A/B/C）に対して`voter_number`と組み合わせて使用します。"
                  },
                  "bvn": {
                    "type": "string",
                    "description": "ナイジェリアの銀行認証番号(Bank Verification Number)。"
                  },
                  "bank_card_number": {
                    "type": "string",
                    "description": "銀行カード番号（CHNの銀行カード認証）。"
                  },
                  "company_registration_number": {
                    "type": "string",
                    "description": "会社登記所が発行した会社の登記番号です。ブラジルではCNPJ（例：`11222333000181`）、南アフリカでは登記番号（例：`1936/007721/06`）が該当します。法人登記サービスおよび会社取締役サービス（`bra_company_registry`、`bra_company_directors`、`zaf_company_registry`、`zaf_company_directors`）で必須です。"
                  },
                  "company_name": {
                    "type": "string",
                    "description": "登記されている企業名で、登記簿の記載と照合されます。`zaf_company_registry`では省略可能です。"
                  },
                  "initials": {
                    "type": "string",
                    "description": "書類に印字されているこの人物のイニシャルです。`zaf_drivers_license`では必須で、`zaf_bank_account_holder`でも指定できます。"
                  },
                  "licence_number": {
                    "type": "string",
                    "description": "`zaf_drivers_license`用の、カードに記載されている運転免許証番号。省略した場合は`document_number`が使用されます。"
                  },
                  "refugee_file_number": {
                    "type": "string",
                    "description": "南アフリカ内務省（Department of Home Affairs）が発行する難民ファイル番号。`zaf_refugee`で必須です。"
                  },
                  "bank_name": {
                    "type": "string",
                    "description": "口座を保有する銀行の名称。`zaf_bank_account_holder`で必須です。"
                  },
                  "bank_account_number": {
                    "type": "string",
                    "description": "銀行口座番号。`zaf_bank_account_holder`では必須で、`zaf_fraud_prevention`でも指定できます。"
                  },
                  "account_type": {
                    "type": "string",
                    "description": "`zaf_bank_account_holder`用の銀行口座種別です。`current`、`savings`、`transmission`、`subscriptionShare`または`notKnown`のいずれかで、大文字と小文字は区別されません。それ以外の値を指定すると`400`が返されます。種別が不明な場合は省略してください。その場合、口座種別の照合結果は未確認として報告されます。"
                  },
                  "phone_number": {
                    "type": "string",
                    "description": "連絡先の携帯電話番号。連絡可能性を照合するサービス（`zaf_bank_account_holder`、`zaf_fraud_prevention`、`zaf_refugee`）で使用されます。"
                  },
                  "right_thumb": {
                    "type": "string",
                    "description": "`zaf_dha_fingerprint_match`用の、Base64エンコードされた右手親指の指紋です。`left_thumb`と併用するか、単独で指定します。"
                  },
                  "left_thumb": {
                    "type": "string",
                    "description": "`zaf_dha_fingerprint_match`用の、Base64エンコードされた左手親指の指紋です。`right_thumb`と併用するか、単独で指定します。"
                  },
                  "score_level": {
                    "type": "integer",
                    "description": "`zaf_criminal_face_screening`の生体認証スコアレベルの最小値。デフォルトは`3`です。"
                  },
                  "max_matches": {
                    "type": "integer",
                    "description": "`zaf_criminal_face_screening`が返す候補一致の最大数です。デフォルトは`1`です。"
                  },
                  "vehicle_register_number": {
                    "type": "string",
                    "description": "車両登録番号。`zaf_vehicle_ownership`では、`vehicle_licence_plate`および`vin`とともに必須です。"
                  },
                  "vehicle_licence_plate": {
                    "type": "string",
                    "description": "車両のナンバープレート番号。`zaf_vehicle_ownership`では、`vehicle_register_number`および`vin`とともに必須です。"
                  },
                  "vin": {
                    "type": "string",
                    "description": "車両識別番号(VINまたは車台番号)。`zaf_vehicle_ownership`では、`vehicle_register_number`および`vehicle_licence_plate`とともに必須です。"
                  },
                  "ssn": {
                    "type": "string",
                    "description": "社会保障番号(米国)。"
                  },
                  "phone": {
                    "type": "string",
                    "description": "電話番号検証サービス用の電話番号。"
                  },
                  "landline": {
                    "type": "string",
                    "description": "電話番号検証サービス用の固定電話番号。"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "本人確認サービス用のメールアドレス。"
                  },
                  "country_of_residence": {
                    "type": "string",
                    "description": "居住国を示すISO 3166-1 alpha-2コード。グローバルなID情報エンリッチメントサービス（例: `glb_identity_enrichment`）が照会対象を絞り込むために使用します。",
                    "example": "US"
                  },
                  "partial_match_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "NO_ACTION",
                    "description": "`partial_match`の場合に`database_validation.status`がどうなるか。デフォルトは`NO_ACTION`です（ステータスは`Approved`のままで、警告が付きます）。"
                  },
                  "no_match_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "`no_match`の場合に`database_validation.status`がどうなるか。デフォルトは`DECLINE`です。"
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "検証をセッションとして保存します(コンソールでの表示、判定エンドポイント、`status.updated`のWebhook)。`validations`レスポンスの形式も変わります。`true`(デフォルト)の場合はサービスごとのオブジェクト、`false`の場合は統合されたフィールドマップになります。"
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "検証対象ユーザーに対するお客様側の識別子です。そのまま返され、セッションとともに保存されます。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "リクエストとともに保存され、そのまま返される自由形式のJSON。"
                  }
                }
              },
              "example": {
                "issuing_state": "BRA",
                "services": [
                  "bra_cpf"
                ],
                "identification_number": "12345678900",
                "first_name": "John",
                "last_name": "Doe",
                "date_of_birth": "1980-01-01",
                "vendor_data": "user-1234"
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "issuing_state"
                ],
                "properties": {
                  "issuing_state": {
                    "type": "string",
                    "description": "照合先レジストリのISO 3166-1 **alpha-3**国コード（例: `BRA`、`ESP`、`COL`）。利用可能なサービスはこれによって決まります。サポートされていないコードは、有効な選択肢の完全な一覧とともに`400`を返します。",
                    "example": "BRA"
                  },
                  "services": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "この国で実行するカタログの`service_id`（例: `[\"bra_cpf\"]`）。単一の文字列、またはカンマ区切りやJSONエンコードされた文字列も受け付けます。**省略した場合または空の場合は、デフォルトのサービスが1つだけ実行されます**。これはその国で最も長く提供されている稼働中のサービスです。新しいサービス、生体認証サービス、従量課金サービスは明示的に指定する必要があります。`services`を送信すると、レスポンスが拡張形式に切り替わります（`services_used`と`match_score`が追加されます）。すべてのIDが存在し、かつ`issuing_state`で稼働している必要があります。オンボーディングが必要なサービスは、組織で有効化されるまで`400`を返します。国ごとに利用可能なサービスは、`GET /v1/organization/database-validation-countries/`（この仕様には記載されていないカタログエンドポイント）またはBusiness Consoleのワークフローエディターで確認できます。",
                    "example": [
                      "bra_cpf"
                    ]
                  },
                  "validation_type": {
                    "type": "string",
                    "deprecated": true,
                    "description": "非推奨。後方互換性のため受け付けますが、無視されます。レスポンスの`validation_type`は、完全一致したサービスの数から算出されるようになりました。特定のサービスを指定するには`services`を使用してください。"
                  },
                  "consent": {
                    "type": "boolean",
                    "default": false,
                    "description": "エンドユーザーが選択した検証サービスに明示的に同意した場合は`true`に設定します。カタログで`requires_consent=true`とフラグ付けされたサービスでは必須です。指定しない場合、それらのサービスは`services_requiring_consent`を含む`400`を返します。"
                  },
                  "identification_number": {
                    "type": "string",
                    "description": "汎用の識別番号です。国ごとの正しいフィールドに自動的にマッピングされるため、`personal_number`/`tax_number`/`document_number`の代わりに使用できます:ARG→document_number (DNI)、BOL→document_number (CI)、BRA→tax_number (CPF、11桁)、CHL→personal_number (RUT)、COL→personal_number (Cédula)、CRI→personal_number (Cédula)、DOM→personal_number (Cédula、11桁)、ECU→personal_number (Cédula、10桁)、ESP→personal_number (DNI/NIE)、GTM→document_number (DPI)、HND→document_number (DNI)、MEX→personal_number (CURP、18文字)、PAN→personal_number (Cédula)、PER→personal_number (DNI、8桁)、PRY→document_number (CI)、SLV→document_number (DUI)、URY→personal_number (CI)、VEN→document_number (Cédula)。明示的に指定された国別フィールドを上書きすることはありません。"
                  },
                  "first_name": {
                    "type": "string",
                    "description": "個人の名です。一部のサービスや国で必須です。",
                    "example": "John"
                  },
                  "last_name": {
                    "type": "string",
                    "description": "個人の姓です。一部のサービスや国で必須です。",
                    "example": "Doe"
                  },
                  "middle_name": {
                    "type": "string",
                    "description": "ミドルネーム。一部の国のサービス（AUS、NZL、…）で使用されます。"
                  },
                  "full_name": {
                    "type": "string",
                    "description": "氏名。一部のサービスでは、名と姓の代わりにこれを受け付けます（例：ネイティブ表記の氏名で照合するCHNのサービス）。"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "description": "生年月日（`YYYY-MM-DD`）。多くのサービスで必須です。",
                    "example": "1980-01-01"
                  },
                  "personal_number": {
                    "type": "string",
                    "description": "政府が発行する固有の個人識別番号。使用国: CHL(RUT)、COL(Cédula)、CRI、DOM、ECU、ESP(DNI/NIE)、MEX(CURP)、PAN(Cédula)、PER(DNI)、URY。代わりに`identification_number`の使用を検討してください。"
                  },
                  "tax_number": {
                    "type": "string",
                    "description": "納税者番号。使用国: BRA(CPF、11桁)。代わりに`identification_number`の使用を検討してください。"
                  },
                  "document_number": {
                    "type": "string",
                    "description": "書類番号。使用する国: ARG(DNI)、BOL(CI)、GTM(DPI)、HND(DNI)、PRY(CI)、SLV(DUI)、VEN(Cédula)。代わりに`identification_number`の使用を検討してください。"
                  },
                  "document_type": {
                    "type": "string",
                    "enum": [
                      "P",
                      "DL",
                      "ID",
                      "RP",
                      "SSC",
                      "HIC",
                      "WP",
                      "TC",
                      "VISA",
                      "PSC",
                      "BC",
                      "OTHER"
                    ],
                    "description": "検証対象の書類の種類：`P`はパスポート、`DL`は運転免許証、`ID`は国民IDカード、`RP`は在留許可証（ほかに`SSC`、`HIC`、`WP`、`TC`、`VISA`、`PSC`、`BC`、`OTHER`）。一部のサービス（例：ESP）で必須です。"
                  },
                  "expiration_date": {
                    "type": "string",
                    "format": "date",
                    "description": "書類の有効期限(`YYYY-MM-DD`)。ESP(スペイン)の検証に必須です。",
                    "example": "2030-01-15"
                  },
                  "date_of_issue": {
                    "type": "string",
                    "format": "date",
                    "description": "書類の発行日(`YYYY-MM-DD`、fecha de expedición)。COL(コロンビア)のcédula検証に必須です。",
                    "example": "2015-06-20"
                  },
                  "nationality": {
                    "type": "string",
                    "description": "ISO 3166-1 alpha-3形式の国籍。一部のサービスでは必須です。"
                  },
                  "gender": {
                    "type": "string",
                    "enum": [
                      "M",
                      "F",
                      "X"
                    ],
                    "description": "性別：`M`、`F`、または`X`（その他/不明）。アルゼンチンのRENAPER検証（`arg_renaper`）で必須です。"
                  },
                  "address": {
                    "description": "居住住所です。構造化オブジェクト`{\"street_1\":\"123 Main St\",\"street_2\":\"Apt 4B\",\"city\":\"Springfield\",\"region\":\"IL\",\"postal_code\":\"62701\",\"country\":\"US\"}`を推奨しますが、完全な1行の文字列も引き続き受け付けられます。住所検証サービスでは必須です。サービスが住所の要件を定義している場合、不足している項目があると`address_fields_required_by`を含む`400`が返されます。",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "street_1": {
                            "type": "string"
                          },
                          "street_2": {
                            "type": "string"
                          },
                          "city": {
                            "type": "string"
                          },
                          "region": {
                            "type": "string"
                          },
                          "postal_code": {
                            "type": "string"
                          },
                          "country": {
                            "type": "string"
                          }
                        }
                      },
                      {
                        "type": "string",
                        "description": "1行形式の完全な住所(レガシー)。"
                      }
                    ]
                  },
                  "address_element_1": {
                    "type": "string",
                    "description": "番地と通りの種別を含む通りの住所。省略した場合は`address`から導出されます。"
                  },
                  "address_element_2": {
                    "type": "string",
                    "description": "部屋番号、ユニット、建物、階、または追加の住所行。明示的に把握している場合にのみ送信してください。"
                  },
                  "address_element_3": {
                    "type": "string",
                    "description": "市区町村、郊外、地区、地域、または近隣地区。省略した場合は`address`から導出されます。"
                  },
                  "address_element_4": {
                    "type": "string",
                    "description": "州、県、地域、または町。省略した場合は`address`から導出されます。"
                  },
                  "address_element_5": {
                    "type": "string",
                    "description": "郵便番号。`postal_code`もエイリアスとして受け付けます。"
                  },
                  "postal_code": {
                    "type": "string",
                    "description": "住所ベースのサービスで使用する郵便番号(`address_element_5`のエイリアス)。"
                  },
                  "driver_license_number": {
                    "type": "string",
                    "description": "政府の書類検証サービス（AUS、NZL、IND）向けの運転免許証番号。"
                  },
                  "driver_license_card_number": {
                    "type": "string",
                    "description": "運転免許証番号とは別に必要な場合の、物理的な運転免許証カードの番号(AUS)。"
                  },
                  "driver_license_state": {
                    "type": "string",
                    "description": "運転免許証の発行州または準州（AUS）。"
                  },
                  "driver_license_version": {
                    "type": "string",
                    "description": "運転免許証のバージョンコード（NZL）。"
                  },
                  "passport_number": {
                    "type": "string",
                    "description": "政府のパスポート検証サービス（AUS、NZL、IND、CHN）で使用するパスポート番号。"
                  },
                  "passport_expiration_date": {
                    "type": "string",
                    "format": "date",
                    "description": "パスポートの有効期限（`YYYY-MM-DD`）。パスポート検証サービスで使用します。"
                  },
                  "passport_file_number": {
                    "type": "string",
                    "description": "パスポートのファイル番号（IND）。"
                  },
                  "passport_issue_country": {
                    "type": "string",
                    "description": "パスポート検証サービスで使用する、パスポートの発行国（ISO 3166-1 alpha-3）です。"
                  },
                  "medicare_card_number": {
                    "type": "string",
                    "description": "Medicareカード番号（オーストラリア）です。"
                  },
                  "immi_card_number": {
                    "type": "string",
                    "description": "オーストラリアのImmiCardの番号。"
                  },
                  "immi_card_expiry_date": {
                    "type": "string",
                    "format": "date",
                    "description": "オーストラリアのImmiCardの有効期限。"
                  },
                  "citizenship_certificate_number": {
                    "type": "string",
                    "description": "市民権証明書番号（AUS）。"
                  },
                  "birth_registration_number": {
                    "type": "string",
                    "description": "出生証明書の登録番号（AUS）。"
                  },
                  "birth_registration_date": {
                    "type": "string",
                    "format": "date",
                    "description": "出生証明書の登録日（AUS）。"
                  },
                  "birth_registration_state": {
                    "type": "string",
                    "description": "出生証明書の登録州（AUS）。"
                  },
                  "marriage_certificate_number": {
                    "type": "string",
                    "description": "婚姻証明書番号（AUS）。"
                  },
                  "change_of_name_certificate_number": {
                    "type": "string",
                    "description": "改名証明書番号（AUS）。"
                  },
                  "first_partner_name": {
                    "type": "string",
                    "description": "結婚証明書に記載された配偶者の名（AUS）。"
                  },
                  "last_partner_name": {
                    "type": "string",
                    "description": "婚姻証明書に記載されたパートナーの姓(AUS)。"
                  },
                  "voter_id": {
                    "type": "string",
                    "description": "有権者登録番号（IND EPIC、IRL）。"
                  },
                  "epic_card": {
                    "type": "string",
                    "description": "インドのEPIC有権者カード番号。"
                  },
                  "pan": {
                    "type": "string",
                    "description": "インドのPAN（Permanent Account Number）。"
                  },
                  "national_id": {
                    "type": "string",
                    "description": "国民ID番号（CHN、MYS、KEN、KHM、NGA、ZAF、…）。"
                  },
                  "cic": {
                    "type": "string",
                    "description": "メキシコINE/IFEのCódigo de Identificación de Credencial（CIC）、9桁。メキシコINE資格証有効性確認サービス（`mex_ine_vigencia`）で使用します。"
                  },
                  "identificador_ciudadano": {
                    "type": "string",
                    "description": "メキシコINEのIdentificador del Ciudadano（9桁）。`mex_ine_vigencia`で、現行INEモデル（E/F/G/H）に対して`cic`と組み合わせて使用します。"
                  },
                  "ocr": {
                    "type": "string",
                    "description": "メキシコINEのOCR番号（13桁、カード裏面）。`mex_ine_vigencia`で、モデルDに対して`cic`と組み合わせて使用します。"
                  },
                  "voter_number": {
                    "type": "string",
                    "description": "メキシコINEのClave de Elector（18文字）。`mex_ine_vigencia`で、旧IFEモデル（A/B/C）に対して`emission_number`と組み合わせて使用します。"
                  },
                  "emission_number": {
                    "type": "string",
                    "description": "メキシコINEのNúmero de Emisión。`mex_ine_vigencia`で、旧IFEモデル（A/B/C）に対して`voter_number`と組み合わせて使用します。"
                  },
                  "bvn": {
                    "type": "string",
                    "description": "ナイジェリアの銀行認証番号(Bank Verification Number)。"
                  },
                  "bank_card_number": {
                    "type": "string",
                    "description": "銀行カード番号（CHNの銀行カード認証）。"
                  },
                  "company_registration_number": {
                    "type": "string",
                    "description": "会社登記所が発行した会社の登記番号です。ブラジルではCNPJ（例：`11222333000181`）、南アフリカでは登記番号（例：`1936/007721/06`）が該当します。法人登記サービスおよび会社取締役サービス（`bra_company_registry`、`bra_company_directors`、`zaf_company_registry`、`zaf_company_directors`）で必須です。"
                  },
                  "company_name": {
                    "type": "string",
                    "description": "登記されている企業名で、登記簿の記載と照合されます。`zaf_company_registry`では省略可能です。"
                  },
                  "initials": {
                    "type": "string",
                    "description": "書類に印字されているこの人物のイニシャルです。`zaf_drivers_license`では必須で、`zaf_bank_account_holder`でも指定できます。"
                  },
                  "licence_number": {
                    "type": "string",
                    "description": "`zaf_drivers_license`用の、カードに記載されている運転免許証番号。省略した場合は`document_number`が使用されます。"
                  },
                  "refugee_file_number": {
                    "type": "string",
                    "description": "南アフリカ内務省（Department of Home Affairs）が発行する難民ファイル番号。`zaf_refugee`で必須です。"
                  },
                  "bank_name": {
                    "type": "string",
                    "description": "口座を保有する銀行の名称。`zaf_bank_account_holder`で必須です。"
                  },
                  "bank_account_number": {
                    "type": "string",
                    "description": "銀行口座番号。`zaf_bank_account_holder`では必須で、`zaf_fraud_prevention`でも指定できます。"
                  },
                  "account_type": {
                    "type": "string",
                    "description": "`zaf_bank_account_holder`用の銀行口座種別です。`current`、`savings`、`transmission`、`subscriptionShare`または`notKnown`のいずれかで、大文字と小文字は区別されません。それ以外の値を指定すると`400`が返されます。種別が不明な場合は省略してください。その場合、口座種別の照合結果は未確認として報告されます。"
                  },
                  "phone_number": {
                    "type": "string",
                    "description": "連絡先の携帯電話番号。連絡可能性を照合するサービス（`zaf_bank_account_holder`、`zaf_fraud_prevention`、`zaf_refugee`）で使用されます。"
                  },
                  "right_thumb": {
                    "type": "string",
                    "description": "`zaf_dha_fingerprint_match`用の、Base64エンコードされた右手親指の指紋です。`left_thumb`と併用するか、単独で指定します。"
                  },
                  "left_thumb": {
                    "type": "string",
                    "description": "`zaf_dha_fingerprint_match`用の、Base64エンコードされた左手親指の指紋です。`right_thumb`と併用するか、単独で指定します。"
                  },
                  "score_level": {
                    "type": "integer",
                    "description": "`zaf_criminal_face_screening`の生体認証スコアレベルの最小値。デフォルトは`3`です。"
                  },
                  "max_matches": {
                    "type": "integer",
                    "description": "`zaf_criminal_face_screening`が返す候補一致の最大数です。デフォルトは`1`です。"
                  },
                  "vehicle_register_number": {
                    "type": "string",
                    "description": "車両登録番号。`zaf_vehicle_ownership`では、`vehicle_licence_plate`および`vin`とともに必須です。"
                  },
                  "vehicle_licence_plate": {
                    "type": "string",
                    "description": "車両のナンバープレート番号。`zaf_vehicle_ownership`では、`vehicle_register_number`および`vin`とともに必須です。"
                  },
                  "vin": {
                    "type": "string",
                    "description": "車両識別番号(VINまたは車台番号)。`zaf_vehicle_ownership`では、`vehicle_register_number`および`vehicle_licence_plate`とともに必須です。"
                  },
                  "ssn": {
                    "type": "string",
                    "description": "社会保障番号(米国)。"
                  },
                  "phone": {
                    "type": "string",
                    "description": "電話番号検証サービス用の電話番号。"
                  },
                  "landline": {
                    "type": "string",
                    "description": "電話番号検証サービス用の固定電話番号。"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "本人確認サービス用のメールアドレス。"
                  },
                  "country_of_residence": {
                    "type": "string",
                    "description": "居住国を示すISO 3166-1 alpha-2コード。グローバルなID情報エンリッチメントサービス（例: `glb_identity_enrichment`）が照会対象を絞り込むために使用します。",
                    "example": "US"
                  },
                  "partial_match_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "NO_ACTION",
                    "description": "`partial_match`の場合に`database_validation.status`がどうなるか。デフォルトは`NO_ACTION`です（ステータスは`Approved`のままで、警告が付きます）。"
                  },
                  "no_match_action": {
                    "type": "string",
                    "enum": [
                      "DECLINE",
                      "NO_ACTION"
                    ],
                    "default": "DECLINE",
                    "description": "`no_match`の場合に`database_validation.status`がどうなるか。デフォルトは`DECLINE`です。"
                  },
                  "save_api_request": {
                    "type": "boolean",
                    "default": true,
                    "description": "検証をセッションとして保存します(コンソールでの表示、判定エンドポイント、`status.updated`のWebhook)。`validations`レスポンスの形式も変わります。`true`(デフォルト)の場合はサービスごとのオブジェクト、`false`の場合は統合されたフィールドマップになります。"
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "検証対象ユーザーに対するお客様側の識別子です。そのまま返され、セッションとともに保存されます。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "リクエストとともに保存され、そのまま返される自由形式のJSON。"
                  },
                  "selfie": {
                    "type": "string",
                    "format": "binary",
                    "description": "生体認証による検証サービス(例: アルゼンチンのRENAPER(`arg_renaper`)、パナマのSIB(`pan_cedula_sib`、`pan_cedula_sib_plus`))用のセルフィー画像(`jpg`、`jpeg`、`png`、`webp`。最大2MB。画像は登記所へのアップロード前に約1.5MBに圧縮されます)です。選択したサービスが必須フィールドとして指定している場合は必ず指定してください。`multipart/form-data`でのみ利用できます。"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/database-validation/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"issuing_state\": \"BRA\",\n    \"services\": [\"bra_cpf\"],\n    \"identification_number\": \"12345678900\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"date_of_birth\": \"1980-01-01\",\n    \"vendor_data\": \"user-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.database_validation.validate(\n    issuing_state=\"BRA\",\n    services=[\"bra_cpf\"],\n    identification_number=\"12345678900\",\n    first_name=\"John\",\n    last_name=\"Doe\",\n    date_of_birth=\"1980-01-01\",\n    vendor_data=\"user-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.databaseValidation.validate({\n  issuing_state: \"BRA\",\n  services: [\"bra_cpf\"],\n  identification_number: \"12345678900\",\n  first_name: \"John\",\n  last_name: \"Doe\",\n  date_of_birth: \"1980-01-01\",\n  vendor_data: \"user-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{\n\tIssuingState:         \"BRA\",\n\tServices:             didit.Some([]string{\"bra_cpf\"}),\n\tIdentificationNumber: didit.String(\"12345678900\"),\n\tFirstName:            didit.String(\"John\"),\n\tLastName:             didit.String(\"Doe\"),\n\tDateOfBirth:          didit.String(\"1980-01-01\"),\n\tVendorData:           didit.String(\"user-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.DatabaseValidationValidateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()\n        .issuingState(\"BRA\")\n        .services(List.of(\"bra_cpf\"))\n        .identificationNumber(\"12345678900\")\n        .firstName(\"John\")\n        .lastName(\"Doe\")\n        .dateOfBirth(LocalDate.parse(\"1980-01-01\"))\n        .vendorData(\"user-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->databaseValidation->validate([\n    'issuing_state' => 'BRA',\n    'services' => ['bra_cpf'],\n    'identification_number' => '12345678900',\n    'first_name' => 'John',\n    'last_name' => 'Doe',\n    'date_of_birth' => '1980-01-01',\n    'vendor_data' => 'user-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.database_validation.validate(\n  issuing_state: \"BRA\",\n  services: [\"bra_cpf\"],\n  identification_number: \"12345678900\",\n  first_name: \"John\",\n  last_name: \"Doe\",\n  date_of_birth: \"1980-01-01\",\n  vendor_data: \"user-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams\n{\n    IssuingState = \"BRA\",\n    Services = new string[] { \"bra_cpf\" },\n    IdentificationNumber = \"12345678900\",\n    FirstName = \"John\",\n    LastName = \"Doe\",\n    DateOfBirth = \"1980-01-01\",\n    VendorData = \"user-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "検証完了。選択したサービスのうち少なくとも1つが利用可能な結果を返しました。集約された結果は`database_validation.match_type`、サービスごとのフィールド比較と`outcome_code`は`validations`、失敗したサービスは`errors`（存在する場合）で確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "`save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。"
                    },
                    "database_validation": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "Approved",
                            "Declined",
                            "In Review"
                          ],
                          "description": "全体の`match_type`が`DECLINE`アクションをトリガーする場合は`Declined`です（`no_match_action`のデフォルトは`DECLINE`、`partial_match_action`のデフォルトは`NO_ACTION`）。どのサービスも利用可能な比較結果を返さなかった場合、たとえば選択した唯一のサービスが`REGISTRY_UNAVAILABLE`または`INCONCLUSIVE`を返した場合は`In Review`、それ以外は`Approved`です。複数のサービスを選択したリクエストでは、あるサービスが利用できなかった場合でも、別のサービスの一致によって`Approved`になることがあります。そのため、`errors`とサービスごとの`outcome_code`もあわせて確認してください。"
                        },
                        "issuing_state": {
                          "type": "string",
                          "description": "検証に使用したISO 3166-1 alpha-3の国コードのエコー。",
                          "example": "BRA"
                        },
                        "validation_type": {
                          "type": "string",
                          "enum": [
                            "one_by_one",
                            "two_by_two"
                          ],
                          "description": "結果から算出されます。2つ以上の異なるサービスで完全一致（識別番号での一致、氏名と生年月日の組み合わせでの一致、または矛盾のない住所での一致）が得られた場合は`two_by_two`、それ以外の場合は`one_by_one`です。（同名のリクエストフィールドは非推奨で、無視されます。）"
                        },
                        "screened_data": {
                          "type": "object",
                          "description": "選択したサービスに送信された入力フィールドをそのまま返します（日付は`YYYY-MM-DD`に正規化されます。`selfie`を送信した場合は署名付きURLとして返されます。同意を得た場合は`consent_obtained: true`が追加されます）。"
                        },
                        "match_type": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "full_match",
                            "partial_match",
                            "no_match"
                          ],
                          "description": "フィールド単位の比較を行うサービス全体で集約された総合結果：いずれかが`full_match`なら`full_match`、そうでなくいずれかが`partial_match`なら`partial_match`、それ以外は`no_match`です。生体認証による犯罪歴スクリーニングなど、結果のみを返すサービスでは`null`が返る場合があります。`validations`内の各アイテムで`outcome_code`を確認してください。"
                        },
                        "validations": {
                          "description": "形式は`save_api_request`によって異なります。**`true`（デフォルト）：**サービスごとのオブジェクト（`service_id`、`service_name`、`validation`、`outcome_code`、`outcome_detail`、`source_data`）の配列です。**`false`：**全サービスのフィールド単位の結果をまとめた単一のフラットなオブジェクト（`{\"full_name\": \"full_match\", ...}`）です。",
                          "oneOf": [
                            {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "description": "サービスごとの検証結果です（`save_api_request=true`の場合に返されます。これがデフォルトです）。",
                                "properties": {
                                  "service_id": {
                                    "type": "string",
                                    "description": "この結果を生成したサービスのカタログID（例: `bra_cpf`）。",
                                    "example": "bra_cpf"
                                  },
                                  "service_name": {
                                    "type": "string",
                                    "description": "サービスのカタログ上の表示名。",
                                    "example": "Brazil - CPF status check"
                                  },
                                  "validation": {
                                    "type": "object",
                                    "description": "入力内容と登記記録とのフィールドごとの比較。キーは正規のフィールド名(`full_name`、`date_of_birth`、`identification_number`、`address`など)で、値は`full_match`、`partial_match`、`no_match`のいずれかです。",
                                    "additionalProperties": {
                                      "type": "string",
                                      "enum": [
                                        "full_match",
                                        "partial_match",
                                        "no_match"
                                      ]
                                    }
                                  },
                                  "outcome_code": {
                                    "type": "string",
                                    "enum": [
                                      "MATCH",
                                      "PARTIAL_MATCH",
                                      "NO_MATCH",
                                      "DOCUMENT_NOT_FOUND",
                                      "INVALID_DOCUMENT_FORMAT",
                                      "INVALID_INPUT",
                                      "MINOR_BLOCKED",
                                      "DECEASED",
                                      "BIOMETRIC_NO_MATCH",
                                      "BIOMETRIC_IMAGE_UNUSABLE",
                                      "INCONCLUSIVE",
                                      "DOCUMENT_SUPERSEDED",
                                      "REGISTRY_UNAVAILABLE",
                                      "REGISTRY_ERROR"
                                    ],
                                    "description": "登記照会のベンダー非依存の結果です。`MATCH`/`PARTIAL_MATCH`/`NO_MATCH`は照合結果を表します。`DOCUMENT_NOT_FOUND`は識別子が登記に存在しないことを意味します。`INCONCLUSIVE`は登記がどちらとも確認できなかったことを意味します(レビューに回されます。不一致ではありません)。`BIOMETRIC_NO_MATCH`は確定的な顔の不一致であり、`BIOMETRIC_IMAGE_UNUSABLE`は画像の技術的な問題です(セルフィーを撮り直してください)。`DECEASED`/`MINOR_BLOCKED`は登記のポリシーによる結果です。`DOCUMENT_SUPERSEDED`は本人は一致したものの、提示された書類の版が登録されている版ではない(新しい版が発行されている)ことを意味します。`INVALID_DOCUMENT_FORMAT`/`INVALID_INPUT`は、送信されたデータを登記側が拒否したことを意味します。`REGISTRY_UNAVAILABLE`/`REGISTRY_ERROR`は上流での障害を示します。"
                                  },
                                  "outcome_detail": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "結果コードの根拠となる、上流の生のステータス詳細（HTTPや登記のステータスコードなど）。"
                                  },
                                  "source_data": {
                                    "type": "object",
                                    "nullable": true,
                                    "description": "正規のフィールド名（`identification_number`、`first_name`、`last_name`、`date_of_birth`、および登記機関固有のフラグ）を使用した、登記記録の整形・正規化済みビューです。画像フィールドが存在する場合は、署名付きURLとして返されます。"
                                  }
                                }
                              }
                            },
                            {
                              "type": "object",
                              "additionalProperties": {
                                "type": "string",
                                "enum": [
                                  "full_match",
                                  "partial_match",
                                  "no_match"
                                ]
                              },
                              "description": "統合されたフィールドレベルの結果（ステートレスな`save_api_request=false`の形式）です。"
                            }
                          ]
                        },
                        "warnings": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "feature": {
                                "type": "string",
                                "description": "警告を発生させた機能。"
                              },
                              "risk": {
                                "type": "string",
                                "description": "機械可読なリスク識別子です。"
                              },
                              "additional_data": {
                                "type": "object",
                                "nullable": true,
                                "description": "警告に関する追加コンテキストです(利用可能な場合)。"
                              },
                              "log_type": {
                                "type": "string",
                                "description": "`warning`、`information`、または`error`。リスクが結果にどう影響したかを示します。"
                              },
                              "short_description": {
                                "type": "string",
                                "description": "人が読める1行の要約です。"
                              },
                              "long_description": {
                                "type": "string",
                                "description": "人が読める形式の詳細な説明。"
                              }
                            }
                          },
                          "description": "該当する場合は`DATABASE_VALIDATION_NO_MATCH`または`DATABASE_VALIDATION_PARTIAL_MATCH`です。完全一致の場合は空になります。"
                        },
                        "errors": {
                          "type": "array",
                          "description": "選択したサービスの一部（すべてではない）が失敗した場合にのみ含まれます。各エントリには`service_id`、`code`、`message`、`retryable`が含まれます。ここで報告されたサービスは`validations`および`services_used`には含まれず、課金されません。このサービスが表示されるのはこの配列のみであるため、`status`が`Approved`の場合でも必ず確認してください。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "service_id": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string",
                                "example": "empty_provider_response"
                              },
                              "message": {
                                "type": "string"
                              },
                              "retryable": {
                                "type": "boolean",
                                "description": "サービスが応答を返さず、後で再試行すれば成功する可能性がある場合は`true`です。送信されたデータをソースが拒否し、先に入力を修正する必要がある場合は`false`です。",
                                "example": true
                              }
                            }
                          }
                        },
                        "services_used": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "課金対象の結果を返したサービスのカタログID。**リクエストで`services`を明示的に送信した場合のみ含まれます。**"
                        },
                        "match_score": {
                          "type": "number",
                          "description": "試行されたサービスのうち、完全一致（識別番号での一致、氏名と生年月日の両方での一致、または矛盾のない住所での一致）となったものの割合（0.0–1.0）。**リクエストで`services`を明示的に送信した場合にのみ含まれます。**"
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`をそのまま返します。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "description": "送信した`metadata`のエコー。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "examples": {
                  "Full match (Approved)": {
                    "summary": "デフォルトはsave_api_request=true：サービスごとの`validations`オブジェクト",
                    "value": {
                      "request_id": "7f9a1c0e-1f2b-4f6e-9d3a-2b1c0e7f9a1c",
                      "database_validation": {
                        "status": "Approved",
                        "issuing_state": "BRA",
                        "validation_type": "one_by_one",
                        "screened_data": {
                          "tax_number": "12345678900",
                          "first_name": "John",
                          "last_name": "Doe",
                          "date_of_birth": "1980-01-01"
                        },
                        "match_type": "full_match",
                        "validations": [
                          {
                            "validation": {
                              "full_name": "full_match",
                              "date_of_birth": "full_match",
                              "identification_number": "full_match"
                            },
                            "outcome_code": "MATCH",
                            "outcome_detail": "200",
                            "service_id": "bra_cpf",
                            "service_name": "Brazil - CPF status check",
                            "source_data": {
                              "identification_number": "12345678900",
                              "first_name": "JOHN",
                              "last_name": "DOE",
                              "date_of_birth": "1980-01-01",
                              "lgpd_minor": false,
                              "minor_under_16": false,
                              "minor_under_18": false
                            }
                          }
                        ],
                        "warnings": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:30:00.000000+00:00"
                    }
                  },
                  "Explicit services (extended shape)": {
                    "summary": "リクエストで`services`を送信すると、レスポンスに`services_used`と`match_score`が追加されます",
                    "value": {
                      "request_id": "b3e7c1a2-9d4f-4f0b-8a6c-5e2d1f0a9b3e",
                      "database_validation": {
                        "status": "Approved",
                        "issuing_state": "BRA",
                        "validation_type": "one_by_one",
                        "screened_data": {
                          "tax_number": "12345678900",
                          "first_name": "John",
                          "last_name": "Doe",
                          "date_of_birth": "1980-01-01"
                        },
                        "match_type": "full_match",
                        "validations": [
                          {
                            "validation": {
                              "full_name": "full_match",
                              "date_of_birth": "full_match",
                              "identification_number": "full_match"
                            },
                            "outcome_code": "MATCH",
                            "outcome_detail": "200",
                            "service_id": "bra_cpf",
                            "service_name": "Brazil - CPF status check",
                            "source_data": {
                              "identification_number": "12345678900",
                              "first_name": "JOHN",
                              "last_name": "DOE",
                              "date_of_birth": "1980-01-01",
                              "lgpd_minor": false,
                              "minor_under_16": false,
                              "minor_under_18": false
                            }
                          }
                        ],
                        "warnings": [],
                        "services_used": [
                          "bra_cpf"
                        ],
                        "match_score": 1.0
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:30:00.000000+00:00"
                    }
                  },
                  "No match (Declined)": {
                    "summary": "登記記録が一致しない（デフォルトは`no_match_action=DECLINE`）",
                    "value": {
                      "request_id": "0a1b2c3d-4e5f-6789-abcd-ef0123456789",
                      "database_validation": {
                        "status": "Declined",
                        "issuing_state": "BRA",
                        "validation_type": "one_by_one",
                        "screened_data": {
                          "tax_number": "12345678900",
                          "first_name": "John",
                          "last_name": "Doe",
                          "date_of_birth": "1980-01-01"
                        },
                        "match_type": "no_match",
                        "validations": [
                          {
                            "validation": {
                              "full_name": "no_match",
                              "date_of_birth": "no_match",
                              "identification_number": "no_match"
                            },
                            "outcome_code": "NO_MATCH",
                            "outcome_detail": "200",
                            "service_id": "bra_cpf",
                            "service_name": "Brazil - CPF status check",
                            "source_data": {
                              "identification_number": "00987654321",
                              "first_name": "TOTALLY",
                              "last_name": "DIFFERENT NAME",
                              "date_of_birth": "1999-01-01",
                              "lgpd_minor": false,
                              "minor_under_16": false,
                              "minor_under_18": false
                            }
                          }
                        ],
                        "warnings": [
                          {
                            "feature": "DATABASE_VALIDATION",
                            "risk": "DATABASE_VALIDATION_NO_MATCH",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Database validation no match",
                            "long_description": "The system identified a no match in the database validation, requiring further investigation."
                          }
                        ]
                      },
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-06-11T10:31:00.000000+00:00"
                    }
                  },
                  "Stateless (save_api_request=false)": {
                    "summary": "`validations`は統合されたフィールドマップにまとめられ、何も保存されません",
                    "value": {
                      "request_id": "c4d5e6f7-8901-2345-6789-abcdef012345",
                      "database_validation": {
                        "status": "Approved",
                        "issuing_state": "BRA",
                        "validation_type": "one_by_one",
                        "screened_data": {
                          "tax_number": "12345678900",
                          "first_name": "John",
                          "last_name": "Doe",
                          "date_of_birth": "1980-01-01"
                        },
                        "match_type": "full_match",
                        "validations": {
                          "full_name": "full_match",
                          "date_of_birth": "full_match",
                          "identification_number": "full_match"
                        },
                        "warnings": []
                      },
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-06-11T10:32:00.000000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：請求は発生しません。プリフライトのフィールドエラーは外部呼び出しの前に発生します。応答が得られなかったすべての試行が入力を明示的に拒否した場合、レスポンスには代わりに`code: provider_rejected_input`と`retryable: false`を含む`validation_errors`が含まれます。再試行する前に入力を修正してください。フィールドレベルの問題にはDRFの標準エンベロープが使われます。カタログの問題では`services`配列（該当する場合は`requires_onboarding`または`services_requiring_consent`も）が返されます。必須フィールド不足のエラーには、不足している各フィールドをそれを要求するサービスに対応付ける`fields_required_by`が含まれます。少なくとも1つの追加識別子を必要とするサービス（例：氏名だけでは検証できない`usa_states_credit_bureau`）は、各サービスを、少なくとも1つが存在しなければならないフィールドに対応付ける`any_field_required_by`を返します。サービスごとにチェックされる形式の問題では`invalid_fields_by_service`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid issuing_state": {
                    "summary": "サポートされていない国です。メッセージには有効なalpha-3コードがすべて記載されます",
                    "value": {
                      "error": [
                        "Invalid issuing state. Valid options are: ARE, ARG, AUS, AUT, BEL, BGD, BOL, BRA, CAN, CHE, CHL, CHN, CIV, COL, CRI, CZE, DEU, DNK, DOM, ECU, ESP, FIN, FRA, GBR, GHA, GLB, GRC, GTM, HKG, HND, IDN, IND, IRL, ITA, KEN, KHM, MAR, MEX, MYS, NGA, NLD, NOR, NZL, OMN, PAN, PER, PHL, POL, PRT, PRY, QAT, SGP, SLV, SVK, SWE, THA, UGA, URY, USA, VEN, ZAF, ZMB, ZWE"
                      ]
                    }
                  },
                  "Missing required fields": {
                    "summary": "選択したサービス全体で必要なフィールドの和集合と、共通フィールドのヒント",
                    "value": {
                      "error": [
                        "Missing required fields: tax_number (or use 'identification_number' which maps to 'tax_number' for BRA)"
                      ],
                      "fields_required_by": {
                        "tax_number": [
                          "bra_cpf"
                        ]
                      }
                    }
                  },
                  "Unknown service id": {
                    "summary": "`services`にカタログに存在しないIDが含まれている",
                    "value": {
                      "services": [
                        "Unknown service_id(s): ['bogus_service']"
                      ]
                    }
                  },
                  "Service not live for country": {
                    "summary": "`services`に別の国のサービス（またはスタブエントリー）が指定されている",
                    "value": {
                      "services": [
                        "Services not currently live for PER: ['bra_cpf']. Available services: ['per_dni', 'per_residential', 'per_tax_registration']"
                      ]
                    }
                  },
                  "Service requires onboarding": {
                    "summary": "サービスは存在しますが、組織ではまだ有効化されていません",
                    "value": {
                      "services": [
                        "Services require onboarding before they can be enabled for AUS: ['aus_australia_driver_licence']. Contact Didit support to activate them."
                      ],
                      "requires_onboarding": [
                        "aus_australia_driver_licence"
                      ]
                    }
                  },
                  "Consent missing": {
                    "summary": "選択したサービスにrequires_consent=trueが設定されていますが、`consent`が`true`ではありませんでした",
                    "value": {
                      "consent": [
                        "Explicit end-user consent is required for these database validation services: ['chn_national_id']. Send `consent=true`."
                      ],
                      "services_requiring_consent": [
                        "chn_national_id"
                      ]
                    }
                  },
                  "Country format rule violation": {
                    "summary": "識別子が国の形式ルール(桁数/数字/正規表現)に適合しません",
                    "value": {
                      "tax_number": [
                        "Invalid tax number for BRA: Brazilian CPF (exactly 11 digits). Must be exactly 11 characters long (got 10)."
                      ]
                    }
                  },
                  "Service-specific format violation": {
                    "summary": "フィールドが、選択したサービス独自の形式要件を満たしていません",
                    "value": {
                      "error": [
                        "One or more fields do not match the format required by the selected service."
                      ],
                      "invalid_fields_by_service": {
                        "chn_national_id": [
                          "national_id_format"
                        ]
                      }
                    }
                  },
                  "Input refused by every attempt": {
                    "summary": "入力内容を修正してから再試行してください",
                    "value": {
                      "error": "The source refused to run this query with the supplied input.",
                      "validation_errors": [
                        {
                          "service_id": "bra_cpf",
                          "code": "provider_rejected_input",
                          "message": "The source refused to run this query with the supplied input.",
                          "retryable": false
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "error": {
                      "description": "リクエストレベルの説明、または事前チェックでのフィールドエラー。",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      ]
                    },
                    "validation_errors": {
                      "type": "array",
                      "description": "未回答のすべての試行で、プリフライト後に入力が拒否された場合に含まれます。",
                      "items": {
                        "type": "object",
                        "properties": {
                          "service_id": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "retryable": {
                            "type": "boolean",
                            "description": "後で再試行することでこのサービス障害が解消される可能性があるかどうかです。falseの場合は、まず指定した入力を修正してください。"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、スクリーニングやプロバイダーの呼び出しが行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "選択されたサービスのいずれからも利用可能な結果が返されませんでした。再試行する前に、各validation_errorsエントリを確認してください。HTTP 502だけでは一時的な障害とは判断できません。retryable: trueを持つempty_provider_responseは、結果が利用できないか原因が不明であることを示します。これには、プライマリが拒否し、その後のフォールバックが利用できなかった場合も含まれます。一方、従来のprovider_invalid_inputおよびprovider_validation_errorエントリは入力の修正が必要であり、retryableが省略される場合があります。料金は一切請求されません。save_api_request=trueの場合、失敗した試行はステータスがNot Finishedのセッションとして記録されます。部分的な失敗の場合は、database_validation.errorsを含む200が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "validation_errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "service_id": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "retryable": {
                            "type": "boolean",
                            "description": "後で再試行することでこのサービス障害が解消される可能性があるかどうかです。falseの場合は、まず指定した入力を修正してください。"
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Provider returned no result": {
                    "summary": "選択されたすべてのサービスが失敗しました",
                    "value": {
                      "error": "Database validation could not be performed. The external validation service did not return a result. Please try again later.",
                      "validation_errors": [
                        {
                          "service_id": "bra_cpf",
                          "code": "empty_provider_response",
                          "message": "The provider did not return a database validation result.",
                          "retryable": true
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/phone/send/": {
      "post": {
        "summary": "電話番号コードを送信",
        "description": "WhatsApp、SMS、またはその他の対応チャネルで電話番号にワンタイムパスコード(OTP)を送信し、[`POST /v3/phone/check/`](/ja/standalone-apis/phone-check)で検証します。\n\n**送信とチェックの対応関係。** 検証の状態は、アプリケーションとE.164形式の`phone_number`の組み合わせで管理されます。チェックの呼び出しは`request_id`を受け取りません。新しい送信ごとに保留中の検証が作成され、その有効期間は**5分間**です。期間が終わる前に、同じ電話番号とユーザーが受け取ったコードでチェックを呼び出してください。検証が保留中の間に同じ番号に対して再度送信を呼び出すと、同じ検証のコードが再送信されます(`status: \"Retry\"`、同じ`request_id`)。この方法で紐づけられる再試行は最大1回(送信は合計2回)です。それ以降の送信では、新しい`request_id`で新規の検証が開始されます。5分間の期間は最初の送信から計測され、再試行によって延長されることはありません。\n\n**配信チャネル。** `options.preferred_channel`でチャネルを選択します(デフォルトは`whatsapp`で、`sms`、`telegram`、`voice`、`rcs`、`viber`、`zalo`にも対応しています)。優先チャネルが宛先の国または番号で利用できない場合、配信は自動的にSMSにフォールバックします。この場合も送信は`Success`を返し、実際に使用されたチャネルはチェックのレスポンス(`phone.verification_method`および`lifecycle`イベント)で報告されます。\n\n**ブランディング。** SMSのコードには、Business Consoleで設定したアプリケーションのSMS送信者名が追加料金なしで付与されます。`options.sms_sender_name`を渡すと1件のコードを別の名前で署名でき、`options.use_white_label_customization: true`を渡すと、送信者名が設定されていない場合にホワイトラベルの公開名が使用されます。WhatsAppのコードは固定メッセージを使用します。Business Consoleで自社のWhatsApp Business番号を接続すると、自社のビジネス名と番号から送信でき、請求はDiditの手数料のみとなります。\n\n**送信ステータス。** `Success`は新しい検証に対してOTPが送信されたこと、`Retry`は保留中の検証に対してOTPが再送信されたこと、`Blocked`は不正防止レイヤーが送信を拒否したことを示します(`reason`を参照してください。例として`repeated_attempts`、`suspicious`、`spam`があります)。`Blocked`となった送信は、高リスクの警告とともに検証を直ちに`Declined`として確定するため、その後のチェックは`Expired or Not Found`を返します。\n\n**請求。** 料金は宛先の国と、実際にメッセージを配信したチャネルによって異なります。[電話番号検証の料金](/ja/getting-started/phone-verification-pricing)を参照してください。無料が保証されるのは`Blocked`の送信のみです。それ以外の未請求の送信試行は、配信が確認されなかった場合や、配信プロバイダーがメッセージを配信不能と報告した場合であっても、検証の確定時または期限切れ時に課金されます。チェックは常に無料です。不正利用防止策として、電話番号検証は組織の初回チャージまで無効になっています(`403`)。\n\n**セッションの永続化。** 新しい検証はすべてAPIタイプのセッションとして永続化されます。`request_id`は`GET /v3/session/{sessionId}/decision/`に渡せる実際のセッションIDであり、検証はBusiness Consoleに表示され、進行に応じて`status.updated`のWebhookが送信されます。\n\n**サンドボックス。** サンドボックスのAPIキーでは配信と請求がスキップされます。リクエストの検証後(不正な形式の入力には引き続き`400`が返されます)、エンドポイントはランダムな`request_id`を含む静的な`Success`ペイロードを返します。メッセージは送信されず、何も永続化されません。サンドボックスのチェックではコード`123456`を使用してください。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない場合または無効な場合は`403`(`{\"detail\": \"You do not have permission to perform this action.\"}`)が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠としてAPIキーごとに毎分300リクエスト、さらに不正利用防止の上限として電話番号ごとに1時間あたり4回の送信試行が適用されます。いずれかを超えると`429`が返されます。",
        "operationId": "post_v3phone_send",
        "x-didit-sdk": {
          "resource": "phone",
          "method": "send_code",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/phone/send/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"phone_number\": \"+14155552671\",\n    \"options\": {\n      \"code_size\": 6,\n      \"preferred_channel\": \"whatsapp\",\n      \"locale\": \"en-US\"\n    },\n    \"vendor_data\": \"user-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.phone.send_code(\n    phone_number=\"+14155552671\",\n    options={\n        \"locale\": \"en-US\",\n        \"preferred_channel\": \"whatsapp\",\n    },\n    vendor_data=\"user-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.phone.sendCode({\n  phone_number: \"+14155552671\",\n  options: {\n    locale: \"en-US\",\n    preferred_channel: \"whatsapp\",\n  },\n  vendor_data: \"user-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Phone.SendCode(ctx, didit.PhoneSendCodeParams{\n\tPhoneNumber: \"+14155552671\",\n\tOptions: didit.Some(didit.PhoneSendCodeParamsOptions{\n\t\tLocale:           didit.String(\"en-US\"),\n\t\tPreferredChannel: didit.Some(didit.PhoneSendCodeParamsOptionsPreferredChannel(\"whatsapp\")),\n\t}),\n\tVendorData: didit.String(\"user-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.PhoneSendCodeParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.phone().sendCode(PhoneSendCodeParams.builder()\n        .phoneNumber(\"+14155552671\")\n        .options(PhoneSendCodeParams.Options.builder()\n                .locale(\"en-US\")\n                .preferredChannel(PhoneSendCodeParams.Options.PreferredChannel.of(\"whatsapp\"))\n                .build())\n        .vendorData(\"user-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->phone->sendCode([\n    'phone_number' => '+14155552671',\n    'options' => [\n        'locale' => 'en-US',\n        'preferred_channel' => 'whatsapp',\n    ],\n    'vendor_data' => 'user-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.phone.send_code(\n  phone_number: \"+14155552671\",\n  options: {\n    locale: \"en-US\",\n    preferred_channel: \"whatsapp\",\n  },\n  vendor_data: \"user-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Phone.SendCodeAsync(new PhoneSendCodeParams\n{\n    PhoneNumber = \"+14155552671\",\n    Options = new PhoneSendCodeParamsOptions\n    {\n        Locale = \"en-US\",\n        PreferredChannel = new PhoneSendCodeParamsOptionsPreferredChannel(\"whatsapp\"),\n    },\n    VendorData = \"user-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "phone_number": {
                    "type": "string",
                    "maxLength": 20,
                    "description": "受信者の電話番号。E.164形式で、先頭の`+`と国番号を含めます（例: `+14155552671`）。番号は検証されたうえでE.164に正規化されます。解析できない番号や無効な番号の場合は、`phone_number`フィールドのエラーとともに`400`が返されます。",
                    "example": "+14155552671"
                  },
                  "options": {
                    "type": "object",
                    "description": "OTP配信のオプション。すべてのフィールドは任意です。",
                    "properties": {
                      "code_size": {
                        "type": "integer",
                        "minimum": 4,
                        "maximum": 8,
                        "default": 6,
                        "description": "OTPの桁数。"
                      },
                      "locale": {
                        "type": "string",
                        "maxLength": 5,
                        "pattern": "^[a-z]{2,3}(-[A-Z]{2,3})?$",
                        "description": "認証メッセージのローカライズに使用するBCP-47ロケール（例：`en-US`、`fr`、`es`）。形式が無効な場合は`400`が返されます。",
                        "example": "en-US"
                      },
                      "preferred_channel": {
                        "type": "string",
                        "enum": [
                          "whatsapp",
                          "sms",
                          "telegram",
                          "voice",
                          "rcs",
                          "viber",
                          "zalo"
                        ],
                        "default": "whatsapp",
                        "description": "優先する配信チャネル。宛先の国または番号でそのチャネルが利用できない場合、メッセージは自動的にSMSにフォールバックします。この場合も送信結果は`Success`と報告されます。"
                      },
                      "use_white_label_customization": {
                        "type": "boolean",
                        "default": false,
                        "description": "`true`の場合、ホワイトラベルで送信されます。アプリケーションにSMS送信者名がない場合、SMSには代わりにホワイトラベルの公開名が記載されます（「123456はAcme Bankの認証コードです」）。SMS送信者名を設定している場合は、このフラグの有無にかかわらずその名前が使用されます。他のチャネルからのSMSフォールバックを含め、SMSメッセージに適用されます。WhatsAppのコードは固定メッセージで送信され、ブランディングされません。デフォルトは`false`です。"
                      },
                      "sms_sender_name": {
                        "type": "string",
                        "nullable": true,
                        "maxLength": 30,
                        "example": "Acme Bank",
                        "description": "このコードのSMSに表示される名前です(\"123456 is your verification code for Acme Bank\")。アプリケーションのSMS送信者名の代わりに使用されます。無料です。1〜30文字で、使用できるのは英字、数字、スペース、および' & - !のみです。数字のみは不可で、単語間のスペースは1つにする必要があります。それ以外の値の場合は`400`が返され、コードは送信されません。省略した場合、`null`または空白の場合は、アプリケーションのSMS送信者名が使用されます。各アプリケーションが新しい名前を使い始められるのは、1日(UTC)あたり2つまでです。それを超えると、コードはアプリケーションの名前で送信されます。他のチャネルからのSMSフォールバックを含め、SMSメッセージに適用されます。WhatsAppのコードにはブランド名は付きません。",
                        "pattern": "^$|^(?![\\d ]+$)[\\p{L}\\p{N}'&!-]+( [\\p{L}\\p{N}'&!-]+)*$"
                      }
                    }
                  },
                  "signals": {
                    "type": "object",
                    "description": "エンドユーザーに関するデバイスおよびネットワークの任意のシグナルで、不正利用や自動化されたトラフィックの検出精度を高めるために不正対策レイヤーへ転送されます。すべてのフィールドは任意です。",
                    "properties": {
                      "ip": {
                        "type": "string",
                        "description": "エンドユーザーのデバイスのIPアドレス。IPv4またはIPv6。",
                        "example": "192.0.2.1"
                      },
                      "device_id": {
                        "type": "string",
                        "maxLength": 255,
                        "description": "エンドユーザーのデバイスの一意の識別子。Android:`ANDROID_ID`、iOS:`identifierForVendor`。",
                        "example": "8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2"
                      },
                      "device_platform": {
                        "type": "string",
                        "enum": [
                          "android",
                          "ios",
                          "ipados",
                          "tvos",
                          "web"
                        ],
                        "description": "エンドユーザーのデバイスのプラットフォーム。"
                      },
                      "device_model": {
                        "type": "string",
                        "maxLength": 255,
                        "description": "エンドユーザーのデバイスの機種。",
                        "example": "iPhone17,2"
                      },
                      "os_version": {
                        "type": "string",
                        "maxLength": 64,
                        "description": "エンドユーザーのデバイスのオペレーティングシステムのバージョンです。",
                        "example": "18.0.1"
                      },
                      "app_version": {
                        "type": "string",
                        "maxLength": 64,
                        "description": "アプリケーションのバージョン。",
                        "example": "1.2.34"
                      },
                      "user_agent": {
                        "type": "string",
                        "maxLength": 512,
                        "description": "エンドユーザーのブラウザまたはアプリのユーザーエージェント。",
                        "example": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1"
                      }
                    }
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "呼び出し側が管理する任意の識別子（社内のユーザーid、メールアドレス、UUIDなど）です。セッションに保存され、送信レスポンス、対応するチェックレスポンス、Webhook、Business Consoleでそのまま返されます。Diditの`request_id`を自社のユーザーレコードと関連付けるために使用してください。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "セッションに保存される任意の自由形式のJSONオブジェクトです。送信レスポンス、対応するチェックのレスポンス、Webhook、Business Consoleでそのまま返されます。"
                  }
                },
                "required": [
                  "phone_number"
                ]
              },
              "examples": {
                "WhatsApp (default)": {
                  "summary": "WhatsAppで送信される6桁のOTP。届かない場合は自動的にSMSにフォールバックします",
                  "value": {
                    "phone_number": "+14155552671",
                    "options": {
                      "preferred_channel": "whatsapp",
                      "locale": "en-US"
                    },
                    "vendor_data": "user-1234"
                  }
                },
                "SMS with custom code length": {
                  "summary": "4桁のコードでSMS配信を強制する",
                  "value": {
                    "phone_number": "+34699999999",
                    "options": {
                      "preferred_channel": "sms",
                      "code_size": 4,
                      "locale": "es"
                    }
                  }
                },
                "With fraud signals": {
                  "summary": "デバイスシグナルを転送して不正対策スクリーニングを強化します",
                  "value": {
                    "phone_number": "+14155552671",
                    "signals": {
                      "ip": "192.0.2.1",
                      "device_id": "8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2",
                      "device_platform": "ios",
                      "device_model": "iPhone17,2",
                      "os_version": "18.0.1",
                      "app_version": "1.2.34"
                    },
                    "vendor_data": "user-1234"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "送信を受け付けました。`status`を確認してください。`Success`と`Retry`はコードが送信中であることを示し、`Blocked`は不正防止レイヤーが拒否し、認証がすでに`Declined`として確定済みであることを示します。`request_id`は永続化されたセッションIDです（`Retry`の場合も同じIDです）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhoneVerificationSendResponse"
                },
                "examples": {
                  "Success": {
                    "summary": "新規認証のためにOTPを送信しました",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Success",
                      "reason": null,
                      "vendor_data": "user-1234",
                      "metadata": null
                    }
                  },
                  "Retry": {
                    "summary": "5分間のウィンドウ内での同じ番号への2回目の送信（request_idは同じ）",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Retry",
                      "reason": null,
                      "vendor_data": "user-1234",
                      "metadata": null
                    }
                  },
                  "Blocked": {
                    "summary": "不正防止による拒否：認証は却下として確定され、請求は発生しません",
                    "value": {
                      "request_id": "0d8af1f4-0c43-46d7-b75c-6e4e22c0a7b3",
                      "status": "Blocked",
                      "reason": "repeated_attempts",
                      "vendor_data": "user-1234",
                      "metadata": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。不正な形式の入力では、DRFのフィールドエラーエンベロープ（問題のあるフィールドごとにメッセージの配列1つ。選択肢のエラーは`options`の下にネスト）が返されます。解析はできても送信時に拒否される番号（到達不能、またはショートコードなど対象外の回線種別）の場合は、代わりに`{\"detail\": ...}`エンベロープが返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid phone number (field error)": {
                    "summary": "番号が有効なE.164形式ではありません",
                    "value": {
                      "phone_number": [
                        "Invalid phone number provided."
                      ]
                    }
                  },
                  "Missing phone number": {
                    "summary": "`phone_number`がボディに含まれていない",
                    "value": {
                      "phone_number": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid options": {
                    "summary": "範囲外の`code_size`、不正な形式の`locale`、不明な`preferred_channel`",
                    "value": {
                      "options": {
                        "code_size": [
                          "Ensure this value is less than or equal to 8."
                        ],
                        "locale": [
                          "Ensure this field has no more than 5 characters."
                        ],
                        "preferred_channel": [
                          "\"carrier_pigeon\" is not a valid choice."
                        ]
                      }
                    }
                  },
                  "Number rejected at send time": {
                    "summary": "E.164形式としては有効だが、その番号ではOTPを受信できない",
                    "value": {
                      "detail": "Invalid phone number provided."
                    }
                  },
                  "Ineligible line type": {
                    "summary": "この回線種別ではOTPを受信できません（例: ショートコード）",
                    "value": {
                      "detail": "Invalid phone line type provided."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に返されます（`{\"detail\": ...}`）。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。また、組織が一度もチャージしたことがない場合（不正利用防止のゲート）や、残高が送信先の送信料金を賄えない場合にも、送信前に返されます（`{\"error\": ...}`）。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Top-up required": {
                    "summary": "組織の初回チャージまで、電話番号検証は無効のままです",
                    "value": {
                      "detail": "To protect against abuse, phone verification is disabled until your first top-up."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高で送信料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。さらに、上流では不正利用防止のため、電話番号ごとに1時間あたり4回の認証試行という上限が適用されます。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。注: `X-RateLimit-*`/`Retry-After`ヘッダーが付くのは1分あたり300件の書き込み制限による429のみです。電話番号ごとの上限による429にはレート制限ヘッダーは含まれません。",
            "content": {
              "application/json": {
                "examples": {
                  "Per-number cap": {
                    "summary": "直近1時間に同じ番号に対して4回を超える認証試行",
                    "value": {
                      "detail": "Maximum verification attempts reached for this phone number. Only 4 authentication attempts are allowed per hour. Try again later or use a different number."
                    }
                  },
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "電話番号検証のプロバイダーが一時的に利用できません。組み込みの再試行後も5xxレスポンス、タイムアウト、または接続失敗が解消しなかった状態です。安全に再試行できます。課金は発生せず、試行回数も消費されません。",
            "content": {
              "application/json": {
                "examples": {
                  "Provider outage": {
                    "summary": "プロバイダーが送信リクエストに応答しませんでした",
                    "value": {
                      "detail": "Phone verification is temporarily unavailable. Please try again shortly.",
                      "code": "phone_provider_unavailable"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "検証の作成中に発生した、既知のプロバイダー障害ではない予期しない障害。安全に再試行できます。",
            "content": {
              "application/json": {
                "examples": {
                  "Provider error": {
                    "summary": "OTPの配信を開始できませんでした",
                    "value": {
                      "detail": "Error creating phone verification"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/phone/check/": {
      "post": {
        "summary": "電話番号コードを確認",
        "description": "[`POST /v3/phone/send/`](/ja/standalone-apis/phone-send)で送信されたOTPを検証し、最終的な検証結果と電話番号インテリジェンスを取得します。電話番号インテリジェンスには、キャリア名と回線種別、仮想番号(VoIP)および使い捨て番号のフラグ、自社のセッション間での番号の重複利用が含まれます。\n\n**検証の照合方法。** 照合はアプリケーションとE.164形式の`phone_number`の組み合わせで行われます。`request_id`は入力として使用されません。直近**5分**以内に作成された保留中の検証のうち、最新のものがチェックされます。該当するものがない場合(未送信、確定済み、または作成から5分以上経過)、エンドポイントは`200`と`status: \"Expired or Not Found\"`を返します。\n\n**試行回数の上限。** 各検証では**3回までコードを入力**できます。1回目と2回目の誤ったコードでは、残りの試行回数と`phone: null`を含む`status: \"Failed\"`が返されます。3回目の誤ったコードで検証は`Declined`として確定し、`VERIFICATION_CODE_ATTEMPTS_EXCEEDED`警告とともに完全な電話番号レポートが返されます。\n\n**結果。** `Approved`：コードが正しく、却下につながるリスクがない場合です。`Declined`：最終状態です。コードは正しいものの却下につながるリスク(下記の`DECLINE`アクション、ブロックリストに登録された番号または高リスクの番号)に該当した場合、または試行回数の上限に達した場合です。`Failed`：コードが誤っており、試行回数が残っている場合です。`Expired or Not Found`：チェック対象がない場合です。`Approved`/`Declined`の場合、`request_id`は送信時の`request_id`(セッションID)と同じで、`phone`には完全なレポート(`carrier`、`is_virtual`、`is_disposable`、`warnings`、`lifecycle`、`matches`)が含まれます。`Failed`および`Expired or Not Found`の場合、`request_id`は1回限りのランダムなUUIDです。\n\n**リスクアクション。** `duplicated_phone_number_action`、`disposable_number_action`、`voip_number_action`は、正しいコードで該当するリスクが検出された場合の動作を決定します。`DECLINE`は最終ステータスを`Declined`に変更します。`NO_ACTION`(デフォルト)はステータスに影響を与えず、リスクを`phone.warnings`に記録します。\n\n**請求。** チェックは無料です。配信は送信側で課金されます([電話番号検証の料金](/ja/getting-started/phone-verification-pricing)を参照)。\n\n**セッションへの反映。** 確定したチェックは、送信時に作成されたセッションを更新し(Business Consoleで確認でき、`GET /v3/session/{sessionId}/decision/`で照会可能)、`status.updated` Webhookを発行します。\n\n**サンドボックス。** サンドボックスのAPIキーでは、すべての処理がスキップされます。形式が正しいコード(4〜8桁、`123456`を含む)であれば、簡略化されたフラットな`phone`オブジェクト(`status`、`phone_number`、`country_code`、`carrier_name`、`line_type`、`flags`)を含む固定の`Approved`ペイロードが返されます。形式が不正な入力の場合は、引き続き`400`が返されます。データは一切保存されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない場合または無効な場合は`403`(`{\"detail\": \"You do not have permission to perform this action.\"}`)が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** APIキーごとに毎分300リクエストの共有書き込み上限があり、さらに上流の不正利用防止上限として番号ごとに1時間あたり4回の試行制限があります。いずれかを超えると`429`が返されます。\n\n**ソーシャルフットプリント。** `enable_social`を`true`に設定すると、`phone_social`ブロックが追加されます。このブロックには、この番号が登録されているオンラインプラットフォームが、カテゴリ別の件数および取得可能なプロフィール詳細とともに含まれます。`profiles_registered: 0`は、プラットフォームを確認した結果、いずれにもこの番号が見つからなかったことを意味し、有効かつ課金対象の回答です。アドオンがリクエストされなかった場合、またはチェックを完了できなかった場合、このブロックは含まれず、その場合は課金されません。請求では、このエンドポイント自体の料金に加えて、リクエストごとに`phone_social`1ユニットが加算されます。",
        "operationId": "post_v3phone_check",
        "x-didit-sdk": {
          "resource": "phone",
          "method": "check_code",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/phone/check/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"phone_number\": \"+14155552671\",\n    \"code\": \"123456\",\n    \"voip_number_action\": \"DECLINE\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.phone.check_code(\n    phone_number=\"+14155552671\",\n    code=\"123456\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.phone.checkCode({\n  phone_number: \"+14155552671\",\n  code: \"123456\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Phone.CheckCode(ctx, didit.PhoneCheckCodeParams{\n\tPhoneNumber: \"+14155552671\",\n\tCode:        \"123456\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.PhoneCheckCodeParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.phone().checkCode(PhoneCheckCodeParams.builder()\n        .phoneNumber(\"+14155552671\")\n        .code(\"123456\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->phone->checkCode([\n    'phone_number' => '+14155552671',\n    'code' => '123456',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.phone.check_code(\n  phone_number: \"+14155552671\",\n  code: \"123456\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Phone.CheckCodeAsync(new PhoneCheckCodeParams\n{\n    PhoneNumber = \"+14155552671\",\n    Code = \"123456\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "phone_number": {
                    "type": "string",
                    "maxLength": 20,
                    "description": "対応する[`POST /v3/phone/send/`](/ja/standalone-apis/phone-send)の呼び出しで使用したものと同じ電話番号で、E.164形式です。この値によって、確認と送信が紐付けられます。",
                    "example": "+14155552671"
                  },
                  "code": {
                    "type": "string",
                    "minLength": 4,
                    "maxLength": 8,
                    "pattern": "^[0-9]{4,8}$",
                    "description": "エンドユーザーが受け取ったOTP。4〜8桁の数字である必要があります。それ以外の場合は試行回数を消費せずに`400`を返します。形式は正しいものの誤ったコードの場合は`200`と`status: \"Failed\"`を返し、3回の試行のうち1回を消費します。",
                    "example": "123456"
                  },
                  "duplicated_phone_number_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "同じ電話番号が、アプリケーションの別のユーザー（異なる`vendor_data`）によってすでに使用されている場合の対応です。`DECLINE`は最終的な`status`を`Declined`に切り替え、`NO_ACTION`はリスクを`phone.warnings`に記録して`phone.matches`を設定します。"
                  },
                  "disposable_number_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "キャリア照会でその番号が一時的な使い捨て回線と判定された場合の処理です（`phone.is_disposable`）。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`はリスクを`phone.warnings`に記録します。"
                  },
                  "voip_number_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "キャリア照会で仮想回線タイプ（`voip`、`isp`、`vpn`）と報告された場合の処理です（`phone.is_virtual`）。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`はリスクを`phone.warnings`に記録します。"
                  },
                  "enable_enrichment": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、その番号に対して電話番号インテリジェンスも実行します（リスクスコア、回線種別、最近番号ポータビリティで移転されたかどうか、信頼指数）。このエンドポイント自体の料金に加えて、リクエストごとに`phone_intelligence_api`1ユニット（定価で$0.05）として課金されます。残高が不足している場合、リクエストは`403`を返します。",
                    "example": false
                  },
                  "phone_intelligence_score_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "電話番号インテリジェンスのリスクスコアがしきい値を超えた場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "phone_type_risk_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "番号が高リスクの回線種別である場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "recent_port_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "番号が最近別の通信事業者にポートアウトされた場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "low_phone_trust_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "電話番号インテリジェンスの信頼性指数がしきい値以下の場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "enable_social": {
                    "type": "boolean",
                    "default": false,
                    "description": "trueの場合、番号のソーシャルフットプリント（その番号が登録されているメッセージング、ソーシャル、EC、ビジネスの各プラットフォーム）も検索します。このエンドポイント自体の料金に加えて、リクエスト1件ごとに`phone_social`1ユニット分が請求されます。",
                    "example": true
                  },
                  "phone_no_social_presence_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "ソーシャルフットプリントチェックで、対象となるいずれのプラットフォームにもこの電話番号が登録されていないと判明した場合のアクション。このエンドポイントで指定できるのはNO_ACTIONとDECLINEのみです。REVIEWは、ワークフロー設定の同名のキーで利用できます。"
                  }
                },
                "required": [
                  "phone_number",
                  "code"
                ]
              },
              "examples": {
                "Default": {
                  "summary": "リスクは記録するが、自動で却下は行わない",
                  "value": {
                    "phone_number": "+14155552671",
                    "code": "123456"
                  }
                },
                "Strict risk policy": {
                  "summary": "VoIP回線と使い捨て回線を自動で却下",
                  "value": {
                    "phone_number": "+14155552671",
                    "code": "123456",
                    "voip_number_action": "DECLINE",
                    "disposable_number_action": "DECLINE"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "チェックが完了しました。誤ったコードや存在しない検証の場合も`200`が返るため、HTTPコードではなく`status`を確認してください。`phone`は確定した結果（`Approved`/`Declined`）の場合のみ値が入り、`Failed`では`null`、`Expired or Not Found`では含まれません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhoneVerificationCheckResponse"
                },
                "examples": {
                  "Approved": {
                    "summary": "正しいコード。通信事業者、ライフサイクル、一致情報を含む完全な電話番号レポート",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Approved",
                      "message": "The verification code is correct.",
                      "phone": {
                        "status": "Approved",
                        "phone_number_prefix": "+1",
                        "phone_number": "4155552671",
                        "full_number": "+14155552671",
                        "country_code": "US",
                        "country_name": "United States",
                        "carrier": {
                          "name": "AT&T",
                          "type": "mobile"
                        },
                        "is_disposable": false,
                        "is_virtual": false,
                        "verification_method": "whatsapp",
                        "verification_attempts": 1,
                        "verified_at": "2026-06-12T01:24:47.311323Z",
                        "warnings": [],
                        "lifecycle": [
                          {
                            "type": "PHONE_VERIFICATION_MESSAGE_SENT",
                            "timestamp": "2026-06-12T01:23:39.580554+00:00",
                            "details": {
                              "status": "Success",
                              "reason": null,
                              "channel": "whatsapp",
                              "actual_channel": "whatsapp"
                            },
                            "fee": 0.0509
                          },
                          {
                            "type": "PHONE_DELIVERY_DELIVERED",
                            "timestamp": "2026-06-12T01:23:43.118220+00:00",
                            "details": {
                              "channel": "whatsapp",
                              "status": "delivered"
                            },
                            "fee": 0
                          },
                          {
                            "type": "VALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:47.311201+00:00",
                            "details": {
                              "code_tried": "123456",
                              "status": "Approved"
                            },
                            "fee": 0
                          },
                          {
                            "type": "PHONE_VERIFICATION_APPROVED",
                            "timestamp": "2026-06-12T01:24:47.384292+00:00",
                            "details": null,
                            "fee": 0
                          }
                        ],
                        "matches": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.401719+00:00"
                    }
                  },
                  "Failed (attempts remaining)": {
                    "summary": "コードが正しくありません。ユーザーは再試行できます。ここでのrequest_idは使い捨てのUUIDです",
                    "value": {
                      "request_id": "11111111-2222-3333-4444-555555555555",
                      "status": "Failed",
                      "message": "The verification code is incorrect. Attempts remaining: 2",
                      "phone": null,
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:21.512340+00:00"
                    }
                  },
                  "Declined (max attempts)": {
                    "summary": "3回目の誤ったコード。認証はDeclinedとして確定します",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Declined",
                      "message": "The verification code is incorrect. Maximum attempts reached.",
                      "phone": {
                        "status": "Declined",
                        "phone_number_prefix": "+1",
                        "phone_number": "4155552671",
                        "full_number": "+14155552671",
                        "country_code": "US",
                        "country_name": "United States",
                        "carrier": {
                          "name": "AT&T",
                          "type": "mobile"
                        },
                        "is_disposable": false,
                        "is_virtual": false,
                        "verification_method": "whatsapp",
                        "verification_attempts": 1,
                        "verified_at": null,
                        "warnings": [
                          {
                            "feature": "PHONE",
                            "risk": "VERIFICATION_CODE_ATTEMPTS_EXCEEDED",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Verification code attempts exceeded",
                            "long_description": "The system detected that the phone number has exceeded the maximum number of verification code attempts."
                          }
                        ],
                        "lifecycle": [
                          {
                            "type": "PHONE_VERIFICATION_MESSAGE_SENT",
                            "timestamp": "2026-06-12T01:23:39.580554+00:00",
                            "details": {
                              "status": "Success",
                              "reason": null,
                              "channel": "whatsapp",
                              "actual_channel": "whatsapp"
                            },
                            "fee": 0.0509
                          },
                          {
                            "type": "INVALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:01.118220+00:00",
                            "details": {
                              "code_tried": "111111",
                              "status": "Failed"
                            },
                            "fee": 0
                          },
                          {
                            "type": "INVALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:21.512340+00:00",
                            "details": {
                              "code_tried": "222222",
                              "status": "Failed"
                            },
                            "fee": 0
                          },
                          {
                            "type": "INVALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:47.311201+00:00",
                            "details": {
                              "code_tried": "333333",
                              "status": "Failed"
                            },
                            "fee": 0
                          },
                          {
                            "type": "PHONE_VERIFICATION_DECLINED",
                            "timestamp": "2026-06-12T01:24:47.384292+00:00",
                            "details": {
                              "reason": "VERIFICATION_CODE_ATTEMPTS_EXCEEDED"
                            },
                            "fee": 0
                          }
                        ],
                        "matches": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.401719+00:00"
                    }
                  },
                  "Declined (risk policy)": {
                    "summary": "コードは正しいが、回線がVoIPで、voip_number_action=DECLINEの場合",
                    "value": {
                      "request_id": "7f1c9d2e-44a1-4b6e-9a3e-5b8e6f1c2d3a",
                      "status": "Declined",
                      "message": "The verification code is correct.",
                      "phone": {
                        "status": "Declined",
                        "phone_number_prefix": "+1",
                        "phone_number": "5005550006",
                        "full_number": "+15005550006",
                        "country_code": "US",
                        "country_name": "United States",
                        "carrier": {
                          "name": "CLEC LLC",
                          "type": "voip"
                        },
                        "is_disposable": false,
                        "is_virtual": true,
                        "verification_method": "sms",
                        "verification_attempts": 1,
                        "verified_at": "2026-06-12T01:24:47.311323Z",
                        "warnings": [
                          {
                            "feature": "PHONE",
                            "risk": "VOIP_NUMBER_DETECTED",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "VoIP number detected",
                            "long_description": "The system detected that the phone number is a VoIP number, which is not allowed."
                          }
                        ],
                        "lifecycle": [
                          {
                            "type": "PHONE_VERIFICATION_MESSAGE_SENT",
                            "timestamp": "2026-06-12T01:23:39.580554+00:00",
                            "details": {
                              "status": "Success",
                              "reason": null,
                              "channel": "whatsapp",
                              "actual_channel": "sms"
                            },
                            "fee": 0.0509
                          },
                          {
                            "type": "VALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:47.311201+00:00",
                            "details": {
                              "code_tried": "123456",
                              "status": "Approved"
                            },
                            "fee": 0
                          },
                          {
                            "type": "PHONE_VERIFICATION_DECLINED",
                            "timestamp": "2026-06-12T01:24:47.384292+00:00",
                            "details": {
                              "reason": "VOIP_NUMBER_DETECTED"
                            },
                            "fee": 0
                          }
                        ],
                        "matches": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.401719+00:00"
                    }
                  },
                  "Expired or Not Found": {
                    "summary": "過去5分間にこの番号の保留中の検証はありません",
                    "value": {
                      "request_id": "69cc35c6-280a-47a6-ab8c-4f32abc02ed0",
                      "status": "Expired or Not Found",
                      "message": "No pending phone verification found in the last 5 minutes.",
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.311323+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：DRFのフィールドエラーエンベロープです。問題のあるフィールドごとにメッセージの配列が1つ返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid code format": {
                    "summary": "`code`が4〜8桁の数字ではありません",
                    "value": {
                      "code": [
                        "Invalid code format. Enter 4 to 8 numeric digits."
                      ]
                    }
                  },
                  "Invalid phone number": {
                    "summary": "`phone_number`が有効なE.164形式ではない",
                    "value": {
                      "phone_number": [
                        "Invalid phone number provided."
                      ]
                    }
                  },
                  "Invalid action": {
                    "summary": "リスクアクションにはNO_ACTIONまたはDECLINEのみ指定できます",
                    "value": {
                      "voip_number_action": [
                        "\"REVIEW\" is not a valid choice."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。チェックは無料のため、ここではクレジットの確認は行われません。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。さらに、上流では不正利用防止のため、電話番号ごとに1時間あたり4回の認証試行という上限が適用されます。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。注: `X-RateLimit-*`/`Retry-After`ヘッダーが付くのは1分あたり300件の書き込み制限による429のみです。電話番号ごとの上限による429にはレート制限ヘッダーは含まれません。",
            "content": {
              "application/json": {
                "examples": {
                  "Per-number cap": {
                    "summary": "直近1時間に同じ番号に対して4回を超える認証試行",
                    "value": {
                      "detail": "Maximum verification attempts reached for this phone number. Only 4 authentication attempts are allowed per hour. Try again later or use a different number."
                    }
                  },
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "電話番号検証のプロバイダーが一時的に利用できません。組み込みの再試行後も5xxレスポンス、タイムアウト、または接続失敗が解消しなかった状態です。安全に再試行できます。試行回数の上限は消費されません。",
            "content": {
              "application/json": {
                "examples": {
                  "Provider outage": {
                    "summary": "プロバイダーがチェックリクエストに応答しませんでした",
                    "value": {
                      "detail": "Phone verification is temporarily unavailable. Please try again shortly.",
                      "code": "phone_provider_unavailable"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "上流でのコード検証中に発生した、既知のプロバイダー障害ではない予期しない障害。安全に再試行できます。試行回数の上限は、完了したチェックによってのみ消費されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Provider error": {
                    "summary": "コード検証を完了できませんでした",
                    "value": {
                      "detail": "Error checking phone verification"
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/bank/account-check/": {
      "post": {
        "summary": "銀行口座を確認",
        "description": "**本番環境ではまだ利用できません。** 銀行口座検証は本番環境で無効になっているため、有効になるまで、このエンドポイントは`404`と`bank_verification_not_available`を返します。まだこのエンドポイントを前提に構築しないでください。以下の説明は、利用可能になった後のエンドポイントの動作です。\n\n送金する前に、銀行口座が指定した個人または企業のものであることを確認します。セッションもサインインも不要です。名前と口座を送信し、結果を読み取ります。これは銀行口座検証ステップの[口座チェック](/ja/core-technology/bank-verification/account-check)を、バックエンドから実行するものです。\n\n**送信する内容。** 口座の`country`（ISO 3166-1 alpha-3）、その国の表記形式による`account`、および`holder`の名前（個人の場合は`full_name`、企業の場合は`business_name`）です。企業名を指定すると、法人口座をチェックします。\n\n**返される内容。** `result`は`match`、`close_match`、`no_match`、`cannot_verify`のいずれかです。`close_match`の場合、銀行が返したときは、`holder_name`に銀行がその口座を登録している名義が入ります。`account`は末尾4文字以外がマスクされて返されます。\n\n**請求。** 銀行が応答したチェックは、結果にかかわらず、口座の国の口座チェック料金で1回請求されます。`no_match`、存在しない口座、`cannot_verify`も請求対象です。エラーで応答したリクエストが請求されることはありません。\n\n**すべてのリクエストは新しいチェックです。** 冪等性キーも、チェック結果を再取得するエンドポイントもないため、再試行したリクエストは再度実行され、再度請求されます。レスポンスを保存してください。\n\n**サンドボックス。** 銀行口座検証が利用可能な場合、サンドボックスキーはどの銀行も呼び出さず、料金も発生しません。IBANの末尾4文字（IBANがない場合は口座番号の末尾4文字）によって応答が決まります。`0001`は`holder_name`付きの`close_match`、`0002`は名義なしの`close_match`、`0003`と`0006`は`no_match`、`0004`は`cannot_verify`、`0005`は`503`、`0009`は`400`です。それ以外の末尾はすべて`match`になります。\n\n**APIキー。** スコープ付きAPIキーには、セッションへの書き込み権限が必要です。",
        "operationId": "post_v3_bank_account_check",
        "tags": [
          "Standalone APIs"
        ],
        "x-didit-sdk": {
          "resource": "bank",
          "method": "account_check",
          "auth": "api_key",
          "server": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankAccountCheckRequest"
              },
              "examples": {
                "Person, United Kingdom": {
                  "summary": "本人の氏名と照合されるソートコードと口座番号",
                  "value": {
                    "country": "GBR",
                    "account": {
                      "sort_code": "20-45-67",
                      "account_number": "31926819"
                    },
                    "holder": {
                      "full_name": "Maria Oliveira"
                    },
                    "vendor_data": "payout_20481"
                  }
                },
                "Company, IBAN": {
                  "summary": "企業名と照合されるIBAN",
                  "value": {
                    "country": "DEU",
                    "account": {
                      "iban": "DE89 3704 0044 0532 0130 00"
                    },
                    "holder": {
                      "business_name": "Northwind Trading GmbH"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "銀行が応答しました。結果にかかわらず、チェックは課金されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckResponse"
                },
                "examples": {
                  "Close match": {
                    "summary": "銀行は類似した名義で口座を保有しています",
                    "value": {
                      "request_id": "c2f4a9e0-7b1d-4c3a-9e55-1d0a6b8f2a47",
                      "result": "close_match",
                      "holder_name": "MARIA R OLIVEIRA",
                      "account": "****6819",
                      "vendor_data": "payout_20481",
                      "created_at": "2026-10-21T14:32:08Z"
                    }
                  },
                  "Match": {
                    "summary": "銀行は送信された名義で口座を保有しています",
                    "value": {
                      "request_id": "5b0e2d7c-41a8-4f6e-9c3b-8e7d1a2f6c90",
                      "result": "match",
                      "holder_name": null,
                      "account": "****3000",
                      "vendor_data": null,
                      "created_at": "2026-10-21T14:35:41Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "送信された内容では受け付けられず、請求も発生しません。`field`は修正が必要なボディのフィールド名を、`reason`はその理由を示します。理由はホスト型アカウントフォームに表示されるものと同じです。報告されるのは最初に拒否されたフィールドのみです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckError"
                },
                "examples": {
                  "Missing field": {
                    "summary": "この国のチェックにはソートコードが必要です",
                    "value": {
                      "detail": "The sort code is not valid (required).",
                      "code": "invalid_account_input",
                      "field": "account.sort_code",
                      "reason": "required"
                    }
                  },
                  "Invalid IBAN": {
                    "summary": "IBANの長さがその国の形式と一致しません",
                    "value": {
                      "detail": "The iban is not valid (length).",
                      "code": "invalid_account_input",
                      "field": "account.iban",
                      "reason": "length"
                    }
                  },
                  "Refused by the bank": {
                    "summary": "銀行は送信された口座を拒否しました",
                    "value": {
                      "detail": "The account was refused as typed (rejected).",
                      "code": "invalid_account_input",
                      "field": "account.account_number",
                      "reason": "rejected"
                    }
                  },
                  "No name": {
                    "summary": "`holder`に`full_name`も`business_name`もありません",
                    "value": {
                      "detail": "Send full_name for a person or business_name for a company.",
                      "code": "invalid_account_input",
                      "field": "holder",
                      "reason": "required"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckError"
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "チェックの料金を支払えないため、チェックは実行されませんでした。残高をチャージしてから、再度送信してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckError"
                },
                "examples": {
                  "Out of credit": {
                    "summary": "残高が1回のチェック分に足りません",
                    "value": {
                      "detail": "You don't have enough credits to perform this request. Please top up at https://business.didit.me",
                      "code": "insufficient_credits"
                    }
                  },
                  "Not in your contract": {
                    "summary": "契約にAccount check APIの料金が設定されていません",
                    "value": {
                      "detail": "Your contract does not price the Account check API. Contact your account manager.",
                      "code": "contract_rate_missing"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーまたはBearerトークンがないか無効です。または、リクエストがキーのIPリスト外のアドレスから送信されたか、スコープ付きキーにセッションへの書き込み権限がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckError"
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "有効なAPIキーまたはトークンがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "No sessions write": {
                    "summary": "セッションへの書き込み権限を持たないスコープ付きキー",
                    "value": {
                      "detail": "This API key has no write access to sessions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この口座に対応する口座チェックがまだないため、チェックも請求も行われていません。`country_not_covered`:その国、またはその国におけるその種類の口座(個人または企業)に対応するものがありません。`bank_not_covered`:その銀行に対応するものがありません。`bank_verification_not_available`:Bank Verificationが本番環境でまだ有効になっていません。有効化されるまで、本番環境ではすべてのリクエストに対してこの回答が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckError"
                },
                "examples": {
                  "Country not covered": {
                    "summary": "この国に対応する口座チェックがありません",
                    "value": {
                      "detail": "No account check serves this country yet.",
                      "code": "country_not_covered"
                    }
                  },
                  "Bank not covered": {
                    "summary": "この口座の銀行に対応する口座チェックがありません",
                    "value": {
                      "detail": "No account check serves this account's bank yet.",
                      "code": "bank_not_covered"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          },
          "503": {
            "description": "銀行が応答できませんでした。チェックも課金も行われていません。後でもう一度チェックを送信してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankAccountCheckError"
                },
                "examples": {
                  "Unavailable": {
                    "summary": "銀行が応答しませんでした",
                    "value": {
                      "detail": "The account check is temporarily unavailable and this request was not charged. Please try again.",
                      "code": "account_check_unavailable"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/bank/account-check/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"country\": \"GBR\",\n    \"account\": {\"sort_code\": \"20-45-67\", \"account_number\": \"31926819\"},\n    \"holder\": {\"full_name\": \"Maria Oliveira\"},\n    \"vendor_data\": \"payout_20481\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.bank.account_check(\n    country=\"GBR\",\n    account={\n        \"account_number\": \"31926819\",\n        \"sort_code\": \"20-45-67\",\n    },\n    holder={\n        \"full_name\": \"Maria Oliveira\",\n    },\n    vendor_data=\"payout_20481\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.bank.accountCheck({\n  country: \"GBR\",\n  account: {\n    account_number: \"31926819\",\n    sort_code: \"20-45-67\",\n  },\n  holder: {\n    full_name: \"Maria Oliveira\",\n  },\n  vendor_data: \"payout_20481\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Bank.AccountCheck(ctx, didit.BankAccountCheckRequest{\n\tCountry: \"GBR\",\n\tAccount: didit.BankAccountCheckRequestAccount{\n\t\tAccountNumber: didit.String(\"31926819\"),\n\t\tSortCode:      didit.String(\"20-45-67\"),\n\t},\n\tHolder: didit.BankAccountCheckHolder{\n\t\tFullName: didit.String(\"Maria Oliveira\"),\n\t},\n\tVendorData: didit.String(\"payout_20481\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BankAccountCheckHolder;\nimport me.didit.types.BankAccountCheckPersonHolder;\nimport me.didit.types.BankAccountCheckRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.bank().accountCheck(BankAccountCheckRequest.builder()\n        .country(\"GBR\")\n        .account(BankAccountCheckRequest.Account.builder()\n                .accountNumber(\"31926819\")\n                .sortCode(\"20-45-67\")\n                .build())\n        .holder(BankAccountCheckHolder.ofBankAccountCheckPersonHolder(BankAccountCheckPersonHolder.builder()\n                .fullName(\"Maria Oliveira\")\n                .build()))\n        .vendorData(\"payout_20481\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->bank->accountCheck([\n    'country' => 'GBR',\n    'account' => [\n        'account_number' => '31926819',\n        'sort_code' => '20-45-67',\n    ],\n    'holder' => [\n        'full_name' => 'Maria Oliveira',\n    ],\n    'vendor_data' => 'payout_20481',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.bank.account_check(\n  country: \"GBR\",\n  account: {\n    account_number: \"31926819\",\n    sort_code: \"20-45-67\",\n  },\n  holder: {\n    full_name: \"Maria Oliveira\",\n  },\n  vendor_data: \"payout_20481\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Bank.AccountCheckAsync(new BankAccountCheckRequest\n{\n    Country = \"GBR\",\n    Account = new()\n    {\n        AccountNumber = \"31926819\",\n        SortCode = \"20-45-67\",\n    },\n    Holder = new()\n    {\n        FullName = \"Maria Oliveira\",\n    },\n    VendorData = \"payout_20481\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/email/send/": {
      "post": {
        "summary": "メールコードを送信",
        "description": "メールアドレスにワンタイムパスコード（OTP）を送信し、[`POST /v3/email/check/`](/ja/standalone-apis/email-check)で検証します。\n\n**送信と確認の対応関係。** 検証の状態は、アプリケーションと`email`アドレスの組み合わせで識別されます。確認の呼び出しでは`request_id`を受け取りません。新たに送信するたびに保留中の検証が作成され、その有効期間は**5分**です。期限内に、同じアドレスとユーザーが受け取ったコードを指定して確認を呼び出してください。検証が保留中の間に同じアドレスへ再度送信すると、同じ検証に対して新しいコードが生成されます（`status: \"Retry\"`、`request_id`は同じ）。以前のコードは使用できなくなります。この方法で追加できる再試行は最大1回です（送信は合計2回）。それ以降の送信では、新しい`request_id`で新しい検証が開始されます。5分の期間は最初の送信から計測され、再試行によって延長されることはありません。\n\n**配信可能性の事前チェック。** 送信の前に、アドレスは構文チェックとDNS/MXの検証を受けます。メールを受信できないアドレスでは、`200`と`status: \"Undeliverable\"`、`reason: \"email_can_not_be_delivered\"`が返されます。メールは送信されず、料金も請求されず、検証は直ちに`Declined`として確定します（その後の確認では`Expired or Not Found`が返されます）。後段の送信処理が失敗した場合も同じ形で報告されます。\n\n**コードの形式とブランディング。** コードは4〜8文字（`options.code_size`、デフォルトは6）で、デフォルトでは数字のみです。`options.alphanumeric_code: true`を設定すると英大文字と数字を使用します（確認時の比較では大文字と小文字を区別しません）。メールテンプレートは`options.locale`でローカライズでき（54言語に対応）、`options.use_white_label_customization`でアプリケーションのホワイトラベルのブランディングを使用できます。\n\n**請求。** 送信に成功するたび（`status: \"Success\"`）にメールアドレス認証APIのクレジットが1つ消費され、送信時に課金されます。`Retry`と`Undeliverable`の送信は無料で、確認も無料です。\n\n**セッションの保存。** 新しい検証はすべてAPIタイプのセッションとして保存されます。`request_id`は実際のセッションIDで、`GET /v3/session/{sessionId}/decision/`に渡すことができます。検証はBusiness Consoleに表示され、進行に応じて`status.updated`のWebhookが送信されます。\n\n**サンドボックス。** サンドボックスのAPIキーでは配信と請求がスキップされます。リクエストの検証後（不正な入力には引き続き`400`が返されます）、エンドポイントはランダムな`request_id`を含む固定の`Success`ペイロードを返します。メールは送信されず、何も保存されません。サンドボックスでの確認にはコード`123456`を使用してください。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない、または無効な場合は`403`（`{\"detail\": \"You do not have permission to perform this action.\"}`）が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`が返されます。",
        "operationId": "post_v3email_send",
        "x-didit-sdk": {
          "resource": "email",
          "method": "send_code",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/email/send/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"alice@example.com\",\n    \"options\": { \"code_size\": 6, \"locale\": \"en\" },\n    \"vendor_data\": \"user-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.email.send_code(\n    email=\"alice@example.com\",\n    options={\n        \"locale\": \"en\",\n    },\n    vendor_data=\"user-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.email.sendCode({\n  email: \"alice@example.com\",\n  options: {\n    locale: \"en\",\n  },\n  vendor_data: \"user-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Email.SendCode(ctx, didit.EmailSendCodeParams{\n\tEmail: \"alice@example.com\",\n\tOptions: didit.Some(didit.EmailSendCodeParamsOptions{\n\t\tLocale: didit.Some(didit.EmailSendCodeParamsOptionsLocale(\"en\")),\n\t}),\n\tVendorData: didit.String(\"user-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.EmailSendCodeParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.email().sendCode(EmailSendCodeParams.builder()\n        .email(\"alice@example.com\")\n        .options(EmailSendCodeParams.Options.builder()\n                .locale(EmailSendCodeParams.Options.Locale.of(\"en\"))\n                .build())\n        .vendorData(\"user-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->email->sendCode([\n    'email' => 'alice@example.com',\n    'options' => [\n        'locale' => 'en',\n    ],\n    'vendor_data' => 'user-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.email.send_code(\n  email: \"alice@example.com\",\n  options: {\n    locale: \"en\",\n  },\n  vendor_data: \"user-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Email.SendCodeAsync(new EmailSendCodeParams\n{\n    Email = \"alice@example.com\",\n    Options = new EmailSendCodeParamsOptions\n    {\n        Locale = new EmailSendCodeParamsOptionsLocale(\"en\"),\n    },\n    VendorData = \"user-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "受信者のメールアドレス。形式が不正なアドレスは`400`を返します。構文上は有効でもメールを受信できないアドレス(DNS/MX検証に失敗したもの)は、`status: \"Undeliverable\"`とともに`200`を返します。",
                    "example": "alice@example.com"
                  },
                  "options": {
                    "type": "object",
                    "description": "OTPの形式、ローカライズ、ブランディングのオプション。すべてのフィールドは任意です。",
                    "properties": {
                      "code_size": {
                        "type": "integer",
                        "minimum": 4,
                        "maximum": 8,
                        "default": 6,
                        "description": "OTPの文字数（デフォルトでは数字、`alphanumeric_code`が`true`の場合は英大文字と数字）。"
                      },
                      "alphanumeric_code": {
                        "type": "boolean",
                        "default": false,
                        "description": "`true`の場合、OTPは数字のみではなく、大文字`A–Z`と数字`0–9`で構成されます。`/v3/email/check/`での照合では、大文字と小文字は区別されません。"
                      },
                      "locale": {
                        "type": "string",
                        "maxLength": 5,
                        "enum": [
                          "en",
                          "ar",
                          "bn",
                          "bg",
                          "bs",
                          "ca",
                          "cs",
                          "da",
                          "de",
                          "el",
                          "es",
                          "et",
                          "fa",
                          "fi",
                          "fr",
                          "he",
                          "hi",
                          "hr",
                          "hu",
                          "hy",
                          "id",
                          "it",
                          "ja",
                          "ka",
                          "kk",
                          "ko",
                          "ky",
                          "lt",
                          "lv",
                          "cnr",
                          "mk",
                          "mn",
                          "ms",
                          "nl",
                          "no",
                          "pl",
                          "pt-BR",
                          "pt",
                          "ro",
                          "ru",
                          "sk",
                          "sl",
                          "so",
                          "sq",
                          "sr",
                          "sv",
                          "th",
                          "tr",
                          "uk",
                          "uz",
                          "vi",
                          "zh-CN",
                          "zh-TW",
                          "zh"
                        ],
                        "description": "OTPメールテンプレートの言語。デフォルトは`en`です。対応していない値を指定すると`400`が返され、対応しているすべてのロケールが一覧表示されます。",
                        "example": "en"
                      },
                      "use_white_label_customization": {
                        "type": "boolean",
                        "default": false,
                        "description": "`true`の場合、OTPメールにはデフォルトのDiditテンプレートではなく、アプリケーションのホワイトラベルのカスタマイズ（ロゴ、色、送信者のブランディング）が使用されます。"
                      }
                    }
                  },
                  "signals": {
                    "type": "object",
                    "description": "エンドユーザーに関するデバイスおよびネットワークの任意のシグナルで、不正利用や自動化されたトラフィックの検出精度を高めるために不正対策レイヤーへ転送されます。すべてのフィールドは任意です。",
                    "properties": {
                      "ip": {
                        "type": "string",
                        "description": "エンドユーザーのデバイスのIPアドレス。IPv4またはIPv6。",
                        "example": "192.0.2.1"
                      },
                      "device_id": {
                        "type": "string",
                        "maxLength": 255,
                        "description": "エンドユーザーのデバイスの一意の識別子。Android:`ANDROID_ID`、iOS:`identifierForVendor`。",
                        "example": "8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2"
                      },
                      "device_platform": {
                        "type": "string",
                        "enum": [
                          "android",
                          "ios",
                          "ipados",
                          "tvos",
                          "web"
                        ],
                        "description": "エンドユーザーのデバイスのプラットフォーム。"
                      },
                      "device_model": {
                        "type": "string",
                        "maxLength": 255,
                        "description": "エンドユーザーのデバイスの機種。",
                        "example": "iPhone17,2"
                      },
                      "os_version": {
                        "type": "string",
                        "maxLength": 64,
                        "description": "エンドユーザーのデバイスのオペレーティングシステムのバージョンです。",
                        "example": "18.0.1"
                      },
                      "app_version": {
                        "type": "string",
                        "maxLength": 64,
                        "description": "アプリケーションのバージョン。",
                        "example": "1.2.34"
                      },
                      "user_agent": {
                        "type": "string",
                        "maxLength": 512,
                        "description": "エンドユーザーのブラウザまたはアプリのユーザーエージェント。",
                        "example": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1"
                      }
                    }
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "呼び出し側が管理する任意の識別子（社内のユーザーid、メールアドレス、UUIDなど）です。セッションに保存され、送信レスポンス、対応するチェックレスポンス、Webhook、Business Consoleでそのまま返されます。Diditの`request_id`を自社のユーザーレコードと関連付けるために使用してください。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "セッションに保存される任意の自由形式のJSONオブジェクトです。送信レスポンス、対応するチェックのレスポンス、Webhook、Business Consoleでそのまま返されます。"
                  }
                },
                "required": [
                  "email"
                ]
              },
              "examples": {
                "Numeric 6-digit code": {
                  "summary": "デフォルト：英語の6桁の数字コード",
                  "value": {
                    "email": "alice@example.com",
                    "options": {
                      "locale": "en"
                    },
                    "vendor_data": "user-1234"
                  }
                },
                "Alphanumeric 8-character code": {
                  "summary": "大文字の英字と数字、スペイン向けテンプレート",
                  "value": {
                    "email": "bob@example.com",
                    "options": {
                      "code_size": 8,
                      "alphanumeric_code": true,
                      "locale": "es"
                    }
                  }
                },
                "White-label branding": {
                  "summary": "アプリケーションのホワイトラベルのカスタマイズを適用してOTPメールを送信する",
                  "value": {
                    "email": "carol@example.com",
                    "options": {
                      "locale": "en",
                      "use_white_label_customization": true
                    },
                    "vendor_data": "user-5678"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "送信を受け付けました。`status`を確認してください。`Success`と`Retry`はコードが送信中であることを示し、`Undeliverable`はそのアドレスがメールを受信できず、認証がすでに`Declined`として確定済みであることを示します。`request_id`は永続化されたセッションIDです（`Retry`の場合も同じIDです）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailVerificationSendResponse"
                },
                "examples": {
                  "Success": {
                    "summary": "新規認証のためにOTPをメールで送信しました(課金対象)",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Success",
                      "reason": null,
                      "vendor_data": "user-1234",
                      "metadata": null
                    }
                  },
                  "Retry": {
                    "summary": "5分間のウィンドウ内での2回目の送信（新しいコード、同じrequest_id、無料）",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Retry",
                      "reason": null,
                      "vendor_data": "user-1234",
                      "metadata": null
                    }
                  },
                  "Undeliverable": {
                    "summary": "アドレスがDNS/MX検証に失敗しました。検証は却下として確定し、課金は発生しません",
                    "value": {
                      "request_id": "cb1a5011-344d-444d-bdce-218904745d7f",
                      "status": "Undeliverable",
                      "reason": "email_can_not_be_delivered",
                      "vendor_data": "user-1234",
                      "metadata": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：DRFのフィールドエラーエンベロープです。問題のあるフィールドごとにメッセージの配列が1つ返され、オプションのエラーは`options`の下にネストされます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid email": {
                    "summary": "メールアドレスの形式が不正です",
                    "value": {
                      "email": [
                        "Enter a valid email address."
                      ]
                    }
                  },
                  "Unsupported locale": {
                    "summary": "`options.locale`がサポート対象外",
                    "value": {
                      "options": {
                        "locale": [
                          "Invalid locale. Supported locales are en, ar, bn, bg, bs, ca, cs, da, de, el, es, et, fa, fi, fr, he, hi, hr, hu, hy, id, it, ja, ka, kk, ko, ky, lt, lv, cnr, mk, mn, ms, nl, no, pl, pt-BR, pt, ro, ru, sk, sl, so, sq, sr, sv, th, tr, uk, uz, vi, zh-CN, zh-TW, zh."
                        ]
                      }
                    }
                  },
                  "Code size out of range": {
                    "summary": "`options.code_size`が4〜8の範囲外",
                    "value": {
                      "options": {
                        "code_size": [
                          "Ensure this value is less than or equal to 8."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に返されます（`{\"detail\": ...}`）。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。また、組織の残高がメールアドレス認証APIのクレジット1件分を賄えない場合にも、送信前に返されます（`{\"error\": ...}`）。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高で送信料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "メールプロバイダーに接続できなかったため（障害またはタイムアウト）、コードは送信されず、課金も送信試行としてのカウントも行われていません。同じリクエストを再度送信してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Email delivery unavailable": {
                    "summary": "1回の自動再試行の後もメールプロバイダーでエラーが発生しました",
                    "value": {
                      "detail": "Email delivery is temporarily unavailable. Please try again."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/email/check/": {
      "post": {
        "summary": "メールコードを確認",
        "description": "[`POST /v3/email/send/`](/ja/standalone-apis/email-send)で送信したOTPを検証し、最終的な検証結果とメールインテリジェンスを取得します。メールインテリジェンスには、到達可能性、情報漏えいへの露出（`is_breached`と、漏えい情報データベースから取得した`breaches`リスト）、使い捨てメールプロバイダーの検出、およびお客様のセッション間でのアドレスの重複利用が含まれます。\n\n**チェックが検証を特定する方法。** 照合はお客様のアプリケーションと`email`アドレスの組み合わせで行われます。`request_id`は入力として使用しません。直近**5分**以内に作成された保留中の検証のうち、最新のものがチェックされます。該当するものがない場合（未送信、確定済み、送信時に配信不能、または作成から5分以上経過）、エンドポイントは`status: \"Expired or Not Found\"`とともに`200`を返します。\n\n**試行回数の上限。** 各検証では**3回**までコードを試行できます。1回目と2回目の誤ったコードでは、残りの試行回数と`email: null`とともに`status: \"Failed\"`が返されます。3回目の誤ったコードで検証は`Declined`として確定し、`EMAIL_CODE_ATTEMPTS_EXCEEDED`警告が付与され、完全なメールレポートが返されます。コードは大文字と小文字を区別せずに比較されます（`alphanumeric_code`で送信した場合に関係します）。有効なのは最後に送信したコードのみです。\n\n**結果。** `Approved`：コードが正しく、却下となるリスクがない状態です。`Declined`：最終状態です。コードは正しかったものの却下となるリスクに該当した（後述の`DECLINE`アクション、ブロックリストに登録されたアドレス、または確定時に配信不能と判明したアドレス）場合、もしくは試行回数の上限に達した場合です。`Failed`：コードが誤っており、試行回数が残っている状態です。`Expired or Not Found`：チェック対象がない状態です。`Approved`/`Declined`の場合、`request_id`は送信時の`request_id`（セッションID）と等しく、`email`には完全なレポート（`is_breached`、`breaches`、`is_disposable`、`is_undeliverable`、`warnings`、`lifecycle`、`matches`）が含まれます。`Failed`および`Expired or Not Found`の場合、`request_id`は1回限りのランダムなUUIDです。\n\n**リスクアクション。** `duplicated_email_action`、`breached_email_action`、`disposable_email_action`は、正しいコードで対応するリスクが検出された場合の処理を決定します。`DECLINE`は最終ステータスを`Declined`に変更します。`NO_ACTION`（デフォルト）はステータスに影響を与えずに`email.warnings`にリスクを記録します。\n\n**請求。** チェックは無料です。クレジットは送信が成功した時点で消費されます。\n\n**セッションへの保存。** 確定したチェックは送信時に作成されたセッションを更新し（Business Consoleで確認でき、`GET /v3/session/{sessionId}/decision/`で照会可能）、`status.updated`のWebhookを送信します。\n\n**サンドボックス。** サンドボックスのAPIキーではすべての処理がスキップされます。形式が正しいコードであれば（`123456`を含む）、簡略化された`email`オブジェクト（`status`、`email`、`is_breached`、`is_disposable`、`is_undeliverable`）を含む静的な`Approved`ペイロードが返されます。形式が正しくない入力には引き続き`400`が返されます。データは一切保存されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`ヘッダーで送信してください。認証情報がない、または無効な場合は`403`（`{\"detail\": \"You do not have permission to perform this action.\"}`）が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに毎分300リクエストまでです。超過すると`429`が返されます。\n\n**ソーシャルフットプリント。** `enable_social`を`true`に設定すると、`email_social`ブロックが追加されます。このブロックには、このアドレスが登録されているオンラインプラットフォームが、カテゴリごとの件数および取得可能なプロフィール詳細とともに含まれます。`profiles_registered: 0`は、プラットフォームを確認した結果、どのプラットフォームにもこのアドレスが見つからなかったことを意味し、有効かつ課金対象の回答です。アドオンをリクエストしなかった場合、またはチェックを完了できなかった場合、このブロックは含まれず、その場合は課金されません。請求では、このエンドポイント自体の料金に加えて、リクエストごとに`email_social`が1単位追加されます。",
        "operationId": "post_v3email_check",
        "x-didit-sdk": {
          "resource": "email",
          "method": "check_code",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/email/check/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"alice@example.com\",\n    \"code\": \"123456\",\n    \"disposable_email_action\": \"DECLINE\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.email.check_code(\n    email=\"alice@example.com\",\n    code=\"123456\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.email.checkCode({\n  email: \"alice@example.com\",\n  code: \"123456\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Email.CheckCode(ctx, didit.EmailCheckCodeParams{\n\tEmail: \"alice@example.com\",\n\tCode:  \"123456\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.EmailCheckCodeParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.email().checkCode(EmailCheckCodeParams.builder()\n        .email(\"alice@example.com\")\n        .code(\"123456\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->email->checkCode([\n    'email' => 'alice@example.com',\n    'code' => '123456',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.email.check_code(\n  email: \"alice@example.com\",\n  code: \"123456\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Email.CheckCodeAsync(new EmailCheckCodeParams\n{\n    Email = \"alice@example.com\",\n    Code = \"123456\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "対応する[`POST /v3/email/send/`](/ja/standalone-apis/email-send)の呼び出しで使用したものと同じメールアドレスです。この値によって、確認と送信が紐付けられます。",
                    "example": "alice@example.com"
                  },
                  "code": {
                    "type": "string",
                    "maxLength": 10,
                    "description": "エンドユーザーが受け取ったOTP。4〜8桁の数字、または送信時に`alphanumeric_code: true`を使用した場合は4〜8文字の英数字です。比較では大文字と小文字は区別されません。",
                    "example": "123456"
                  },
                  "duplicated_email_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "同じメールアドレスが、アプリケーションの別のユーザー（異なる`vendor_data`）によってすでに使用され、承認されている場合の対応です（過去に承認済みとなった認証のみが対象です）。`DECLINE`は最終的な`status`を`Declined`に切り替え、`NO_ACTION`はリスクを`email.warnings`に記録して`email.matches`を設定します。"
                  },
                  "breached_email_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "メールアドレスが既知のデータ漏えいに含まれている場合の処理です（`email.is_breached`）。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`はリスクを`email.warnings`に記録します。"
                  },
                  "disposable_email_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "ドメインが使い捨て/一時メールのプロバイダーに属する場合（`email.is_disposable`）の対応です。`DECLINE`は最終的な`status`を`Declined`に切り替え、`NO_ACTION`はリスクを`email.warnings`に記録します。"
                  },
                  "enable_enrichment": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、そのアドレスに対してメールインテリジェンスも実行します（リスクスコアと漏洩履歴）。このエンドポイント自体の料金に加えて、リクエストごとに`email_intelligence_api`1ユニット（定価で$0.05）として課金されます。残高が不足している場合、リクエストは`403`を返します。",
                    "example": false
                  },
                  "email_intelligence_score_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "メールインテリジェンスのリスクスコアがしきい値を超えた場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "recent_email_breach_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "メールアドレスが最近の既知のデータ侵害に含まれている場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "frequent_email_breach_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "メールアドレスが多数の既知のデータ侵害に含まれている場合のアクション。`DECLINE`は最終的な`status`を`Declined`に変更し、`NO_ACTION`は却下せずにシグナルを記録します。`enable_enrichment`が`true`の場合にのみ有効です。"
                  },
                  "enable_social": {
                    "type": "boolean",
                    "default": false,
                    "description": "trueの場合、アドレスのソーシャルフットプリント（そのアドレスが登録されているメール、ソーシャル、ビジネス、EC、エンターテインメントの各プラットフォーム）も検索します。このエンドポイント自体の料金に加えて、リクエスト1件ごとに`email_social`1ユニット分が請求されます。",
                    "example": true
                  },
                  "email_no_social_presence_action": {
                    "type": "string",
                    "enum": [
                      "NO_ACTION",
                      "DECLINE"
                    ],
                    "default": "NO_ACTION",
                    "description": "ソーシャルフットプリントチェックで、対象となるいずれのプラットフォームにもこのメールアドレスが登録されていないと判明した場合のアクション。このエンドポイントで指定できるのはNO_ACTIONとDECLINEのみです。REVIEWは、ワークフロー設定の同名のキーで利用できます。"
                  }
                },
                "required": [
                  "email",
                  "code"
                ]
              },
              "examples": {
                "Default": {
                  "summary": "リスクは記録するが、自動で却下は行わない",
                  "value": {
                    "email": "alice@example.com",
                    "code": "123456"
                  }
                },
                "Strict risk policy": {
                  "summary": "使い捨てのメールボックスと漏洩したメールボックスを自動で却下",
                  "value": {
                    "email": "alice@example.com",
                    "code": "123456",
                    "disposable_email_action": "DECLINE",
                    "breached_email_action": "DECLINE"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "チェックが完了しました。誤ったコードや存在しない検証の場合も`200`が返るため、HTTPコードではなく`status`を確認してください。`email`は確定した結果（`Approved`/`Declined`）の場合のみ値が入り、`Failed`では`null`、`Expired or Not Found`では含まれません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailVerificationCheckResponse"
                },
                "examples": {
                  "Approved": {
                    "summary": "正しいコード。問題のないメールアドレス、完全なメールレポート",
                    "value": {
                      "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
                      "status": "Approved",
                      "message": "The verification code is correct.",
                      "email": {
                        "status": "Approved",
                        "email": "alice@example.com",
                        "is_breached": false,
                        "breaches": [],
                        "is_disposable": false,
                        "is_undeliverable": false,
                        "verification_attempts": 1,
                        "verified_at": "2026-06-12T01:24:47.311323Z",
                        "warnings": [],
                        "lifecycle": [
                          {
                            "type": "EMAIL_VERIFICATION_MESSAGE_SENT",
                            "timestamp": "2026-06-12T01:23:39.580554+00:00",
                            "details": {
                              "status": "Success",
                              "reason": null
                            },
                            "fee": 0.02
                          },
                          {
                            "type": "VALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:47.311201+00:00",
                            "details": {
                              "code_tried": "123456",
                              "status": "Approved"
                            },
                            "fee": 0
                          },
                          {
                            "type": "EMAIL_VERIFICATION_APPROVED",
                            "timestamp": "2026-06-12T01:24:47.384292+00:00",
                            "details": null,
                            "fee": 0
                          }
                        ],
                        "matches": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.401719+00:00"
                    }
                  },
                  "Approved with breach exposure": {
                    "summary": "正しいコード。漏洩履歴が警告として記録される（breached_email_action=NO_ACTION）",
                    "value": {
                      "request_id": "3a1f2b6c-9d4e-4f7a-8b2c-1e5d6f7a8b9c",
                      "status": "Approved",
                      "message": "The verification code is correct.",
                      "email": {
                        "status": "Approved",
                        "email": "bob@example.com",
                        "is_breached": true,
                        "breaches": [
                          {
                            "name": "ExampleApp",
                            "domain": "exampleapp.com",
                            "breach_date": "2019-03-21",
                            "breach_emails_count": 763117,
                            "description": "In March 2019, the social platform ExampleApp suffered a data breach that exposed email addresses and passwords.",
                            "logo_path": "https://<media-host>/logos/ExampleApp.png",
                            "data_classes": [
                              "email_addresses",
                              "passwords"
                            ],
                            "is_verified": true
                          }
                        ],
                        "is_disposable": false,
                        "is_undeliverable": false,
                        "verification_attempts": 1,
                        "verified_at": "2026-06-12T01:24:47.311323Z",
                        "warnings": [
                          {
                            "feature": "EMAIL",
                            "risk": "BREACHED_EMAIL_DETECTED",
                            "additional_data": null,
                            "log_type": "information",
                            "short_description": "Breached email detected",
                            "long_description": "This email address was found in one or more known data breaches."
                          }
                        ],
                        "lifecycle": [
                          {
                            "type": "EMAIL_VERIFICATION_MESSAGE_SENT",
                            "timestamp": "2026-06-12T01:23:39.580554+00:00",
                            "details": {
                              "status": "Success",
                              "reason": null
                            },
                            "fee": 0.02
                          },
                          {
                            "type": "VALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:47.311201+00:00",
                            "details": {
                              "code_tried": "835126",
                              "status": "Approved"
                            },
                            "fee": 0
                          },
                          {
                            "type": "EMAIL_VERIFICATION_APPROVED",
                            "timestamp": "2026-06-12T01:24:47.384292+00:00",
                            "details": null,
                            "fee": 0
                          }
                        ],
                        "matches": []
                      },
                      "vendor_data": "user-5678",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.401719+00:00"
                    }
                  },
                  "Failed (attempts remaining)": {
                    "summary": "コードが正しくありません。ユーザーは再試行できます。ここでのrequest_idは使い捨てのUUIDです",
                    "value": {
                      "request_id": "11111111-2222-3333-4444-555555555555",
                      "status": "Failed",
                      "message": "The verification code is incorrect. Attempts remaining: 2",
                      "email": null,
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:21.512340+00:00"
                    }
                  },
                  "Declined (risk policy)": {
                    "summary": "コードは正しいが、メールアドレスが使い捨てで、disposable_email_action=DECLINEの場合",
                    "value": {
                      "request_id": "8c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                      "status": "Declined",
                      "message": "The verification code is correct.",
                      "email": {
                        "status": "Declined",
                        "email": "tempuser42@mailinator.com",
                        "is_breached": false,
                        "breaches": [],
                        "is_disposable": true,
                        "is_undeliverable": false,
                        "verification_attempts": 1,
                        "verified_at": "2026-06-12T01:24:47.311323Z",
                        "warnings": [
                          {
                            "feature": "EMAIL",
                            "risk": "DISPOSABLE_EMAIL_DETECTED",
                            "additional_data": null,
                            "log_type": "error",
                            "short_description": "Disposable email detected",
                            "long_description": "The system detected that the email is disposable, which is not allowed."
                          }
                        ],
                        "lifecycle": [
                          {
                            "type": "EMAIL_VERIFICATION_MESSAGE_SENT",
                            "timestamp": "2026-06-12T01:23:39.580554+00:00",
                            "details": {
                              "status": "Success",
                              "reason": null
                            },
                            "fee": 0.02
                          },
                          {
                            "type": "VALID_CODE_ENTERED",
                            "timestamp": "2026-06-12T01:24:47.311201+00:00",
                            "details": {
                              "code_tried": "123456",
                              "status": "Approved"
                            },
                            "fee": 0
                          },
                          {
                            "type": "EMAIL_VERIFICATION_DECLINED",
                            "timestamp": "2026-06-12T01:24:47.384292+00:00",
                            "details": {
                              "reason": "DISPOSABLE_EMAIL_DETECTED"
                            },
                            "fee": 0
                          }
                        ],
                        "matches": []
                      },
                      "vendor_data": "user-1234",
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:47.401719+00:00"
                    }
                  },
                  "Expired or Not Found": {
                    "summary": "過去5分間にこのメールアドレスの保留中の検証はありません",
                    "value": {
                      "request_id": "88808a77-06e9-4cb0-85f5-9c052ddfd987",
                      "status": "Expired or Not Found",
                      "message": "No pending email verification found in the last 5 minutes.",
                      "vendor_data": null,
                      "metadata": null,
                      "created_at": "2026-06-12T01:24:59.887904+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：DRFのフィールドエラーエンベロープです。問題のあるフィールドごとにメッセージの配列が1つ返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid email": {
                    "summary": "メールアドレスの形式が不正です",
                    "value": {
                      "email": [
                        "Enter a valid email address."
                      ]
                    }
                  },
                  "Missing code": {
                    "summary": "リクエストボディに`code`が含まれていません",
                    "value": {
                      "code": [
                        "This field is required."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。チェックは無料のため、ここではクレジットの確認は行われません。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/workflows/": {
      "get": {
        "summary": "ワークフローを一覧表示",
        "description": "ワークフローを新しい順に、limit/offset方式のページネーションエンベロープ（`{count, next, previous, results}`、デフォルトのページサイズは50）で一覧表示します。各行は1つのバージョンです。`workflow_id`は安定したグループIDで、新しいセッションでは最新の`published`バージョンが使用されます。",
        "operationId": "list_workflows",
        "x-didit-sdk": {
          "resource": "workflows",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Workflows"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50
            },
            "description": "ページサイズ（1ページあたりのワークフロー数）。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            },
            "description": "最初に返すワークフローの前にスキップする行数です。"
          }
        ],
        "responses": {
          "200": {
            "description": "`created_at`の降順に並んだワークフローの1ページ分で、ページネーションエンベロープでラップされています。`results`の各項目は`WorkflowListItem`です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "アプリケーションのワークフローバージョンの総数。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページのURL。最後のページでは`null`です。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページのURL。最初のページでは`null`です。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WorkflowListItem"
                      }
                    }
                  }
                },
                "examples": {
                  "Two workflows": {
                    "summary": "デフォルトのKYCワークフローと、KYC + AMLワークフローの下書き",
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "a1b2c3d4-5678-90ab-cdef-111111111111",
                          "workflow_id": "a1b2c3d4-5678-90ab-cdef-111111111111",
                          "workflow_label": "Standard KYC",
                          "workflow_type": "kyc",
                          "is_default": true,
                          "is_archived": false,
                          "is_white_label_enabled": false,
                          "total_price": 0.15,
                          "min_price": 0.15,
                          "max_price": 0.15,
                          "features": "OCR + LIVENESS + FACE_MATCH",
                          "is_simple_workflow": true,
                          "is_editable": false,
                          "workflow_url": "https://verify.didit.me/u/_yljPOx8RWG3UAz5ZRQGVQ",
                          "max_retry_attempts": 3,
                          "retry_window_days": 7,
                          "session_expiration_time": 604800,
                          "version": 2,
                          "status": "published",
                          "has_draft": false,
                          "created_by": {
                            "name": "Alex Mateo",
                            "email": "alex@example.com",
                            "type": "user"
                          },
                          "updated_at": "2026-04-12T10:30:00Z"
                        },
                        {
                          "uuid": "b2c3d4e5-6789-01bc-defa-222222222222",
                          "workflow_id": "b2c3d4e5-6789-01bc-defa-222222222222",
                          "workflow_label": "Full Verification + AML",
                          "workflow_type": "kyc",
                          "is_default": false,
                          "is_archived": false,
                          "is_white_label_enabled": false,
                          "total_price": 0.25,
                          "min_price": 0.25,
                          "max_price": 0.25,
                          "features": "OCR + LIVENESS + FACE_MATCH + AML",
                          "is_simple_workflow": true,
                          "is_editable": true,
                          "workflow_url": "https://verify.didit.me/u/Aq3kPOx8RWG3UAz5ZRQGVQ",
                          "max_retry_attempts": 3,
                          "retry_window_days": 7,
                          "session_expiration_time": 604800,
                          "version": 1,
                          "status": "draft",
                          "has_draft": true,
                          "created_by": null,
                          "updated_at": "2026-04-15T18:05:21Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションに属しています。レスポンス本文: `{\"detail\": \"You do not have permission to perform this action.\"}`。[Auth API](/ja/auth-api/get-credentials)でトークンを更新し、再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行し、`Retry-After`ヘッダーがある場合はそれに従ってください。"
          },
          "500": {
            "description": "リストの作成中に予期しないサーバーエラーが発生しました。リクエストは安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X GET 'https://verification.didit.me/v3/workflows/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Accept: application/json'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.workflows.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.workflows.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Workflows.ListAutoPaging(ctx, didit.WorkflowsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.workflows().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->workflows->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.workflows.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Workflows.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "summary": "ワークフローを作成",
        "description": "シンプルなワークフローを作成します。`features`は実行順に送信してください（順序のルールが適用されます）。デフォルトは`published`のv1です。本文には`SimpleWorkflowRequest`に記載されたフィールドのみ指定できます。それ以外のキー（`workflow_type`を含む）は400で拒否されます。冪等ではなく、呼び出すたびに新しいワークフローが作成されます。1アプリケーションあたりの上限は50ワークフローです。",
        "operationId": "create_workflow",
        "x-didit-sdk": {
          "resource": "workflows",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Workflows"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SimpleWorkflowRequest"
              },
              "examples": {
                "Simple KYC": {
                  "summary": "本人確認、ライブネス検知、顔照合のリニアワークフロー",
                  "value": {
                    "workflow_label": "Standard KYC",
                    "features": [
                      {
                        "feature": "OCR",
                        "config": {
                          "duplicated_user_action": "review"
                        }
                      },
                      {
                        "feature": "LIVENESS",
                        "config": {
                          "face_liveness_method": "passive"
                        }
                      },
                      {
                        "feature": "FACE_MATCH",
                        "config": {
                          "face_match_score_decline_threshold": 40,
                          "face_match_score_review_threshold": 60
                        }
                      }
                    ]
                  }
                },
                "KYC + AML": {
                  "summary": "本人確認後にAMLを実行",
                  "value": {
                    "workflow_label": "KYC with AML",
                    "features": [
                      {
                        "feature": "OCR"
                      },
                      {
                        "feature": "AML",
                        "config": {
                          "aml_score_review_threshold": 70,
                          "aml_score_approve_threshold": 30
                        }
                      }
                    ]
                  }
                },
                "Questionnaire workflow": {
                  "summary": "POST /v3/questionnaires/で作成したアンケートを実行",
                  "value": {
                    "workflow_label": "Source of Funds",
                    "features": [
                      {
                        "feature": "QUESTIONNAIRE",
                        "config": {
                          "questionnaire_uuid": "11111111-2222-3333-4444-555555555555",
                          "review_questionnaire_manually": true
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "ワークフローが作成されました。レスポンスボディは簡易的な一覧項目ではなく、ワークフローの完全な設定です。これは`GET /v3/workflows/{settings_uuid}/`が返すものと同じ、生の`VerificationSettings`のシリアライズ結果（約190フィールド: すべての機能のオン・オフ、しきい値、アクション、生成された`workflow_graph`）です。後続のセッション作成呼び出しで参照できるよう、`uuid`（`workflow_id`としても公開）を保存してください。注意: `features`は`\" + \"`で連結された文字列で、料金はJSONの数値です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDetail"
                },
                "examples": {
                  "Created (abbreviated)": {
                    "summary": "完全な設定オブジェクトの主要フィールド",
                    "value": {
                      "uuid": "c3d4e5f6-7890-12cd-ef34-333333333333",
                      "workflow_id": "c3d4e5f6-7890-12cd-ef34-333333333333",
                      "workflow_label": "Standard KYC",
                      "workflow_type": null,
                      "is_default": false,
                      "is_archived": false,
                      "total_price": 0.15,
                      "min_price": 0.15,
                      "max_price": 0.15,
                      "features": "OCR + LIVENESS + FACE_MATCH",
                      "is_simple_workflow": false,
                      "is_editable": false,
                      "workflow_url": "https://verify.didit.me/u/w9TkPOx8RWG3UAz5ZRQGVQ",
                      "workflow_graph": {
                        "start_node": "ocr",
                        "nodes": "... one node per feature plus a final status node ..."
                      },
                      "max_retry_attempts": 3,
                      "retry_window_days": 7,
                      "session_expiration_time": 604800,
                      "version": 1,
                      "status": "published",
                      "published_at": "2026-05-17T10:30:00Z",
                      "created_at": "2026-05-17T10:30:00Z",
                      "updated_at": "2026-05-17T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。よくある原因：受け付け可能なホワイトリストにないトップレベルキー（例：`workflow_type`）、不明な`feature`の値、依存先より前に配置された機能（例：`OCR`より前の`FACE_MATCH`）、最初のステップとして使用されたパッシブ機能（`AML`、`IP_ANALYSIS`、`DATABASE_VALIDATION`、`KYB_KEY_PEOPLE`）、`config.questionnaire_uuid`がこのアプリケーションに存在しない`QUESTIONNAIRE`機能、署名する書類がないまま本番稼働することになる`SIGNATURE`機能、Advanced (AES)が利用できない状態で`signature_level: \"aes\"`を指定した`SIGNATURE`機能（`aes_not_available`。ワークフローの`signature_availability`を参照）、または範囲外のしきい値。ボディはDRFのバリデーションエラーオブジェクトで、キーはフィールド名、値は人が読めるメッセージの配列です。",
            "content": {
              "application/json": {
                "examples": {
                  "Advanced (AES) not available": {
                    "value": {
                      "features": {
                        "signature_level": [
                          "Node 'signature': Advanced (AES) is not available yet (aes_not_available)."
                        ]
                      }
                    }
                  },
                  "Signature step with no document": {
                    "value": {
                      "features": {
                        "non_field_errors": [
                          "Node 'signature': Add a document to sign, or let each session bring its own."
                        ]
                      }
                    }
                  },
                  "Missing feature": {
                    "value": {
                      "features": [
                        "At least one feature is required."
                      ]
                    }
                  },
                  "Unknown top-level field": {
                    "value": {
                      "workflow_type": [
                        "The v3 workflow API only accepts `workflow_label`, `is_default`, `status`, `features`, `is_white_label_enabled`, `is_desktop_allowed`, `max_retry_attempts`, `retry_window_days`, `session_expiration_time`, `face_liveness_max_attempts`, `face_match_max_attempts`."
                      ]
                    }
                  },
                  "Unknown feature": {
                    "value": {
                      "features": [
                        "Invalid feature 'FOO'. Allowed values: AGE_ESTIMATION, AML, DATABASE_VALIDATION, EMAIL_VERIFICATION, FACE_MATCH, IP_ANALYSIS, KYB_DOCUMENTS, KYB_KEY_PEOPLE, KYB_REGISTRY, LIVENESS, NFC, OCR, PHONE_VERIFICATION, PROOF_OF_ADDRESS, QUESTIONNAIRE."
                      ]
                    }
                  },
                  "Ordering": {
                    "value": {
                      "features": [
                        "Feature 'FACE_MATCH' must appear after one of: OCR."
                      ]
                    }
                  },
                  "Questionnaire not found": {
                    "value": {
                      "features": "Questionnaire '11111111-2222-3333-4444-555555555555' was not found for this application. Create the questionnaire first, then use its questionnaire_id."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。[Auth API](/ja/auth-api/get-credentials)で更新し、再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "サポートされていないメディアタイプです。`Content-Type: application/json`を設定し、JSONボディを送信してください。"
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "ワークフローの作成中に予期しないサーバーエラーが発生しました。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/workflows/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"workflow_label\": \"Standard KYC\",\n    \"features\": [\n      {\"feature\": \"OCR\"},\n      {\"feature\": \"LIVENESS\", \"config\": {\"face_liveness_method\": \"passive\"}},\n      {\"feature\": \"FACE_MATCH\", \"config\": {\"face_match_score_decline_threshold\": 40, \"face_match_score_review_threshold\": 60}}\n    ]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.workflows.create(\n    workflow_label=\"Standard KYC\",\n    features=[{\n        \"feature\": \"OCR\",\n        \"config\": {\"duplicated_user_action\": \"review\"},\n    }, {\n        \"feature\": \"LIVENESS\",\n        \"config\": {\"face_liveness_method\": \"passive\"},\n    }, {\n        \"feature\": \"FACE_MATCH\",\n        \"config\": {\"face_match_score_decline_threshold\": 40, \"face_match_score_review_threshold\": 60},\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.workflows.create({\n  workflow_label: \"Standard KYC\",\n  features: [{\n    feature: \"OCR\",\n    config: { duplicated_user_action: \"review\" },\n  }, {\n    feature: \"LIVENESS\",\n    config: { face_liveness_method: \"passive\" },\n  }, {\n    feature: \"FACE_MATCH\",\n    config: { face_match_score_decline_threshold: 40, face_match_score_review_threshold: 60 },\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Workflows.Create(ctx, didit.SimpleWorkflowRequest{\n\tWorkflowLabel: didit.String(\"Standard KYC\"),\n\tFeatures: []didit.SimpleWorkflowFeature{{\n\t\tFeature: \"OCR\",\n\t\tConfig:  didit.Some(map[string]any{\"duplicated_user_action\": \"review\"}),\n\t}, {\n\t\tFeature: \"LIVENESS\",\n\t\tConfig:  didit.Some(map[string]any{\"face_liveness_method\": \"passive\"}),\n\t}, {\n\t\tFeature: \"FACE_MATCH\",\n\t\tConfig:  didit.Some(map[string]any{\"face_match_score_decline_threshold\": 40, \"face_match_score_review_threshold\": 60}),\n\t}},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SimpleWorkflowFeature;\nimport me.didit.types.SimpleWorkflowRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.workflows().create(SimpleWorkflowRequest.builder()\n        .workflowLabel(\"Standard KYC\")\n        .features(List.of(\n                SimpleWorkflowFeature.builder()\n                        .feature(SimpleWorkflowFeature.Feature.of(\"OCR\"))\n                        .config(Map.of(\"duplicated_user_action\", \"review\"))\n                        .build(),\n                SimpleWorkflowFeature.builder()\n                        .feature(SimpleWorkflowFeature.Feature.of(\"LIVENESS\"))\n                        .config(Map.of(\"face_liveness_method\", \"passive\"))\n                        .build(),\n                SimpleWorkflowFeature.builder()\n                        .feature(SimpleWorkflowFeature.Feature.of(\"FACE_MATCH\"))\n                        .config(Map.of(\"face_match_score_decline_threshold\", 40, \"face_match_score_review_threshold\", 60))\n                        .build()))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->workflows->create([\n    'workflow_label' => 'Standard KYC',\n    'features' => [[\n        'feature' => 'OCR',\n        'config' => ['duplicated_user_action' => 'review'],\n    ], [\n        'feature' => 'LIVENESS',\n        'config' => ['face_liveness_method' => 'passive'],\n    ], [\n        'feature' => 'FACE_MATCH',\n        'config' => ['face_match_score_decline_threshold' => 40, 'face_match_score_review_threshold' => 60],\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.workflows.create(\n  workflow_label: \"Standard KYC\",\n  features: [{\n    feature: \"OCR\",\n    config: { duplicated_user_action: \"review\" },\n  }, {\n    feature: \"LIVENESS\",\n    config: { face_liveness_method: \"passive\" },\n  }, {\n    feature: \"FACE_MATCH\",\n    config: { face_match_score_decline_threshold: 40, face_match_score_review_threshold: 60 },\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Workflows.CreateAsync(new SimpleWorkflowRequest\n{\n    WorkflowLabel = \"Standard KYC\",\n    Features = new SimpleWorkflowFeature[]\n    {\n        new()\n        {\n            Feature = \"OCR\",\n            Config = new Dictionary<string, object> { [\"duplicated_user_action\"] = \"review\" },\n        },\n        new()\n        {\n            Feature = \"LIVENESS\",\n            Config = new Dictionary<string, object> { [\"face_liveness_method\"] = \"passive\" },\n        },\n        new()\n        {\n            Feature = \"FACE_MATCH\",\n            Config = new Dictionary<string, object> { [\"face_match_score_decline_threshold\"] = 40, [\"face_match_score_review_threshold\"] = 60 },\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/workflows/{settings_uuid}/": {
      "get": {
        "summary": "ワークフローを取得",
        "description": "`settings_uuid`で指定した1つのワークフローバージョンの完全な設定を取得します。機能の切り替え、しきい値、許可される書類、グラフ、再試行ポリシー、コールバック、料金が含まれます。",
        "operationId": "get_workflow",
        "x-didit-sdk": {
          "resource": "workflows",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Workflows"
        ],
        "parameters": [
          {
            "name": "settings_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ワークフローのバージョンごとのUUIDです（一覧エンドポイントが返す`uuid`の値）。ワークフローの各バージョンには、それぞれ固有の`settings_uuid`があります。"
          }
        ],
        "responses": {
          "200": {
            "description": "ワークフローの完全な設定。形式は`VerificationSettings`をそのままシリアライズしたもの（約190フィールド：すべての機能のオン/オフ、しきい値、警告アクション、許可書類の設定、`workflow_graph`、再試行ポリシー、コールバック、料金）です。以下の例は省略版です。注意点：`features`は`\" + \"`で連結された文字列（例：`\"OCR + LIVENESS\"`）であり、料金はJSONの数値で、`is_editable`は`draft`バージョンの場合にのみ`true`になります。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDetail"
                },
                "examples": {
                  "KYC workflow with face match (abbreviated)": {
                    "value": {
                      "uuid": "a1b2c3d4-5678-90ab-cdef-111111111111",
                      "workflow_id": "a1b2c3d4-5678-90ab-cdef-111111111111",
                      "workflow_label": "Standard KYC",
                      "workflow_type": "kyc",
                      "is_default": true,
                      "is_archived": false,
                      "is_liveness_enabled": true,
                      "face_liveness_method": "passive",
                      "face_liveness_score_decline_threshold": 50,
                      "face_liveness_score_review_threshold": 70,
                      "is_face_match_enabled": true,
                      "face_match_score_decline_threshold": 40,
                      "face_match_score_review_threshold": 60,
                      "is_aml_enabled": false,
                      "is_phone_verification_enabled": false,
                      "is_email_verification_enabled": false,
                      "is_database_validation_enabled": false,
                      "is_ip_analysis_enabled": false,
                      "is_nfc_enabled": false,
                      "duplicated_user_action": "no_action",
                      "documents_allowed": {
                        "ESP": {
                          "P": {
                            "sides": 1,
                            "enabled": 1,
                            "subtypes": [
                              "EPASSPORT",
                              "PASSPORT_GENERIC"
                            ],
                            "preferred_characters": "latin",
                            "expiration_check_mode": "strict"
                          }
                        }
                      },
                      "max_retry_attempts": 3,
                      "retry_window_days": 7,
                      "session_expiration_time": 604800,
                      "version": 2,
                      "status": "published",
                      "published_at": "2026-04-12T10:30:00Z",
                      "is_simple_workflow": false,
                      "is_editable": false,
                      "workflow_url": "https://verify.didit.me/u/_yljPOx8RWG3UAz5ZRQGVQ",
                      "total_price": 0.15,
                      "min_price": 0.15,
                      "max_price": 0.15,
                      "features": "OCR + LIVENESS + FACE_MATCH",
                      "created_at": "2025-01-15T10:30:00Z",
                      "updated_at": "2026-04-12T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`settings_uuid`のワークフローが、認証されたアプリケーションに存在しません。UUIDが誤っているか、別のアプリケーションに属しています。Diditは、アプリケーションをまたいだレコードの存在が漏洩しないよう、意図的にこの2つのケースを区別していません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "予期しないサーバーエラーです。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X GET 'https://verification.didit.me/v3/workflows/a1b2c3d4-5678-90ab-cdef-111111111111/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.workflows.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.workflows.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Workflows.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.workflows().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->workflows->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.workflows.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Workflows.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "patch": {
        "summary": "ワークフローを更新",
        "description": "ワークフローを更新します。バージョン管理は、送信する`status`フィールドとバージョンの現在の状態によって決まります。(1) **公開済み**バージョンで`status`を指定しない場合→公開済みバージョンがその場で更新されます（同じ`uuid`、同じ`version`）。(2) **下書き**で`status`を指定しない場合→下書きが更新され、直ちに公開されます。(3) **公開済み**バージョンで`status: \"published\"`を指定した場合→同じ`workflow_id`の下に新しい公開済みバージョンが作成されて返され（新しい`uuid`、`version` + 1）、グループ内の既存の下書きは削除されます。(4) `status: \"draft\"`は下書きを下書きのまま保持します（自動保存）が、公開済みバージョンでは400で拒否されます（`\"Cannot revert a published version to draft.\"`）。ボディは作成時と同じ厳格なフィールドのホワイトリストを受け付け、不明なキーは400で拒否されます。",
        "operationId": "update_workflow",
        "x-didit-sdk": {
          "resource": "workflows",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Workflows"
        ],
        "parameters": [
          {
            "name": "settings_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "更新するワークフローのバージョンごとのUUIDです。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SimpleWorkflowUpdateRequest"
              },
              "examples": {
                "Replace features": {
                  "summary": "希望する機能の順序をすべて送信します",
                  "value": {
                    "features": [
                      {
                        "feature": "OCR"
                      },
                      {
                        "feature": "AML"
                      }
                    ]
                  }
                },
                "Rename": {
                  "summary": "ワークフローの名前を変更する",
                  "value": {
                    "workflow_label": "Premium KYC"
                  }
                },
                "Set as default": {
                  "summary": "このワークフローをアプリケーションのデフォルトにする",
                  "value": {
                    "is_default": true
                  }
                },
                "Update config": {
                  "summary": "機能設定を変更",
                  "value": {
                    "features": [
                      {
                        "feature": "OCR"
                      },
                      {
                        "feature": "LIVENESS",
                        "config": {
                          "face_liveness_method": "passive"
                        }
                      }
                    ]
                  }
                },
                "Publish a draft": {
                  "summary": "下書きを公開済みに昇格",
                  "value": {
                    "status": "published"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ワークフローが更新されました。本文は、結果として得られたバージョンの完全な設定です（`GET /v3/workflows/{settings_uuid}/`と同じ生の`VerificationSettings`形式）。更新によって新しいバージョンが作成された場合（公開済みの行に`status: \"published\"`を送信した場合）、返される`uuid`と`version`はパッチを適用したものとは異なります。以降の呼び出しには返された`uuid`を使用してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDetail"
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：許可リスト外のトップレベルキー、不明な機能、無効な順序、範囲外のしきい値、存在しないアンケートの参照、署名する書類がないまま公開される`SIGNATURE`機能、Advanced (AES)が利用できない状態での`signature_level: \"aes\"`の新しい`SIGNATURE`機能（`aes_not_available`。ワークフローの`signature_availability`を参照。すでに`aes`を保存しているステップはそのまま維持されます）、または公開済みバージョンに対して送信された`status: \"draft\"`（`\"Cannot revert a published version to draft.\"`）。レスポンスボディは、フィールド名をキーとするDRFの検証エラーです。"
          },
          "403": {
            "description": "APIキーがないか、無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`settings_uuid`のワークフローが、認証されたアプリケーションに存在しません。"
          },
          "415": {
            "description": "サポートされていないメディアタイプです。`Content-Type: application/json`を設定してください。"
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "予期しないサーバーエラーです。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/workflows/a1b2c3d4-5678-90ab-cdef-111111111111/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"workflow_label\": \"Premium KYC\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.workflows.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    features=[{\n        \"feature\": \"OCR\",\n    }, {\n        \"feature\": \"AML\",\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.workflows.update(\"11111111-2222-3333-4444-555555555555\", {\n  features: [{\n    feature: \"OCR\",\n  }, {\n    feature: \"AML\",\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Workflows.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SimpleWorkflowUpdateRequest{\n\tFeatures: didit.Some([]didit.SimpleWorkflowFeature{{\n\t\tFeature: \"OCR\",\n\t}, {\n\t\tFeature: \"AML\",\n\t}}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.SimpleWorkflowFeature;\nimport me.didit.types.SimpleWorkflowUpdateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.workflows().update(\"11111111-2222-3333-4444-555555555555\", SimpleWorkflowUpdateRequest.builder()\n        .features(List.of(\n                SimpleWorkflowFeature.builder()\n                        .feature(SimpleWorkflowFeature.Feature.of(\"OCR\"))\n                        .build(),\n                SimpleWorkflowFeature.builder()\n                        .feature(SimpleWorkflowFeature.Feature.of(\"AML\"))\n                        .build()))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->workflows->update('11111111-2222-3333-4444-555555555555', [\n    'features' => [[\n        'feature' => 'OCR',\n    ], [\n        'feature' => 'AML',\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.workflows.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  features: [{\n    feature: \"OCR\",\n  }, {\n    feature: \"AML\",\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Workflows.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new SimpleWorkflowUpdateRequest\n{\n    Features = new SimpleWorkflowFeature[]\n    {\n        new()\n        {\n            Feature = \"OCR\",\n        },\n        new()\n        {\n            Feature = \"AML\",\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "summary": "ワークフローを削除",
        "description": "ワークフローのバージョンを1つ完全に削除します（元に戻せません）。既存のセッションの認証結果は保持されますが、ワークフローへの参照はクリアされます。同じ`workflow_id`グループ内の他のバージョンは削除されません。",
        "operationId": "delete_workflow",
        "x-didit-sdk": {
          "resource": "workflows",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Workflows"
        ],
        "parameters": [
          {
            "name": "settings_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "削除するワークフローのバージョンごとのUUIDです。"
          }
        ],
        "responses": {
          "204": {
            "description": "ワークフローが削除されました。レスポンスボディは空です。"
          },
          "403": {
            "description": "APIキーがないか、無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`settings_uuid`のワークフローが、認証されたアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "予期しないサーバーエラーです。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/workflows/a1b2c3d4-5678-90ab-cdef-111111111111/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.workflows.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.workflows.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Workflows.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.workflows().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->workflows->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.workflows.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Workflows.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ]
      }
    },
    "/v3/questionnaires/": {
      "get": {
        "summary": "アンケートを一覧表示",
        "description": "アンケートを新しい順に、limit/offset方式のページネーションエンベロープ（`{count, next, previous, results}`、デフォルトのページサイズは50）で一覧表示します。各行は1つのバージョンです。`questionnaire_group_id`は安定したグループIDで、最新の`published`バージョンに解決されます。",
        "operationId": "list_questionnaires",
        "x-didit-sdk": {
          "resource": "questionnaires",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Questionnaires"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50
            },
            "description": "ページサイズ（1ページあたりのアンケート数）。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            },
            "description": "最初に返すアンケートの前にスキップする行数です。"
          }
        ],
        "responses": {
          "200": {
            "description": "`created_at`の降順に並んだアンケートの1ページ分で、ページネーションエンベロープでラップされています。`results`の各項目は`QuestionnaireListItem`です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "アプリケーションのアンケートバージョンの総数。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページのURL。最後のページでは`null`です。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページのURL。最初のページでは`null`です。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/QuestionnaireListItem"
                      }
                    }
                  }
                },
                "examples": {
                  "One questionnaire": {
                    "summary": "シンプルな2か国語のアンケート",
                    "value": {
                      "count": 1,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "11111111-2222-3333-4444-555555555555",
                          "title": "KYC Questionnaire",
                          "description": "Additional verification questions",
                          "languages": [
                            "en",
                            "es"
                          ],
                          "default_language": "en",
                          "is_active": true,
                          "is_simple_questionnaire": true,
                          "created_at": "2026-04-23T09:55:00Z",
                          "updated_at": "2026-04-23T10:00:00Z",
                          "question_types": [
                            "SHORT_TEXT",
                            "MULTIPLE_CHOICE",
                            "FILE_UPLOAD"
                          ],
                          "workflow_names": [],
                          "questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
                          "version": 1,
                          "status": "published",
                          "published_at": "2026-04-23T10:00:00Z",
                          "is_editable": false
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "リストの作成中に予期しないサーバーエラーが発生しました。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X GET 'https://verification.didit.me/v3/questionnaires/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.questionnaires.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.questionnaires.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Questionnaires.ListAutoPaging(ctx, didit.QuestionnairesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.questionnaires().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->questionnaires->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.questionnaires.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Questionnaires.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "summary": "アンケートを作成",
        "description": "シンプルな直線型アンケートを作成します。`form_elements`は表示順に送信してください。分岐と繰り返しグループにはConsoleが必要です。デフォルトは`published`のv1です。",
        "operationId": "create_questionnaire",
        "x-didit-sdk": {
          "resource": "questionnaires",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Questionnaires"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SimpleQuestionnaireRequest"
              },
              "examples": {
                "Simple": {
                  "summary": "基本的なアンケート",
                  "value": {
                    "title": "Customer Onboarding",
                    "description": "Additional information needed for verification",
                    "default_language": "en",
                    "languages": [
                      "en"
                    ],
                    "is_active": true,
                    "form_elements": [
                      {
                        "id": "occupation",
                        "element_type": "short_text",
                        "label": {
                          "en": "What is your occupation?"
                        },
                        "is_required": true,
                        "placeholder": {
                          "en": "Software engineer"
                        }
                      },
                      {
                        "id": "source_of_funds",
                        "element_type": "multiple_choice",
                        "label": {
                          "en": "Source of funds"
                        },
                        "is_required": true,
                        "options": [
                          {
                            "value": "employment",
                            "label": {
                              "en": "Employment"
                            }
                          },
                          {
                            "value": "business",
                            "label": {
                              "en": "Business"
                            }
                          },
                          {
                            "value": "investments",
                            "label": {
                              "en": "Investments"
                            }
                          },
                          {
                            "value": "other",
                            "label": {
                              "en": "Other"
                            }
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "アンケートが作成されました。レスポンスには`questionnaire_id`が含まれます。ワークフローや今後の更新・削除の呼び出しからこのアンケートを参照できるよう、保存してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuestionnaireDetail"
                },
                "examples": {
                  "Created": {
                    "value": {
                      "questionnaire_id": "11111111-2222-3333-4444-555555555555",
                      "title": "Customer Onboarding",
                      "description": "Additional information needed for verification",
                      "languages": [
                        "en"
                      ],
                      "default_language": "en",
                      "is_active": true,
                      "is_simple_questionnaire": true,
                      "graph": {
                        "start_node": "occupation",
                        "nodes": {
                          "occupation": {
                            "element_type": "SHORT_TEXT",
                            "is_required": true,
                            "title": {
                              "en": "What is your occupation?"
                            },
                            "next": "source_of_funds"
                          },
                          "source_of_funds": {
                            "element_type": "MULTIPLE_CHOICE",
                            "is_required": true,
                            "title": {
                              "en": "Source of funds"
                            },
                            "choices": [
                              {
                                "value": "employment",
                                "label": {
                                  "en": "Employment"
                                }
                              },
                              {
                                "value": "business",
                                "label": {
                                  "en": "Business"
                                }
                              }
                            ],
                            "next": null
                          }
                        }
                      },
                      "sections": [],
                      "questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
                      "version": 1,
                      "status": "published",
                      "published_at": "2026-04-23T10:00:00Z",
                      "is_editable": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。よくある原因：不明な`element_type`、翻訳対象のフィールドで`languages`のいずれかの翻訳が欠けている、`languages`に`en`が含まれていない、`default_language`が`languages`に含まれていない、`label`のない選択肢、`branches`/`required_if`/`repeatable_config`を持つ質問（このエンドポイントでは未対応）、または`form_elements`の代わりに生の`graph`を送信した場合。ボディはフィールド名をキーとするDRFのバリデーションエラーです。",
            "content": {
              "application/json": {
                "examples": {
                  "Graph not accepted": {
                    "value": {
                      "graph": "The v3 questionnaire API only accepts simple `form_elements`, not `graph`."
                    }
                  },
                  "Missing label": {
                    "value": {
                      "form_elements": [
                        {
                          "label": [
                            "This field is required."
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "サポートされていないメディアタイプです。`Content-Type: application/json`を設定し、JSONボディを送信してください。"
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "アンケートの作成中に予期しないサーバーエラーが発生しました。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X POST 'https://verification.didit.me/v3/questionnaires/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"title\": \"Customer Onboarding\",\n    \"default_language\": \"en\",\n    \"languages\": [\"en\"],\n    \"form_elements\": [\n      {\n        \"id\": \"occupation\",\n        \"element_type\": \"short_text\",\n        \"label\": {\"en\": \"What is your occupation?\"},\n        \"is_required\": true\n      }\n    ]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.questionnaires.create(\n    title=\"Customer Onboarding\",\n    description=\"Additional information needed for verification\",\n    languages=[\"en\"],\n    default_language=\"en\",\n    is_active=True,\n    form_elements=[{\n        \"id\": \"occupation\",\n        \"element_type\": \"short_text\",\n        \"label\": {\"en\": \"What is your occupation?\"},\n        \"placeholder\": {\"en\": \"Software engineer\"},\n        \"is_required\": True,\n    }, {\n        \"id\": \"source_of_funds\",\n        \"element_type\": \"multiple_choice\",\n        \"label\": {\"en\": \"Source of funds\"},\n        \"is_required\": True,\n        \"options\": [{\n            \"value\": \"employment\",\n            \"label\": {\"en\": \"Employment\"},\n        }, {\n            \"value\": \"business\",\n            \"label\": {\"en\": \"Business\"},\n        }, {\n            \"value\": \"investments\",\n            \"label\": {\"en\": \"Investments\"},\n        }, {\n            \"value\": \"other\",\n            \"label\": {\"en\": \"Other\"},\n        }],\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.questionnaires.create({\n  title: \"Customer Onboarding\",\n  description: \"Additional information needed for verification\",\n  languages: [\"en\"],\n  default_language: \"en\",\n  is_active: true,\n  form_elements: [{\n    id: \"occupation\",\n    element_type: \"short_text\",\n    label: { en: \"What is your occupation?\" },\n    placeholder: { en: \"Software engineer\" },\n    is_required: true,\n  }, {\n    id: \"source_of_funds\",\n    element_type: \"multiple_choice\",\n    label: { en: \"Source of funds\" },\n    is_required: true,\n    options: [{\n      value: \"employment\",\n      label: { en: \"Employment\" },\n    }, {\n      value: \"business\",\n      label: { en: \"Business\" },\n    }, {\n      value: \"investments\",\n      label: { en: \"Investments\" },\n    }, {\n      value: \"other\",\n      label: { en: \"Other\" },\n    }],\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Questionnaires.Create(ctx, didit.SimpleQuestionnaireRequest{\n\tTitle:           \"Customer Onboarding\",\n\tDescription:     didit.String(\"Additional information needed for verification\"),\n\tLanguages:       []string{\"en\"},\n\tDefaultLanguage: didit.String(\"en\"),\n\tIsActive:        didit.Bool(true),\n\tFormElements: []didit.SimpleQuestionnaireElement{{\n\t\tID:          didit.String(\"occupation\"),\n\t\tElementType: \"short_text\",\n\t\tLabel:       map[string]string{\"en\": \"What is your occupation?\"},\n\t\tPlaceholder: didit.Some(map[string]string{\"en\": \"Software engineer\"}),\n\t\tIsRequired:  didit.Bool(true),\n\t}, {\n\t\tID:          didit.String(\"source_of_funds\"),\n\t\tElementType: \"multiple_choice\",\n\t\tLabel:       map[string]string{\"en\": \"Source of funds\"},\n\t\tIsRequired:  didit.Bool(true),\n\t\tOptions: didit.Some([]didit.SimpleQuestionnaireElementOptions{{\n\t\t\tValue: didit.String(\"employment\"),\n\t\t\tLabel: map[string]string{\"en\": \"Employment\"},\n\t\t}, {\n\t\t\tValue: didit.String(\"business\"),\n\t\t\tLabel: map[string]string{\"en\": \"Business\"},\n\t\t}, {\n\t\t\tValue: didit.String(\"investments\"),\n\t\t\tLabel: map[string]string{\"en\": \"Investments\"},\n\t\t}, {\n\t\t\tValue: didit.String(\"other\"),\n\t\t\tLabel: map[string]string{\"en\": \"Other\"},\n\t\t}}),\n\t}},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SimpleQuestionnaireElement;\nimport me.didit.types.SimpleQuestionnaireRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.questionnaires().create(SimpleQuestionnaireRequest.builder()\n        .title(\"Customer Onboarding\")\n        .description(\"Additional information needed for verification\")\n        .languages(List.of(\"en\"))\n        .defaultLanguage(\"en\")\n        .isActive(true)\n        .formElements(List.of(\n                SimpleQuestionnaireElement.builder()\n                        .id(\"occupation\")\n                        .elementType(SimpleQuestionnaireElement.ElementType.of(\"short_text\"))\n                        .label(Map.of(\"en\", \"What is your occupation?\"))\n                        .placeholder(Map.of(\"en\", \"Software engineer\"))\n                        .isRequired(true)\n                        .build(),\n                SimpleQuestionnaireElement.builder()\n                        .id(\"source_of_funds\")\n                        .elementType(SimpleQuestionnaireElement.ElementType.of(\"multiple_choice\"))\n                        .label(Map.of(\"en\", \"Source of funds\"))\n                        .isRequired(true)\n                        .options(List.of(\n                                SimpleQuestionnaireElement.Options.builder()\n                                        .value(\"employment\")\n                                        .label(Map.of(\"en\", \"Employment\"))\n                                        .build(),\n                                SimpleQuestionnaireElement.Options.builder()\n                                        .value(\"business\")\n                                        .label(Map.of(\"en\", \"Business\"))\n                                        .build(),\n                                SimpleQuestionnaireElement.Options.builder()\n                                        .value(\"investments\")\n                                        .label(Map.of(\"en\", \"Investments\"))\n                                        .build(),\n                                SimpleQuestionnaireElement.Options.builder()\n                                        .value(\"other\")\n                                        .label(Map.of(\"en\", \"Other\"))\n                                        .build()))\n                        .build()))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->questionnaires->create([\n    'title' => 'Customer Onboarding',\n    'description' => 'Additional information needed for verification',\n    'languages' => ['en'],\n    'default_language' => 'en',\n    'is_active' => true,\n    'form_elements' => [[\n        'id' => 'occupation',\n        'element_type' => 'short_text',\n        'label' => ['en' => 'What is your occupation?'],\n        'placeholder' => ['en' => 'Software engineer'],\n        'is_required' => true,\n    ], [\n        'id' => 'source_of_funds',\n        'element_type' => 'multiple_choice',\n        'label' => ['en' => 'Source of funds'],\n        'is_required' => true,\n        'options' => [[\n            'value' => 'employment',\n            'label' => ['en' => 'Employment'],\n        ], [\n            'value' => 'business',\n            'label' => ['en' => 'Business'],\n        ], [\n            'value' => 'investments',\n            'label' => ['en' => 'Investments'],\n        ], [\n            'value' => 'other',\n            'label' => ['en' => 'Other'],\n        ]],\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.questionnaires.create(\n  title: \"Customer Onboarding\",\n  description: \"Additional information needed for verification\",\n  languages: [\"en\"],\n  default_language: \"en\",\n  is_active: true,\n  form_elements: [{\n    id: \"occupation\",\n    element_type: \"short_text\",\n    label: { en: \"What is your occupation?\" },\n    placeholder: { en: \"Software engineer\" },\n    is_required: true,\n  }, {\n    id: \"source_of_funds\",\n    element_type: \"multiple_choice\",\n    label: { en: \"Source of funds\" },\n    is_required: true,\n    options: [{\n      value: \"employment\",\n      label: { en: \"Employment\" },\n    }, {\n      value: \"business\",\n      label: { en: \"Business\" },\n    }, {\n      value: \"investments\",\n      label: { en: \"Investments\" },\n    }, {\n      value: \"other\",\n      label: { en: \"Other\" },\n    }],\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Questionnaires.CreateAsync(new SimpleQuestionnaireRequest\n{\n    Title = \"Customer Onboarding\",\n    Description = \"Additional information needed for verification\",\n    Languages = new string[] { \"en\" },\n    DefaultLanguage = \"en\",\n    IsActive = true,\n    FormElements = new SimpleQuestionnaireElement[]\n    {\n        new()\n        {\n            Id = \"occupation\",\n            ElementType = \"short_text\",\n            Label = new Dictionary<string, string> { [\"en\"] = \"What is your occupation?\" },\n            Placeholder = new Dictionary<string, string> { [\"en\"] = \"Software engineer\" },\n            IsRequired = true,\n        },\n        new()\n        {\n            Id = \"source_of_funds\",\n            ElementType = \"multiple_choice\",\n            Label = new Dictionary<string, string> { [\"en\"] = \"Source of funds\" },\n            IsRequired = true,\n            Options = new SimpleQuestionnaireElementOptions[]\n            {\n                new()\n                {\n                    Value = \"employment\",\n                    Label = new Dictionary<string, string> { [\"en\"] = \"Employment\" },\n                },\n                new()\n                {\n                    Value = \"business\",\n                    Label = new Dictionary<string, string> { [\"en\"] = \"Business\" },\n                },\n                new()\n                {\n                    Value = \"investments\",\n                    Label = new Dictionary<string, string> { [\"en\"] = \"Investments\" },\n                },\n                new()\n                {\n                    Value = \"other\",\n                    Label = new Dictionary<string, string> { [\"en\"] = \"Other\" },\n                },\n            },\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/questionnaires/{questionnaire_uuid}/": {
      "get": {
        "summary": "アンケートを取得",
        "description": "`questionnaire_uuid`で指定した1つのバージョンについて、アンケートの完全な詳細を取得します。タイトル、`languages`、正規の`graph`、派生した`sections`、バージョンのメタデータが含まれます。",
        "operationId": "get_questionnaire",
        "x-didit-sdk": {
          "resource": "questionnaires",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Questionnaires"
        ],
        "parameters": [
          {
            "name": "questionnaire_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アンケートのバージョンごとのUUIDです（一覧エンドポイントが返す`uuid`の値で、詳細エンドポイントでは`questionnaire_id`としても返されます）。"
          }
        ],
        "responses": {
          "200": {
            "description": "正規の`graph`、派生した`sections`ビュー、バージョンのメタデータ、`is_editable`を含むアンケートの完全な詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuestionnaireDetail"
                },
                "examples": {
                  "Published questionnaire": {
                    "value": {
                      "questionnaire_id": "11111111-2222-3333-4444-555555555555",
                      "title": "Customer Onboarding",
                      "description": "Additional information needed for verification",
                      "languages": [
                        "en"
                      ],
                      "default_language": "en",
                      "is_active": true,
                      "is_simple_questionnaire": true,
                      "graph": {
                        "start_node": "occupation",
                        "nodes": {
                          "occupation": {
                            "element_type": "SHORT_TEXT",
                            "is_required": true,
                            "title": {
                              "en": "What is your occupation?"
                            },
                            "next": "source_of_funds"
                          },
                          "source_of_funds": {
                            "element_type": "MULTIPLE_CHOICE",
                            "is_required": true,
                            "title": {
                              "en": "Source of funds"
                            },
                            "choices": [
                              {
                                "value": "employment",
                                "label": {
                                  "en": "Employment"
                                }
                              },
                              {
                                "value": "business",
                                "label": {
                                  "en": "Business"
                                }
                              }
                            ],
                            "next": null
                          }
                        }
                      },
                      "sections": [
                        {
                          "title": {},
                          "description": {},
                          "items": [
                            {
                              "uuid": "11111111-2222-3333-4444-666666666666",
                              "value": "occupation",
                              "element_type": "SHORT_TEXT",
                              "is_required": true,
                              "title": {
                                "en": "What is your occupation?"
                              }
                            }
                          ]
                        }
                      ],
                      "questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
                      "version": 1,
                      "status": "published",
                      "published_at": "2026-04-23T10:00:00Z",
                      "is_editable": false
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "認証済みのアプリケーションに、この`questionnaire_uuid`のアンケートは存在しません。UUIDが誤っているか、別のアプリケーションに属しています。APIは意図的にこの2つのケースを区別しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "予期しないサーバーエラーです。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X GET 'https://verification.didit.me/v3/questionnaires/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.questionnaires.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.questionnaires.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Questionnaires.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.questionnaires().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->questionnaires->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.questionnaires.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Questionnaires.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "patch": {
        "summary": "アンケートを更新",
        "description": "アンケートを更新します。バージョン管理は、送信する`status`フィールドとバージョンの現在の状態によって決まります。(1) **公開済み**バージョンで`status`を指定しない場合→公開済みバージョンがその場で更新されます（同じ`questionnaire_id`、同じ`version`）。(2) **下書き**で`status`を指定しない場合→下書きが更新され、直ちに公開されます。(3) **公開済み**バージョンで`status: \"published\"`を指定した場合→同じ`questionnaire_group_id`の下に新しい公開済みバージョンが作成されて返され（新しい`questionnaire_id`、`version` + 1）、グループ内の既存の下書きは削除されます。(4) `status: \"draft\"`は下書きを下書きのまま保持します（自動保存）が、公開済みバージョンでは400で拒否されます（`\"Cannot revert a published version to draft.\"`）。",
        "operationId": "update_questionnaire",
        "x-didit-sdk": {
          "resource": "questionnaires",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Questionnaires"
        ],
        "parameters": [
          {
            "name": "questionnaire_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "更新するアンケートのバージョンごとのUUIDです。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SimpleQuestionnaireUpdateRequest"
              },
              "examples": {
                "Rename": {
                  "summary": "アンケートの名前を変更する",
                  "value": {
                    "title": "Updated Customer Onboarding"
                  }
                },
                "Replace questions": {
                  "summary": "線形の質問リスト全体を置き換え",
                  "value": {
                    "form_elements": [
                      {
                        "id": "occupation",
                        "element_type": "short_text",
                        "label": {
                          "en": "What is your occupation?"
                        },
                        "is_required": true
                      },
                      {
                        "id": "source_of_funds",
                        "element_type": "multiple_choice",
                        "label": {
                          "en": "Source of funds"
                        },
                        "options": [
                          {
                            "value": "employment",
                            "label": {
                              "en": "Employment"
                            }
                          },
                          {
                            "value": "business",
                            "label": {
                              "en": "Business"
                            }
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "アンケートが更新されました。本文は、結果として得られたバージョンの最新の状態です。つまり、その場で更新されたバージョン、または公開済みの行に`status: \"published\"`を送信した場合は新たに作成された公開バージョンです（この場合、`questionnaire_id`と`version`はパッチを適用したものと異なります）。レスポンスの`questionnaire_id`はバージョンごとのUUIDです。安定したグループ識別子が必要な場合は`questionnaire_group_id`を使用してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuestionnaireDetail"
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：不明な`element_type`、翻訳の欠落、サポートされていない分岐/条件フィールド、`en`を含まない`languages`、`languages`に含まれない`default_language`、ラベルのないオプション、生の`graph`の送信、または公開済みバージョンでの`status: \"draft\"`（`\"Cannot revert a published version to draft.\"`）。レスポンスボディは、フィールド名をキーとするDRFの検証エラーです。"
          },
          "403": {
            "description": "APIキーがないか、無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "認証済みのアプリケーションに、この`questionnaire_uuid`のアンケートは存在しません。"
          },
          "415": {
            "description": "サポートされていないメディアタイプです。`Content-Type: application/json`を設定してください。"
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "予期しないサーバーエラーです。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/questionnaires/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Updated Customer Onboarding\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.questionnaires.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    title=\"Updated Customer Onboarding\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.questionnaires.update(\"11111111-2222-3333-4444-555555555555\", {\n  title: \"Updated Customer Onboarding\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Questionnaires.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SimpleQuestionnaireUpdateRequest{\n\tTitle: didit.String(\"Updated Customer Onboarding\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SimpleQuestionnaireUpdateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.questionnaires().update(\"11111111-2222-3333-4444-555555555555\", SimpleQuestionnaireUpdateRequest.builder()\n        .title(\"Updated Customer Onboarding\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->questionnaires->update('11111111-2222-3333-4444-555555555555', [\n    'title' => 'Updated Customer Onboarding',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.questionnaires.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  title: \"Updated Customer Onboarding\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Questionnaires.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new SimpleQuestionnaireUpdateRequest\n{\n    Title = \"Updated Customer Onboarding\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "summary": "アンケートを削除",
        "description": "アンケートの1つのバージョンを完全に削除します（元に戻せません）。このバージョンに紐付いて保存されているアンケート回答も併せて削除され、このバージョンを参照しているセッションはそのリンクを失います。同じグループ内の他のバージョンは削除されません。このバージョンを参照していたワークフローは引き続き動作しますが、アンケートのステップはこのバージョンを読み込めなくなります。",
        "operationId": "delete_questionnaire",
        "x-didit-sdk": {
          "resource": "questionnaires",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Questionnaires"
        ],
        "parameters": [
          {
            "name": "questionnaire_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "削除するアンケートのバージョンごとのUUIDです。"
          }
        ],
        "responses": {
          "204": {
            "description": "アンケートが削除されました。レスポンス本文は空です。"
          },
          "403": {
            "description": "APIキーがないか、無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "認証済みのアプリケーションに、この`questionnaire_uuid`のアンケートは存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          },
          "500": {
            "description": "予期しないサーバーエラーです。安全に再試行できます。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/questionnaires/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.questionnaires.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.questionnaires.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Questionnaires.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.questionnaires().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->questionnaires->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.questionnaires.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Questionnaires.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ]
      }
    },
    "/v3/users/": {
      "get": {
        "summary": "ユーザーを一覧表示",
        "description": "同じ`vendor_data`(自由形式の文字列で、UUIDではありません)を共有するKYCセッションからDiditがまとめた[ユーザー](/entities/users)と、API経由で作成されたユーザーの一覧を取得します。ページネーションに対応し、`last_session_at`の降順で並びます。このエンドポイントはフィルターや検索のパラメーターに対応していないため、ページを取得してクライアント側でフィルタリングしてください。",
        "operationId": "list_users",
        "x-didit-sdk": {
          "resource": "users",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "description": "ページサイズ。省略時は50です。強制される上限はありませんが、レイテンシーを抑えるためにページは小さく保ってください。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "description": "返す最初のレコードの0始まりのオフセットです。手動で計算するよりも、前のページの`next`URLをたどる方法を推奨します。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/users/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.users.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.users.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Users.ListAutoPaging(ctx, didit.UsersListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.users().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->users->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.users.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Users.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "認証ステータス、セッション数、機能別の内訳を含む、ページネーションされたユーザー一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "一致する行の数。100までは正確な値で、パフォーマンスのため100を超える場合は100が上限となります。最終ページの判定には使用せず、代わりに`next`が`null`であることを利用してください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UserListItem"
                      }
                    }
                  }
                },
                "examples": {
                  "Example": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
                          "vendor_data": "user-abc-123",
                          "display_name": null,
                          "full_name": "John Michael Doe",
                          "date_of_birth": "1990-05-15",
                          "effective_name": "John Michael Doe",
                          "status": "ACTIVE",
                          "portrait_image_url": "https://<media-host>/...",
                          "session_count": 3,
                          "approved_count": 2,
                          "declined_count": 0,
                          "in_review_count": 1,
                          "issuing_states": [
                            "USA"
                          ],
                          "approved_emails": [
                            "john@example.com"
                          ],
                          "approved_phones": [
                            "+14155551234"
                          ],
                          "features": {
                            "ID_VERIFICATION": "Approved",
                            "LIVENESS": "Approved",
                            "FACE_MATCH": "Approved",
                            "AML": "Approved"
                          },
                          "features_list": [
                            {
                              "feature": "ID_VERIFICATION",
                              "status": "Approved"
                            },
                            {
                              "feature": "LIVENESS",
                              "status": "Approved"
                            },
                            {
                              "feature": "FACE_MATCH",
                              "status": "Approved"
                            },
                            {
                              "feature": "AML",
                              "status": "Approved"
                            }
                          ],
                          "last_session_at": "2025-06-15T10:30:00Z",
                          "last_activity_at": "2025-06-15T10:30:00Z",
                          "first_session_at": "2025-06-01T08:00:00Z",
                          "tags": [
                            {
                              "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                              "name": "VIP",
                              "color": "#2567FF"
                            }
                          ],
                          "created_at": "2025-06-01T08:00:00Z"
                        },
                        {
                          "didit_internal_id": "6ed99d53-e8f5-4cf8-9ac1-4a506cb40f6b",
                          "vendor_data": null,
                          "display_name": "Jane S.",
                          "full_name": "Jane Elizabeth Smith",
                          "date_of_birth": "1985-11-22",
                          "effective_name": "Jane S.",
                          "status": "FLAGGED",
                          "portrait_image_url": null,
                          "session_count": 1,
                          "approved_count": 0,
                          "declined_count": 0,
                          "in_review_count": 1,
                          "issuing_states": [],
                          "approved_emails": [],
                          "approved_phones": [],
                          "features": {
                            "ID_VERIFICATION": "In Review"
                          },
                          "features_list": [
                            {
                              "feature": "ID_VERIFICATION",
                              "status": "In Review"
                            }
                          ],
                          "last_session_at": "2025-06-20T14:00:00Z",
                          "last_activity_at": "2025-06-20T14:05:00Z",
                          "first_session_at": "2025-06-20T14:00:00Z",
                          "tags": [],
                          "created_at": "2025-06-20T14:00:00Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "このキーではこのアプリケーションのユーザーを一覧取得できません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/users/{vendor_data}/": {
      "get": {
        "summary": "ユーザーを取得",
        "description": "`vendor_data`(完全一致)で[ユーザー](/entities/users)を1件取得します。一覧表示の内容に`metadata`、`comments`、`updated_at`が加わり、`tags`は詳細なタグリンク形式に切り替わります。",
        "operationId": "get_user",
        "x-didit-sdk": {
          "resource": "users",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ユーザーに対するお客様独自の識別子です。自由形式の文字列（UUIDではありません）です。このユーザーを最初に登録したセッションの作成時に`vendor_data`として渡した値と同じで、送信されたとおりに完全一致で照合されます。",
            "example": "user-abc-123"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/users/user-abc-123/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.users.retrieve(\n    \"user-abc-123\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.users.retrieve(\"user-abc-123\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.Retrieve(ctx, \"user-abc-123\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.users().retrieve(\"user-abc-123\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->users->retrieve('user-abc-123');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.users.retrieve(\"user-abc-123\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Users.RetrieveAsync(\"user-abc-123\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "メタデータ、コメント/アクティビティログ、集計されたセッションデータを含むユーザーの完全な詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDetailItem"
                },
                "examples": {
                  "Active user": {
                    "value": {
                      "didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
                      "vendor_data": "user-abc-123",
                      "display_name": null,
                      "full_name": "John Michael Doe",
                      "date_of_birth": "1990-05-15",
                      "effective_name": "John Michael Doe",
                      "status": "ACTIVE",
                      "metadata": {
                        "tier": "premium",
                        "source": "website"
                      },
                      "portrait_image_url": "https://<media-host>/...",
                      "session_count": 3,
                      "approved_count": 2,
                      "declined_count": 0,
                      "in_review_count": 1,
                      "issuing_states": [
                        "USA"
                      ],
                      "approved_emails": [
                        "john@example.com"
                      ],
                      "approved_phones": [
                        "+14155551234"
                      ],
                      "features": {
                        "ID_VERIFICATION": "Approved",
                        "LIVENESS": "Approved",
                        "FACE_MATCH": "Approved",
                        "AML": "Approved"
                      },
                      "features_list": [
                        {
                          "feature": "ID_VERIFICATION",
                          "status": "Approved"
                        },
                        {
                          "feature": "LIVENESS",
                          "status": "Approved"
                        },
                        {
                          "feature": "FACE_MATCH",
                          "status": "Approved"
                        },
                        {
                          "feature": "AML",
                          "status": "Approved"
                        }
                      ],
                      "last_session_at": "2025-06-15T10:30:00Z",
                      "last_activity_at": "2025-06-15T10:30:00Z",
                      "first_session_at": "2025-06-01T08:00:00Z",
                      "tags": [
                        {
                          "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                          "tag": {
                            "uuid": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
                            "name": "VIP",
                            "color": "#2567FF",
                            "description": null,
                            "source": "custom",
                            "created_at": "2025-05-01T09:00:00Z",
                            "updated_at": "2025-05-01T09:00:00Z"
                          },
                          "added_by_email": "analyst@acme.com",
                          "added_by_name": "Jane Analyst",
                          "created_at": "2025-06-02T11:00:00Z"
                        }
                      ],
                      "comments": [
                        {
                          "uuid": "c1111111-2222-4333-8444-555555555555",
                          "comment_type": "STATUS_CHANGED",
                          "comment": null,
                          "actor_email": "analyst@acme.com",
                          "actor_name": "Jane Analyst",
                          "previous_status": "FLAGGED",
                          "new_status": "ACTIVE",
                          "previous_value": null,
                          "new_value": null,
                          "changed_fields": [],
                          "metadata": null,
                          "mentioned_emails": [],
                          "created_at": "2025-06-01T10:30:00Z"
                        }
                      ],
                      "created_at": "2025-06-01T08:00:00Z",
                      "updated_at": "2025-06-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが無効であるか取り消されている、またはこのキーではこのアプリケーションのユーザーを読み取れません。キーがない場合は`403`、誤ったキー、取り消されたキー、期限切れのキーの場合は`401`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`のユーザーがこのアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "ユーザーを更新",
        "description": "ユーザーを部分更新します。対象は`display_name`、`full_name`、`date_of_birth`、`status`、`metadata`、`approved_emails`/`approved_phones`/`issuing_states`です。`metadata`は全体が置き換えられます。ここで`status`を変更すると[ユーザーステータスの更新](#patch-/v3/users/-vendor_data-/update-status/)と同様に動作します。任意の`reason`とともに`STATUS_CHANGED`アクティビティが記録され、`BLOCKED`にすると`vendor_data`がシステムのブロックリストに追加されます(`BLOCKED`から変更するとそのエントリーは削除されます)。`display_name`、`full_name`、`date_of_birth`、`metadata`の変更は`PROFILE_UPDATED`アクティビティとして記録されます。",
        "operationId": "update_user",
        "x-didit-sdk": {
          "resource": "users",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ユーザーに対するお客様独自の識別子です（自由形式の文字列で、UUIDではありません）。",
            "example": "user-abc-123"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/users/user-abc-123/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"display_name\": \"Jane S.\", \"status\": \"FLAGGED\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.users.update(\n    \"user-abc-123\",\n    display_name=\"Jane S.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.users.update(\"user-abc-123\", {\n  display_name: \"Jane S.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.Update(ctx, \"user-abc-123\", didit.UsersUpdateParams{\n\tDisplayName: didit.String(\"Jane S.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.UsersUpdateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.users().update(\"user-abc-123\", UsersUpdateParams.builder()\n        .displayName(\"Jane S.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->users->update('user-abc-123', [\n    'display_name' => 'Jane S.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.users.update(\n  \"user-abc-123\",\n  display_name: \"Jane S.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Users.UpdateAsync(\"user-abc-123\", new UsersUpdateParams\n{\n    DisplayName = \"Jane S.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ユーザーが更新されました。更新後のユーザーの完全なレコード（Get Userと同じ形式）が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDetailItem"
                },
                "examples": {
                  "Updated": {
                    "value": {
                      "didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
                      "vendor_data": "user-abc-123",
                      "display_name": "Jane S.",
                      "full_name": "Jane Elizabeth Smith",
                      "date_of_birth": "1985-11-22",
                      "effective_name": "Jane S.",
                      "status": "FLAGGED",
                      "metadata": {
                        "tier": "premium"
                      },
                      "portrait_image_url": "https://<media-host>/...",
                      "session_count": 3,
                      "approved_count": 2,
                      "declined_count": 0,
                      "in_review_count": 1,
                      "issuing_states": [
                        "USA"
                      ],
                      "approved_emails": [
                        "john@example.com"
                      ],
                      "approved_phones": [
                        "+14155551234"
                      ],
                      "features": {
                        "ID_VERIFICATION": "Approved",
                        "LIVENESS": "Approved",
                        "FACE_MATCH": "Approved",
                        "AML": "Approved"
                      },
                      "features_list": [
                        {
                          "feature": "ID_VERIFICATION",
                          "status": "Approved"
                        },
                        {
                          "feature": "LIVENESS",
                          "status": "Approved"
                        },
                        {
                          "feature": "FACE_MATCH",
                          "status": "Approved"
                        },
                        {
                          "feature": "AML",
                          "status": "Approved"
                        }
                      ],
                      "last_session_at": "2025-06-15T10:30:00Z",
                      "last_activity_at": "2025-06-15T10:30:00Z",
                      "first_session_at": "2025-06-01T08:00:00Z",
                      "tags": [
                        {
                          "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                          "tag": {
                            "uuid": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
                            "name": "VIP",
                            "color": "#2567FF",
                            "description": null,
                            "source": "custom",
                            "created_at": "2025-05-01T09:00:00Z",
                            "updated_at": "2025-05-01T09:00:00Z"
                          },
                          "added_by_email": "analyst@acme.com",
                          "added_by_name": "Jane Analyst",
                          "created_at": "2025-06-02T11:00:00Z"
                        }
                      ],
                      "comments": [],
                      "created_at": "2025-06-01T08:00:00Z",
                      "updated_at": "2025-06-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "無効なリクエストボディ。主な原因は、不明な`status`、または`YYYY-MM-DD`形式でない`date_of_birth`です。",
            "content": {
              "application/json": {
                "examples": {
                  "Bad status": {
                    "value": {
                      "status": [
                        "\"INVALID\" is not a valid choice."
                      ]
                    }
                  },
                  "Bad date_of_birth": {
                    "value": {
                      "date_of_birth": [
                        "Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
                      ]
                    }
                  },
                  "Reason too long": {
                    "value": {
                      "reason": [
                        "Ensure this field has no more than 1000 characters."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "このキーではこのアプリケーションのユーザーを更新できません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`のユーザーがこのアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "full_name": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 512,
                    "description": "ユーザーの氏名"
                  },
                  "display_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "このユーザーのカスタム表示名"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "YYYY-MM-DD形式の生年月日"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "FLAGGED",
                      "BLOCKED"
                    ],
                    "description": "ユーザーのライフサイクルステータス。変更は`STATUS_CHANGED`アクティビティとして記録されます。`BLOCKED`にすると`vendor_data`がシステムのブロックリストに追加されます（`BLOCKED`から変更するとそのエントリは削除されます）。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "ユーザーに付与する任意のJSONオブジェクト。更新時には既存のメタデータを**完全に置き換えます**。キーを追加したいだけの場合は、クライアント側でマージしてください。"
                  },
                  "approved_emails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "このユーザーの認証済みメールアドレス。例: `[\"john@example.com\"]`。保存されているリストを完全に置き換えます。"
                  },
                  "approved_phones": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "このユーザーの認証済み電話番号。保存されているリストを完全に置き換えます。"
                  },
                  "issuing_states": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "発行国 (ISO 3166-1 alpha-3)。例: `[\"USA\"]`。保存されているリストを完全に置き換えます。"
                  },
                  "reason": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 1000,
                    "description": "ステータスが変更された理由。ユーザーのアクティビティ（`comments[].comment`、およびBusiness Consoleの**Activity**）にあるステータス変更エントリに記録されます。記録されるのは、ステータスが実際に変わった場合のみです。Webhookには含まれません。"
                  }
                }
              },
              "examples": {
                "Rename": {
                  "summary": "表示名を設定",
                  "value": {
                    "display_name": "Jane S."
                  }
                },
                "Override status": {
                  "summary": "ユーザーにレビュー用のフラグを付ける",
                  "value": {
                    "status": "FLAGGED"
                  }
                },
                "Add metadata": {
                  "summary": "メタデータJSONを置き換え",
                  "value": {
                    "metadata": {
                      "tier": "premium",
                      "risk_level": "low"
                    }
                  }
                },
                "Fix extracted DOB": {
                  "summary": "抽出されたプロフィールフィールドを修正",
                  "value": {
                    "full_name": "Jane Elizabeth Smith",
                    "date_of_birth": "1985-11-22"
                  }
                },
                "Flag with reason": {
                  "summary": "ユーザーにフラグを付け、理由を記録する",
                  "value": {
                    "status": "FLAGGED",
                    "reason": "Address does not match the billing country"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/users/{vendor_data}/generate-pdf/": {
      "get": {
        "summary": "ユーザー履歴全体のPDFレポートをダウンロード",
        "description": "`vendor_data`で識別されるユーザーの検証履歴全体を含む、コンプライアンス対応のPDFを1つ生成してダウンロードします。これはConsoleの**User detail → Actions → Download PDF**から作成されるものと同じ書類です。そのため、定期的なコンプライアンス用エクスポートのために担当者がConsoleで操作する必要はなくなります。\n\n**レポートの内容。** 表紙には、プロフィール概要（氏名、生年月日、発行国、承認済みのメールアドレスと電話番号）、各機能の最新ステータス、セッション数、含まれるセッションの索引が記載されます。その後に、含まれる各セッションの標準レポートが時系列順（古い順）で続きます。各セッションレポートは、そのセッションに対して`GET /v3/session/{sessionId}/generate-pdf/`が返す書類と同じです。\n\n**対象となるセッション。** ユーザー認証（KYC）セッションのうち、ステータスが`Approved`、`Declined`、`In Review`、`Kyc Expired`のもののみが含まれ、その他のステータスのセッションはスキップされます。これらのステータスのセッションがユーザーに1件もない場合、エンドポイントは`403`を返します（後述）。\n\n**上限。** レポートに含まれるのは、レポート対象となるセッションのうち**最新の20件**までです。ユーザーのセッションがそれより多い場合は最新の20件が含まれ、除外された古いセッションの件数が表紙に記載されます。完全な一覧をJSONで取得するには`GET /v3/sessions/?vendor_data=…`を使用してください。\n\n**ブランディング。** アプリケーションにホワイトラベルのカスタマイズが設定されている場合、表紙と各セッションレポートはお客様のロゴとプライバシーポリシーのURLを使って生成されます。設定されていない場合はDiditのブランディングになります。レポートは英語で生成され、言語パラメーターはありません。\n\n**キャッシュなし。** 呼び出しのたびに現在のデータからPDFが再生成されるため、手動レビュー後に生成したレポートにはレビュアーの判定が反映されます。同じユーザーに対する2回の呼び出しで、バイト単位で異なるファイルが生成されることがあります。変更されないコピーが必要な場合は、ダウンロードしたファイルを保管してください。\n\n**レイテンシ。** 生成は同期的に行われ、含まれる各セッションに保存されたすべての画像をダウンロードします。そのため、メディアの多いセッションを多数持つユーザーでは数十秒かかることがあります。クライアントの読み取りタイムアウトには十分な値（推奨は120秒）を設定し、ボディはディスクにストリーミングしてください。生成はクライアントが待機をやめるまで続くのではなく、サーバー側の時間制限に達した時点で停止します。この制限に達した場合でも、レスポンスは最新のセッションを含む有効なPDFであり、省略されたセッションの件数が表紙に記載されます。\n\n**スコープ。** ユーザーは、APIキーを所有するアプリケーション内で特定されます。キーで別のアプリケーションのユーザーをエクスポートすることは決してできません。そのようなユーザーはそのキーからは存在しないものとして扱われ、エンドポイントは`404`を返します。\n\n**末尾のスラッシュ。** 正規のルートは末尾がスラッシュで終わります（`…/generate-pdf/`）。スラッシュなしのリクエストにも、そのまま同じレスポンスが返されます。`301`リダイレクトは発生しないため、クライアントがリダイレクトを追跡する必要はなく、`curl`に`-L`を付ける必要もありません。サンプルのとおり、スラッシュ付きのURLを使用してください。",
        "operationId": "get_user_generate_pdf",
        "x-didit-sdk": {
          "resource": "users",
          "method": "generate_pdf",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ユーザーに対するお客様独自の識別子です。自由形式の文字列（UUIDではありません）です。ユーザーのセッション作成時に`vendor_data`として渡した値と同じで、送信されたとおりに完全一致で照合されます。URLエンコードしてください。`/`を含む値はこのルートでは指定できません。",
            "example": "user-abc-123"
          }
        ],
        "responses": {
          "200": {
            "description": "レンダリングされたPDF書類。バイナリの`application/pdf`として直接返されます。JSONラッパーやダウンロードURLを介した間接参照はありません。本文は`%PDF`のマジックバイトで始まります。`.pdf`ファイルに保存するか、呼び出し元にそのままストリーミングしてください。",
            "headers": {
              "Content-Disposition": {
                "description": "`attachment; filename=user_{didit_internal_id}.pdf`。ファイル名は`vendor_data`ではなく、ユーザーの不変のDidit識別子（`GET /v3/users/{vendor_data}/`の`didit_internal_id`）に基づきます。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=user_f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418.pdf"
                }
              },
              "Content-Length": {
                "description": "PDFの合計サイズ（バイト単位）。ボディはチャンク分割されません。",
                "schema": {
                  "type": "integer",
                  "example": 148213
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認可エラーまたは対象外エラーです。両者は`detail`文字列で区別します。\n\n- `\"You do not have permission to perform this action.\"`：APIキーが無効または失効しているか、リクエストにアプリケーションのAPIキーではなくConsoleユーザートークンが含まれています。\n- `\"This user has no sessions in review, declined, approved or kyc expired to report.\"`：ユーザーはアプリケーションに存在しますが、レポート可能なステータスのセッションがまだありません（例：すべてのセッションがまだ`In Progress`である、またはユーザーが`POST /v3/users/create/`で作成され、一度も認証を行っていない）。レポートをリクエストする前に`status.updated`のWebhookを待ってください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "This user has no sessions in review, declined, approved or kyc expired to report."
                    }
                  }
                },
                "examples": {
                  "Invalid credentials": {
                    "summary": "取り消し済みまたは無効なAPIキー、あるいはConsoleのユーザートークン",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "No reportable sessions": {
                    "summary": "ユーザーは存在しますが、承認済み、却下、レビュー中、KYC期限切れのいずれのセッションもありません",
                    "value": {
                      "detail": "This user has no sessions in review, declined, approved or kyc expired to report."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`のユーザーが、APIキーに紐づくアプリケーションに存在しません。他のアプリケーションのユーザーはこのキーからは参照できず、同じ`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "User not found."
                    }
                  }
                },
                "examples": {
                  "Unknown user": {
                    "summary": "vendor_dataがこのアプリケーションのどのユーザーとも一致しません",
                    "value": {
                      "detail": "User not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。PDF生成には、GET全体に適用される1分あたり600件の制限に加えて、このエンドポイントと`GET /v3/session/{sessionId}/generate-pdf/`で共有される**認証情報ごとに1分あたり50件**（APIキー、Bearerトークン、または未認証の場合は送信元IP）という専用の制限があります。`Retry-After`秒（`X-RateLimit-*`ヘッダーにも反映されます）待ってから再試行してください。レポートはサーバー側でキャッシュされないため、各レポートは1回だけダウンロードしてファイルを保存し、再取得しないでください。",
            "headers": {
              "Retry-After": {
                "description": "リクエストを再試行するまでに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "現在のウィンドウで許可されるPDF生成の最大回数（50）です。",
                "schema": {
                  "type": "integer",
                  "example": 50
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウの残りリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnixタイムスタンプ(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1750000000
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "レート制限超過を人が読める形で説明したもの。",
                      "example": "Session PDF generation rate limit exceeded. You can make up to 50 requests per minute."
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "summary": "同じ認証情報から1分間に50件を超えるPDF生成",
                    "value": {
                      "detail": "Session PDF generation rate limit exceeded. You can make up to 50 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --fail \\\n  'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  --output user-history.pdf"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.users.generate_pdf(\n    \"user-abc-123\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.users.generatePdf(\"user-abc-123\");\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Users.GeneratePDF(ctx, \"user-abc-123\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.users().generatePdf(\"user-abc-123\")\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->users->generatePdf('user-abc-123');\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.users.generate_pdf(\"user-abc-123\")\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Users.GeneratePdfAsync(\"user-abc-123\");\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ]
      }
    },
    "/v3/users/delete/": {
      "post": {
        "summary": "ユーザーの一括削除",
        "description": "ユーザーを**完全に削除**します。ユーザーレコードは完全に削除されます。日常的なブロックには、`BLOCKED`を指定した[ユーザーステータスの更新](#patch-/v3/users/-vendor_data-/update-status/)を使用してください。ユーザーは`vendor_data_list`、`didit_internal_id_list`、またはその両方を同時に指定して選択するか、`delete_all: true`を渡します。このエンドポイントがフィルターで`delete_all`の対象を絞り込むことはありません。コンソールのPeopleフィルターは`400`で拒否されるため（`400`レスポンスを参照）、絞り込むつもりのリクエストが全件削除になることはありません。例外が2つあります。`filter_has_approved_sessions`と`filter_has_declined_sessions`は拒否も適用もされないため、`delete_all: true`と併用してもすべてのユーザーが削除されます。これらは送信しないでください。\n\n**生体認証テンプレート:** `retain_face_embeddings`を`true`に設定しない限り、セッション削除後にこれらのユーザーについて保持されている画像を含まない生体認証テンプレート（`/v3/biometric-templates/`を参照）はすべて、ユーザーの削除前に消去されます。これにより、その人物は重複検出と顔検索で一致しなくなります。`retain_face_embeddings: true`と`face_retention_days`を指定すると、1人につき画像を含まない生体認証テンプレートを1つ、その日数だけ保持することを選択でき、その人物に関するそれ以外の情報は一切保持されません。生体認証ストアが利用できないためにテンプレートを消去できない場合、呼び出しは`503`を返し、リクエスト内のユーザーは1人も削除されません。同じリクエストを再度実行すると処理が完了します。\n\n**提出済みの規制レポート:** 選択したデータが確定済みの規制レポートに含まれている場合、リクエスト全体が`409`で拒否され、何も削除されません。レスポンス本文には`code: in_filed_report`が含まれ、各レポートが`uuid`、`report_number`、`report_type`、`case_uuid`で示されます。レポートを削除してから、リクエストを再度実行してください。",
        "operationId": "batch_delete_users",
        "x-didit-sdk": {
          "resource": "users",
          "method": "batch_delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "`vendor_data_list`、`didit_internal_id_list`、または`delete_all: true`を指定してください。2つのリストは組み合わせることができ、OR条件で評価されます。`delete_all`が`true`の場合はそれが優先され、両方のリストは無視されます。",
                "properties": {
                  "vendor_data_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "削除するお客様独自の識別子で、送信した値と完全一致で照合されます。"
                  },
                  "didit_internal_id_list": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "description": "削除するDidit内部ユーザーIDです。作成および取得のエンドポイントが返す`didit_internal_id`を指定します。"
                  },
                  "delete_all": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、アプリケーション内のすべてのユーザーを削除します。"
                  },
                  "retain_face_embeddings": {
                    "type": "boolean",
                    "default": false,
                    "description": "削除された各人物について、重複検知のために画像を含まない生体認証テンプレートを1つ、`face_retention_days`の期間保持するというお客様の明示的な選択です。その人物に関するそれ以外のものはすべて削除されます。ユーザーとともにテンプレートも削除する場合は、省略するか`false`を送信してください。`true`の場合、`face_retention_days`は必須です。"
                  },
                  "face_retention_days": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3650,
                    "description": "`retain_face_embeddings`が`true`の場合に、画像を含まない生体認証テンプレートを保持する日数。同フィールドと併せて指定する必要があり、同フィールドなしで指定すると`face_retention_days`に対する`400`で拒否されます。",
                    "example": 365
                  }
                }
              },
              "examples": {
                "Specific users": {
                  "summary": "vendor_dataでユーザーを削除",
                  "value": {
                    "vendor_data_list": [
                      "user-123",
                      "user-456"
                    ]
                  }
                },
                "By Didit internal ID": {
                  "summary": "didit_internal_idでユーザーを削除",
                  "value": {
                    "didit_internal_id_list": [
                      "3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11"
                    ]
                  }
                },
                "All users": {
                  "summary": "このアプリケーションのすべてのユーザーを消去",
                  "value": {
                    "delete_all": true
                  }
                },
                "Keep face templates": {
                  "summary": "ユーザーを削除し、匿名の顔テンプレートを365日間保持",
                  "value": {
                    "vendor_data_list": [
                      "user-123"
                    ],
                    "retain_face_embeddings": true,
                    "face_retention_days": 365
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/users/delete/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"vendor_data_list\": [\"user-123\", \"user-456\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.users.batch_delete(\n    vendor_data_list=[\"user-123\", \"user-456\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.users.batchDelete({\n  vendor_data_list: [\"user-123\", \"user-456\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.BatchDelete(ctx, didit.UsersBatchDeleteParams{\n\tVendorDataList: didit.Some([]string{\"user-123\", \"user-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.UsersBatchDeleteParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.users().batchDelete(UsersBatchDeleteParams.builder()\n        .vendorDataList(List.of(\"user-123\", \"user-456\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->users->batchDelete([\n    'vendor_data_list' => ['user-123', 'user-456'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.users.batch_delete(vendor_data_list: [\"user-123\", \"user-456\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Users.BatchDeleteAsync(new UsersBatchDeleteParams\n{\n    VendorDataList = new string[] { \"user-123\", \"user-456\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ユーザーが削除されました。実際に削除されたユーザー数を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "integer",
                      "description": "削除されたユーザーの数です（何にも一致しなかったvendor_dataの値は含みません）。"
                    }
                  }
                },
                "examples": {
                  "Deleted some": {
                    "value": {
                      "deleted": 2
                    }
                  },
                  "Nothing matched": {
                    "value": {
                      "deleted": 0
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。何も削除されません。エラーはフィールド名をキーとします。セレクターがない場合（どちらのリストもなく、`delete_all`が`true`でない場合）、ボディは`{\"vendor_data_list\": [\"This field is required unless delete_all is true.\"]}`です。空のリストは、そのリスト自身のキーで`\"This list may not be empty.\"`として拒否されます。Console専用のフィルター（`filter_search`、`filter_status`、`filter_country`、`filter_date_from`、`filter_date_to`、`filter_tag`、`filter_latest_verification_status`、`filter_risk`、`filter_has_sessions`、`filter_has_open_alerts`、`filter_aml_monitoring`、`filter_can_sign_in`、`filter_auth_status`、`filter_auth_method`または`filter_auth_mfa_enabled`）は、値を持つ場合は`false`であっても常に拒否され、該当する各フィールドをキーとするオブジェクトが返されます。その他の不明な`filter_*`キーは`\"Unknown filter.\"`として拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing selector": {
                    "summary": "listとdelete_allのどちらも指定されていません",
                    "value": {
                      "vendor_data_list": [
                        "This field is required unless delete_all is true."
                      ]
                    }
                  },
                  "Console-only filter": {
                    "value": {
                      "filter_has_sessions": "This filter is Console-only and is not supported by this endpoint."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが無効であるか取り消されている、またはこのキーではこのアプリケーションのユーザーを削除できません。キーがない場合は`403`、誤ったキー、取り消されたキー、期限切れのキーの場合は`401`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "生体認証テンプレートの保持または消去中に、生体認証ストアが利用できませんでした。何も削除されていません。同じリクエストを再度送信してください。再試行は冪等で、単一のテンプレートに収束します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Retryable": {
                    "value": {
                      "detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "選択内容に、確定済みの規制当局向けレポートに含まれる人物が含まれています。何も削除されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InFiledReportError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/sessions/delete/": {
      "post": {
        "summary": "session_numberを指定してKYCセッションを一括削除",
        "description": "数値の`session_number`を指定してユーザー認証(KYC)セッションを一括削除するか、`delete_all: true`でアプリケーション内のすべてのKYCセッションを削除します。\n\n`session_number`は、Consoleのセッション一覧に表示され、セッション作成エンドポイントと判定エンドポイントが`session_number`として返す、人が読みやすい連番のカウンターです。`session_id`のUUIDでは**ありません**。UUIDでセッションを削除する場合、または法人確認(KYB)セッションを削除する場合は、代わりに`DELETE /v3/session/{sessionId}/delete/`を使用してください。このエンドポイントがKYBセッションに触れることはありません。\n\n**最大20件のセッションはリクエスト内で削除され、それを超える場合はジョブとして実行されます。**`session_numbers`で選択した場合も`delete_all`で選択した場合も、該当するセッションの件数によって処理が決まります。\n- 該当するセッションが20件以下の場合は、レスポンスの前に削除されます。レスポンスは`200`で、`results[]`にセッションごとに1件のエントリが含まれます。\n- 20件を超える場合は、レスポンスは削除ジョブを含む`202`となり、セッションはバックグラウンドで削除されます。`status`が`COMPLETED`または`FAILED`になるまで`GET /v3/sessions/delete/{job_id}/`をポーリングしてください。ジョブは結果ごとの件数を報告しますが、どのセッションを削除したかは一切報告しません。`delete_all`のジョブはリクエスト前に作成されたセッションのみを削除します。ジョブの実行中に開始されたセッションは削除されません。\n\n削除される各セッションは、単一セッション削除エンドポイントとまったく同じ扱いを受けます。セッション、そのセッションが保持するすべての認証試行、判定と抽出データ、関連する機能レコード(本人確認、顔、ライブネス、顔照合など)、および保存されているすべてのファイルが削除され、すべての読み取りエンドポイントから表示されなくなり、以前に発行されたメディアURLは解決できなくなります。削除されたセッションについてキューに残っているWebhook配信とその再試行は破棄されます。すでに配信済みのWebhookには影響しません。ブロックリストのエントリは削除**されず**、すでに消費されたクレジットは払い戻し**されず**、親のUserエンティティも削除**されません**(これらには`POST /v3/users/delete/`を使用してください)。削除に関するWebhookは送信されません。削除は永続的で、元に戻すことはできません。\n\n**選択の仕組み：**\n- `delete_all: true`を指定した場合、`GET /v3/sessions/`のフィルターにそれぞれ`filter_`を付けたもの(例：`filter_status`、`filter_workflow_id`、`filter_date_from`)で選択対象を絞り込めます。List Sessionsで複数の値を受け付けるフィルター(`status`、`workflow_id`、`country`、`region`、`document_type`、`document_name`、`session_type`、`warning`、`organization_name`)は、カンマ区切りの文字列または配列を受け付けます。それ以外のフィルターは1つの値を受け付けます。空の値は無視されます。フィルターは`delete_all`と併用した場合にのみ適用され、削除ジョブにも同じフィルターが適用されます。\n- 不明な`filter_*`キー、または読み取れないフィルター値があると、何かが削除される前にリクエスト全体が`400`で拒否されます。そのため、フィルターの入力ミスによって削除対象がすべてのセッションに広がることはありません。\n- `session_numbers`のエントリのうち、アプリケーション内の有効なKYCセッションに一致しないもの(不明な番号、削除済みのセッション、別のアプリケーションが所有するセッション)は**通知なくスキップ**されます。これらは`results`に含まれず、ジョブの`total`にもカウントされません。\n- 検証エラー(数値でないエントリ、空のリスト、`session_numbers`と`delete_all`のいずれも指定されていない場合、またはアプリケーションが対応できないテンプレートの保持設定)が発生すると、**リクエスト全体**が`400`で拒否され、何も削除されません。\n- セッションはグループ単位で削除されます。グループを削除できない場合(ストレージサービスが利用できない場合など)、そのグループ内のすべてのセッションは`face_retention_outcome: failed_retryable`として報告され、削除されずに残ります。他のグループには影響しません。それらのセッションについてリクエストを再度実行してください。ジョブの場合は、そのようなグループを自動的に再試行します。\n- リストの長さについて文書化された上限はありません。実質的な上限は共有の書き込みレート制限(後述)です。\n\n**顔の生体認証データ：**任意の`retain_face_embeddings`、`face_retention_days`、`face_retention_deadline`、`deletion_instruction`、`instruction_id`フィールドは、`DELETE /v3/session/{sessionId}/delete/`と同じ意味を持ち、一致したすべてのセッションに適用されます。各結果はそれぞれの`face_retention_outcome`を報告します。\n\n**レスポンス：**該当するセッションが20件以下の場合は`results[]`を含む`200 OK`、それを超える場合は削除ジョブを含む`202 Accepted`が返されます。`face_retention_outcome: failed_retryable`を除くすべての結果は削除が完了したことを示します。この結果は削除**されなかった**セッションを示すため、再試行してください。このエンドポイントの以前のバージョンは`204 No Content`を返していました。`204`を前提としているクライアントは更新してください。\n\n**冪等性：**同じリクエストを繰り返しても、それ以上削除されることはありません。セッションに一致しなくなった番号はスキップされます。\n\n**`delete_all: true`(破壊的操作)：**アプリケーション内に残っている**すべての**KYCセッションを削除します。指定した場合、`session_numbers`は無視されます。確認ステップはなく、元に戻すこともできません。\n\n**認証：**`x-api-key`ヘッダーにAPIキーを指定します。認証情報がない、または無効な場合は`403`(`{\"detail\": \"You do not have permission to perform this action.\"}`)が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限：**すべてのPOST/PATCH/DELETEエンドポイントで共有される、APIキーごとに毎分300リクエストの書き込み枠です。超過すると`429`が返されます。\n\nこのエンドポイントはAPIキーのみを受け付けます。Business ConsoleユーザーのBearerトークンは`403`で拒否されます(両方を受け付ける単一セッション削除とは異なります)。\n\n**提出済みの規制当局向けレポート：**選択したデータが確定済みの規制当局向けレポートに含まれている場合、リクエスト全体が`409`で拒否され、何も削除されません。レスポンス本文では`code: in_filed_report`が使用され、各レポートが`uuid`、`report_number`、`report_type`、`case_uuid`で示されます。レポートを削除してから、リクエストを再度実行してください。",
        "operationId": "batch_delete_sessions",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "batch_delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "session_numbers": {
                    "type": "array",
                    "description": "削除するKYCセッションの数値の`session_number`の値で、数字のみの文字列で指定します（JSONの数値も受け付けられ、変換されます）。`delete_all`が`true`でない限り必須で、空のリストは`400`を返します。数字以外の要素が1つでもあるとリクエスト全体が`400`で拒否されます（`delete_all`が`true`の場合は検証がスキップされ、要素は無視されます）。アプリケーション内の有効なセッションに一致しない番号は通知なくスキップされます。",
                    "items": {
                      "type": "string",
                      "pattern": "^[0-9]+$",
                      "example": "1001"
                    },
                    "minItems": 1,
                    "example": [
                      "1001",
                      "1002",
                      "1003"
                    ]
                  },
                  "delete_all": {
                    "type": "boolean",
                    "description": "`true`の場合、呼び出し元アプリケーションに残っているすべてのKYCセッションが削除され、`session_numbers`は無視されます。ただし、`filter_*`キーで対象を絞り込んだ場合は除きます。該当するセッションが20件を超える場合は削除ジョブ（`202`）として実行され、リクエストより前に作成されたセッションのみが対象になります。デフォルトは`false`です。元に戻すことはできず、確認ステップもありません。",
                    "default": false,
                    "example": false
                  },
                  "retain_face_embeddings": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "この削除について、アプリケーションの`face_retention_policy`を上書きします。`true`の場合、セッションの削除後も、画像を含まない顔の生体認証テンプレートを1つ、セッションのユーザーに紐付けて保持します。`false`の場合、顔エンベディングはセッションとともに削除されます。省略するか`null`にすると、アプリケーションのポリシーに従います。KYBセッション、および顔エンベディングのないセッションでは無視されます。",
                    "example": true
                  },
                  "face_retention_days": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3650,
                    "description": "保持されるテンプレートの有限の保持期間（日数）です。テンプレートを保持する場合は必須です。ただし、アプリケーションですでに`face_retention_days`が設定されている場合を除きます。テンプレートの`expires_at`は、この期間、アプリケーションの一般的なデータ保持期間、`face_retention_deadline`のうち最も早いものになります。",
                    "example": 365
                  },
                  "face_retention_deadline": {
                    "type": "string",
                    "format": "date-time",
                    "description": "保持されるテンプレートの任意の強制有効期限です。未来の日時である必要があります。",
                    "example": "2027-08-28T00:00:00Z"
                  },
                  "deletion_instruction": {
                    "type": "string",
                    "enum": [
                      "operational_session_delete",
                      "privacy_erasure"
                    ],
                    "default": "operational_session_delete",
                    "description": "指示の種類。`operational_session_delete`はセッションを削除し、ポリシーまたは`retain_face_embeddings`で指定されている場合にのみテンプレートを保持します。`privacy_erasure`は、セッションのユーザーに紐づく保持済みの生体認証テンプレートをすべて完全に削除してからセッションを削除します。アプリケーションのポリシーで上書きすることはできず、`retain_face_embeddings: true`と組み合わせることもできません（`400`）。",
                    "example": "operational_session_delete"
                  },
                  "instruction_id": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "この削除指示に対するお客様の永続的な参照ID（例: 消去チケットのID）です。監査証跡と、保持されるテンプレートに記録されます。省略した場合はDiditが生成します。",
                    "example": "dsar-2026-0142"
                  },
                  "filter_status": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`status`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_vendor_data": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`vendor_data`フィルターに同じ値で一致するセッションに絞り込みます。リストではなく1つの値です。配列は1つのカンマ区切りテキストに結合されるため、複数の値がそれぞれの候補として照合されることはありません。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string"
                  },
                  "filter_search": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`search`フィルターに同じ値で一致するセッションに絞り込みます。リストではなく1つの値です。配列は1つのカンマ区切りテキストに結合されるため、複数の値がそれぞれの候補として照合されることはありません。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string"
                  },
                  "filter_workflow_id": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`workflow_id`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_date_from": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`date_from`フィルターに同じ値で一致するセッションに絞り込みます。値は1つで、リストではありません。配列は1つのカンマ区切りの値に結合されるため、複数の値は`400`で拒否されます。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string",
                    "format": "date"
                  },
                  "filter_date_to": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`date_to`フィルターに同じ値で一致するセッションに絞り込みます。値は1つで、リストではありません。配列は1つのカンマ区切りの値に結合されるため、複数の値は`400`で拒否されます。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string",
                    "format": "date"
                  },
                  "filter_country": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`country`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_document_type": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`document_type`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_document_name": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`document_name`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_region": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`region`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_didit_internal_id": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`didit_internal_id`フィルターに同じ値で一致するセッションに絞り込みます。値は1つで、リストではありません。配列は1つのカンマ区切りの値に結合されるため、複数の値は`400`で拒否されます。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string",
                    "format": "uuid"
                  },
                  "filter_session_type": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`session_type`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_api_service": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`api_service`フィルターに同じ値で一致するセッションに絞り込みます。値は1つで、リストではありません。配列は1つのカンマ区切りの値に結合されるため、複数の値は`400`で拒否されます。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string"
                  },
                  "filter_screened_full_name": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`screened_full_name`フィルターに同じ値で一致するセッションに絞り込みます。リストではなく1つの値です。配列は1つのカンマ区切りテキストに結合されるため、複数の値がそれぞれの候補として照合されることはありません。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string"
                  },
                  "filter_warning": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`warning`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "filter_status_initialized_as_in_review": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`status_initialized_as_in_review`フィルターに同じ値で一致するセッションに絞り込みます。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "boolean"
                  },
                  "filter_is_kyc_to_be_reviewed": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`is_kyc_to_be_reviewed`フィルターに同じ値で一致するセッションに絞り込みます。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "boolean"
                  },
                  "filter_euuid": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`euuid`フィルターに同じ値で一致するセッションに絞り込みます。値は1つで、リストではありません。配列は1つのカンマ区切りの値に結合されるため、複数の値は`400`で拒否されます。`delete_all`がない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "type": "string",
                    "format": "uuid"
                  },
                  "filter_organization_name": {
                    "description": "`delete_all`の対象を、[List Sessions](/ja/sessions-api/list-sessions)の`organization_name`フィルターに同じ値で一致するセッションに絞り込みます。カンマ区切りの文字列または配列で指定します。APIキーを使用する場合は自組織の名前にしか一致しないため、すべてのセッションが選択されるか、1件も選択されないかのいずれかになります。`delete_all`を指定しない場合は無視されます。空の値は無視され、選択範囲は絞り込まれません。",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  }
                }
              },
              "examples": {
                "Specific sessions": {
                  "summary": "番号を指定して特定のセッションを削除",
                  "value": {
                    "session_numbers": [
                      "1001",
                      "1002",
                      "1003"
                    ]
                  }
                },
                "All sessions": {
                  "summary": "アプリケーション内のすべてのKYCセッションを削除",
                  "value": {
                    "delete_all": true
                  }
                },
                "Delete and retain templates": {
                  "summary": "セッションを削除し、画像を含まない生体認証テンプレートは365日間保持",
                  "value": {
                    "session_numbers": [
                      "1001",
                      "1002"
                    ],
                    "retain_face_embeddings": true,
                    "face_retention_days": 365,
                    "instruction_id": "post-approval-cleanup-2026-08"
                  }
                },
                "Privacy erasure": {
                  "summary": "セッションを削除し、そのユーザーの保持済みテンプレートをすべて消去",
                  "value": {
                    "session_numbers": [
                      "1001"
                    ],
                    "deletion_instruction": "privacy_erasure",
                    "instruction_id": "dsar-2026-0142"
                  }
                },
                "Filtered delete_all": {
                  "summary": "1つのワークフローで2026年9月に作成された却下のセッションをすべて削除",
                  "value": {
                    "delete_all": true,
                    "filter_status": [
                      "Declined"
                    ],
                    "filter_workflow_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                    "filter_date_from": "2026-09-01",
                    "filter_date_to": "2026-09-30"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "最大20件のセッションが一致し、リクエスト内で処理されました。一致したセッションごとに1件の結果が返ります。何にも一致しなかった番号（不明または削除済み）はスキップされ、結果に含まれません。結果は削除の完了を示しますが、`face_retention_outcome`が`failed_retryable`の場合は例外です。そのセッションは削除されておらず、再試行する必要があります。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "session_id": {
                            "type": "string",
                            "format": "uuid",
                            "description": "削除されたセッションです。"
                          },
                          "session_number": {
                            "type": "integer",
                            "nullable": true,
                            "description": "削除されたセッションの番号です。"
                          },
                          "face_retention_outcome": {
                            "type": "string",
                            "enum": [
                              "retained_with_user",
                              "deleted",
                              "none",
                              "ineligible_no_vendor_user",
                              "failed_retryable"
                            ],
                            "description": "セッションの顔生体データがどう処理されたか。`deleted`: 顔エンベディングはセッションとともに削除されました（デフォルト）。`retained_with_user`: セッションは削除され、画像を含まない生体認証テンプレートが1件Userに紐付いて残ります。`biometric_template_uuid`を参照してください。`none`: セッションに顔エンベディングがありませんでした（例: ライブネスのセルフィーがない書類のみのKYCセッション。KYBセッションがこのエンドポイントで選択されることはありません）。`ineligible_no_vendor_user`: 保持がリクエストされましたが、セッションに紐付くUserがないため、エンベディングはセッションとともに削除されました。`failed_retryable`（バッチエンドポイントのみ）: このセッションと一緒に削除されるグループを削除できませんでした（ストレージサービス、生体データストア、またはモニタリングプロバイダーが利用できませんでした）。このセッションはそのまま残っているため、このセッションについてリクエストを再度実行してください。"
                          },
                          "biometric_template_uuid": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "`face_retention_outcome`が`retained_with_user`の場合に保持された生体認証テンプレートのID。それ以外の場合は`null`です。`/v3/biometric-templates/{template_uuid}/`で管理します。"
                          },
                          "biometric_template_expires_at": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "`face_retention_outcome`が`retained_with_user`の場合に、保持された生体認証テンプレートが削除される日時。テンプレートが保持されていない場合は`null`です。"
                          },
                          "deleted_child_verifications": {
                            "type": "integer",
                            "description": "このエンドポイントはKYCセッションのみを削除するため、常に`0`です。`DELETE /v3/session/{sessionId}/delete/`で法人確認 (KYB)セッションを削除すると、そのセッションが作成し、一緒に削除された認証が報告されます。"
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Mixed outcomes": {
                    "value": {
                      "results": [
                        {
                          "session_id": "4c5c7f3a-3b1d-4b7e-9c39-2b4f7e6a1d02",
                          "session_number": 1001,
                          "face_retention_outcome": "deleted",
                          "biometric_template_uuid": null,
                          "biometric_template_expires_at": null,
                          "deleted_child_verifications": 0
                        },
                        {
                          "session_id": "b8e1d2c3-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
                          "session_number": 1002,
                          "face_retention_outcome": "retained_with_user",
                          "biometric_template_uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                          "biometric_template_expires_at": "2027-10-09T10:15:00Z",
                          "deleted_child_verifications": 0
                        },
                        {
                          "session_id": "7a1e9c2d-5f4b-4c3a-8e2d-1b0a9f8e7d6c",
                          "session_number": 1003,
                          "face_retention_outcome": "ineligible_no_vendor_user",
                          "biometric_template_uuid": null,
                          "biometric_template_expires_at": null,
                          "deleted_child_verifications": 0
                        },
                        {
                          "session_id": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
                          "session_number": 1004,
                          "face_retention_outcome": "failed_retryable",
                          "biometric_template_uuid": null,
                          "biometric_template_expires_at": null,
                          "deleted_child_verifications": 0
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "20件を超えるセッションが一致しました。これらはバックグラウンドで削除されます。`status`が`COMPLETED`または`FAILED`になるまで`GET /v3/sessions/delete/{job_id}/`をポーリングしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionDeletionJob"
                },
                "examples": {
                  "Job accepted": {
                    "value": {
                      "job_id": "5b8f2c1e-7d3a-4f6b-9e2c-1a0d8f7e6c5b",
                      "status": "PENDING",
                      "total": 250,
                      "processed": 0,
                      "outcomes": {
                        "deleted": 0,
                        "none": 0,
                        "retained_with_user": 0,
                        "ineligible_no_vendor_user": 0,
                        "failed_retryable": 0,
                        "already_deleted": 0
                      },
                      "deleted_child_verifications": 0,
                      "error": null,
                      "created_at": "2026-10-09T10:15:00Z",
                      "completed_at": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：何も削除されていません。エラー値は、フィールド名をキーとするメッセージ文字列の配列です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "session_numbers": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": {
                    "description": "その他のキー：List Sessionsのフィルターではない`filter_*`キー（`\"Unknown filter.\"`）、または値を読み取れない`filter_*`キー（その`filter_*`キーをキーとし、メッセージの配列を値とします）。"
                  }
                },
                "examples": {
                  "Missing selector": {
                    "summary": "session_numbersとdelete_allのどちらも指定されていません",
                    "value": {
                      "session_numbers": [
                        "This field is required unless delete_all is true."
                      ]
                    }
                  },
                  "Empty list": {
                    "summary": "session_numbersが空の配列です",
                    "value": {
                      "session_numbers": [
                        "This list may not be empty."
                      ]
                    }
                  },
                  "Non-numeric entry": {
                    "summary": "session_numbersに数字以外の文字列が含まれています",
                    "value": {
                      "session_numbers": [
                        "All session_numbers must be numeric."
                      ]
                    }
                  },
                  "Privacy erasure cannot retain": {
                    "summary": "deletion_instructionのprivacy_erasureとretain_face_embeddings trueの組み合わせ",
                    "value": {
                      "retain_face_embeddings": [
                        "Privacy erasure cannot retain biometric templates."
                      ]
                    }
                  },
                  "No finite retention duration": {
                    "summary": "リクエストにもアプリケーションにもface_retention_daysがない状態で保持がリクエストされた",
                    "value": {
                      "detail": "A finite biometric-template retention duration is required."
                    }
                  },
                  "Unknown filter": {
                    "summary": "List Sessionsに存在しないfilter_*キー",
                    "value": {
                      "filter_reviewer": "Unknown filter."
                    }
                  },
                  "Unreadable filter value": {
                    "summary": "読み取れないフィルター値",
                    "value": {
                      "filter_date_from": [
                        "Enter a valid date."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "x-api-keyヘッダーがないか、キーが無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "共有の書き込みレート制限を超えました（APIキーごとに1分あたりPOST/PATCH/DELETEリクエスト300件）。再試行する前に、`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "書き込みの上限に達しました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "選択したセッションが、確定済みの規制当局向けレポートに含まれています。何も削除されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InFiledReportError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/sessions/delete/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"session_numbers\": [\"1001\", \"1002\", \"1003\"]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.batch_delete(\n    session_numbers=[\"1001\", \"1002\", \"1003\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.batchDelete({\n  session_numbers: [\"1001\", \"1002\", \"1003\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.BatchDelete(ctx, didit.SessionsBatchDeleteParams{\n\tSessionNumbers: didit.Some([]string{\"1001\", \"1002\", \"1003\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.SessionsBatchDeleteParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().batchDelete(SessionsBatchDeleteParams.builder()\n        .sessionNumbers(List.of(\"1001\", \"1002\", \"1003\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->batchDelete([\n    'session_numbers' => ['1001', '1002', '1003'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.batch_delete(session_numbers: [\"1001\", \"1002\", \"1003\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.BatchDeleteAsync(new SessionsBatchDeleteParams\n{\n    SessionNumbers = new string[] { \"1001\", \"1002\", \"1003\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/sessions/delete/{job_id}/": {
      "get": {
        "summary": "セッション一括削除ジョブを取得",
        "description": "`POST /v3/sessions/delete/`が`202`で応答した一括セッション削除の進捗です（`session_numbers`または`delete_all`で選択され、該当するセッションが20件を超える場合）。`status`が`PENDING`または`PROCESSING`の間は数秒ごとにポーリングし、`COMPLETED`または`FAILED`になったら停止してください。\n\nジョブは、各結果に終わったセッションの件数と処理済みの件数を報告しますが、どのセッションを削除したかは報告しません。`FAILED`のジョブは`error`に理由を含みます。ジョブが処理に到達していなかったセッションはそのまま残っているため、削除リクエストを再度送信して削除してください。\n\n**認証：**`x-api-key`ヘッダーにAPIキーを指定します。ジョブはそれを作成したアプリケーションからのみ参照でき、それ以外の`job_id`は`404`を返します。認証情報がない、または無効な場合は`403`を返します。このAPIが`401`を返すことはありません。",
        "operationId": "get_session_deletion_job",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "retrieve_deletion_job",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "`POST /v3/sessions/delete/`の`202`とともに返された`job_id`です。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl 'https://verification.didit.me/v3/sessions/delete/JOB_ID/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.retrieve_deletion_job(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.retrieveDeletionJob(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RetrieveDeletionJob(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().retrieveDeletionJob(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->retrieveDeletionJob('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.retrieve_deletion_job(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.RetrieveDeletionJobAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionDeletionJob"
                },
                "examples": {
                  "Processing": {
                    "value": {
                      "job_id": "5b8f2c1e-7d3a-4f6b-9e2c-1a0d8f7e6c5b",
                      "status": "PROCESSING",
                      "total": 250,
                      "processed": 100,
                      "outcomes": {
                        "deleted": 82,
                        "none": 18,
                        "retained_with_user": 0,
                        "ineligible_no_vendor_user": 0,
                        "failed_retryable": 0,
                        "already_deleted": 0
                      },
                      "deleted_child_verifications": 0,
                      "error": null,
                      "created_at": "2026-10-09T10:15:00Z",
                      "completed_at": null
                    }
                  },
                  "Completed": {
                    "value": {
                      "job_id": "5b8f2c1e-7d3a-4f6b-9e2c-1a0d8f7e6c5b",
                      "status": "COMPLETED",
                      "total": 250,
                      "processed": 250,
                      "outcomes": {
                        "deleted": 204,
                        "none": 44,
                        "retained_with_user": 0,
                        "ineligible_no_vendor_user": 0,
                        "failed_retryable": 0,
                        "already_deleted": 2
                      },
                      "deleted_child_verifications": 0,
                      "error": null,
                      "created_at": "2026-10-09T10:15:00Z",
                      "completed_at": "2026-10-09T10:16:40Z"
                    }
                  },
                  "Failed": {
                    "value": {
                      "job_id": "5b8f2c1e-7d3a-4f6b-9e2c-1a0d8f7e6c5b",
                      "status": "FAILED",
                      "total": 250,
                      "processed": 100,
                      "outcomes": {
                        "deleted": 82,
                        "none": 18,
                        "retained_with_user": 0,
                        "ineligible_no_vendor_user": 0,
                        "failed_retryable": 0,
                        "already_deleted": 0
                      },
                      "deleted_child_verifications": 0,
                      "error": "The deletion stopped before it finished. The sessions it had not reached are still in place; repeat the request to delete them.",
                      "created_at": "2026-10-09T10:15:00Z",
                      "completed_at": "2026-10-09T10:15:52Z"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "x-api-keyヘッダーがないか、キーが無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "呼び出し元のアプリケーションに、この`job_id`の削除ジョブは存在しません。ジョブは作成したアプリケーションからのみ参照できます。"
          }
        }
      }
    },
    "/v3/sessions/{session_id}/reviews/": {
      "get": {
        "summary": "セッションのレビューとアクティビティログを一覧表示",
        "description": "ユーザー認証 (KYC)セッションの監査ログ(アクティビティフィード)を新しい順に、ページネーションされたエンベロープ(`count` / `next` / `previous` / `results`、デフォルトでは1ページあたり50件)で返します。\n\nフィードのエントリーは、セッションに関与するすべてのアクターによって書き込まれます。具体的には、`PATCH /v3/session/{session_id}/update-status/`による手動判定(`previous_status` → `new_status`を記録)、Consoleでのレビュアーのアクティビティ(`@email`メンションを含むコメント、KYC/POAデータの編集、ファイルのアップロード・削除、タグの変更、詳細ページの閲覧)、AMLの継続的なモニタリングによる一致、そしてこの同じパスへの`POST`で追加されたメモです。このフィードの読み取りは、Didit Consoleのセッション画面にある**Activity**パネルに相当するAPI側の手段です。\n\nここで指定できるのはユーザー認証 (KYC)セッションのみです。法人確認 (KYB)のセッションIDを指定すると`404`が返されます。",
        "operationId": "list_session_reviews",
        "x-didit-sdk": {
          "resource": "sessions.reviews",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "description": "ユーザー認証 (KYC) セッションのUUIDです。APIキーと同じアプリケーションに属している必要があります。別のアプリケーションのUUID、削除済みのセッション、法人確認 (KYB) セッションのIDはいずれも`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "ページサイズ。デフォルトは`50`です。",
            "schema": {
              "type": "integer",
              "default": 50,
              "example": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "（並び順に沿った）フィードの先頭からスキップするエントリー数。デフォルトは`0`です。レスポンスの`next` / `previous`のURLには、フィードをたどるための適切な値が含まれます。",
            "schema": {
              "type": "integer",
              "default": 0,
              "example": 0
            }
          },
          {
            "name": "ordering",
            "in": "query",
            "required": false,
            "description": "並び順。フィードのデフォルトは新しい順(`-created_at`)です。古い順に読むには`created_at`を指定します。不明な値は通知なく無視されます(デフォルトの順序が使用されます)。その他のシリアライザーのフィールド名も指定できます。",
            "schema": {
              "type": "string",
              "default": "-created_at",
              "example": "created_at"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされたアクティビティフィード（デフォルトは新しい順）。`count`はエントリーの総数です。`next` / `previous`はそのまま使えるページURLです（端では`null`）。`count`が`0`で`results`が空の場合は、まだアクティビティが記録されていないことを意味します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "このセッションのフィードエントリーの総数（全ページの合計）。",
                      "example": 3
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページのURL。最後のページでは`null`です。",
                      "example": null
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページのURL。最初のページでは`null`です。",
                      "example": null
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ReviewItem"
                      },
                      "description": "このページのフィードエントリーです。"
                    }
                  }
                },
                "examples": {
                  "DecisionTrail": {
                    "summary": "手動承認とAPIで追加されたメモ",
                    "value": {
                      "count": 3,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "de0561bc-5583-4409-9171-1a31a4c8a5f4",
                          "activity_type": "STATUS_UPDATED",
                          "actor_display": "API Client",
                          "actor_email": null,
                          "actor_type": "API_KEY",
                          "new_status": "Approved",
                          "previous_status": "In Review",
                          "comment": "Document re-checked manually; address matches.",
                          "mentioned_emails": [],
                          "previous_value": {
                            "status": "In Review"
                          },
                          "new_value": {
                            "status": "Approved"
                          },
                          "changed_fields": [
                            "status"
                          ],
                          "metadata": null,
                          "created_at": "2026-06-12T00:19:31.918735Z"
                        },
                        {
                          "uuid": "35370f58-5098-44ee-8a06-8c9af80b2455",
                          "activity_type": "STATUS_UPDATED",
                          "actor_display": "Unknown",
                          "actor_email": null,
                          "actor_type": "CONSOLE_USER",
                          "new_status": null,
                          "previous_status": null,
                          "comment": "Note without status.",
                          "mentioned_emails": [],
                          "previous_value": null,
                          "new_value": null,
                          "changed_fields": [],
                          "metadata": null,
                          "created_at": "2026-06-12T00:18:44.504157Z"
                        },
                        {
                          "uuid": "00338f82-f1c5-4f57-8614-c49bb258af1a",
                          "activity_type": "STATUS_UPDATED",
                          "actor_display": "Unknown",
                          "actor_email": null,
                          "actor_type": "CONSOLE_USER",
                          "new_status": "In Review",
                          "previous_status": null,
                          "comment": "Flagging for manual document re-check.",
                          "mentioned_emails": [],
                          "previous_value": null,
                          "new_value": null,
                          "changed_fields": [],
                          "metadata": null,
                          "created_at": "2026-06-12T00:18:44.466537Z"
                        }
                      ]
                    }
                  },
                  "PaginatedFirstPage": {
                    "summary": "limit=2の最初のページ。nextに次のページのURLが入ります",
                    "value": {
                      "count": 4,
                      "next": "https://verification.didit.me/v3/sessions/8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d/reviews/?limit=2&offset=2",
                      "previous": null,
                      "results": [
                        {
                          "uuid": "de0561bc-5583-4409-9171-1a31a4c8a5f4",
                          "activity_type": "STATUS_UPDATED",
                          "actor_display": "API Client",
                          "actor_email": null,
                          "actor_type": "API_KEY",
                          "new_status": "Approved",
                          "previous_status": "In Review",
                          "comment": "Document re-checked manually; address matches.",
                          "mentioned_emails": [],
                          "previous_value": {
                            "status": "In Review"
                          },
                          "new_value": {
                            "status": "Approved"
                          },
                          "changed_fields": [
                            "status"
                          ],
                          "metadata": null,
                          "created_at": "2026-06-12T00:19:31.918735Z"
                        },
                        {
                          "uuid": "bd4e6227-bdd2-42b2-a726-1d12f785a457",
                          "activity_type": "STATUS_UPDATED",
                          "actor_display": "Unknown",
                          "actor_email": null,
                          "actor_type": "CONSOLE_USER",
                          "new_status": null,
                          "previous_status": null,
                          "comment": null,
                          "mentioned_emails": [],
                          "previous_value": null,
                          "new_value": null,
                          "changed_fields": [],
                          "metadata": null,
                          "created_at": "2026-06-12T00:18:44.540238Z"
                        }
                      ]
                    }
                  },
                  "Empty": {
                    "summary": "まだアクティビティが記録されていないセッション",
                    "value": {
                      "count": 0,
                      "next": null,
                      "previous": null,
                      "results": []
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない、形式が不正、期限切れ、または失効しています。認証はセッションの検索より前に確認されるため、セッションUUIDが存在しない場合でも、キーがなければ`403`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "You do not have permission to perform this action."
                    }
                  }
                },
                "examples": {
                  "InvalidKey": {
                    "summary": "x-api-keyヘッダーがないか無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDを持つユーザー認証(KYC)セッションは、お使いのアプリケーションからは参照できません。UUIDが存在しない、セッションが削除された、または別のアプリケーションに属している、のいずれかです。法人確認(KYB)のセッションIDもここでは`404`を返します。レビューフィードはKYCセッションに対してのみ指定できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "Session not found."
                    }
                  }
                },
                "examples": {
                  "NotFound": {
                    "summary": "不明、削除済み、または別のアプリケーションのセッションUUID",
                    "value": {
                      "detail": "Session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。詳しくは[レート制限](/ja/integration/rate-limiting)を参照してください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -s 'https://verification.didit.me/v3/sessions/8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d/reviews/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.sessions.reviews.list(\n    \"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.sessions.reviews.list(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.Reviews.ListAutoPaging(ctx, \"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\", didit.SessionsReviewsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.sessions().reviews().list(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->sessions->reviews->list('8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.reviews.list(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Sessions.Reviews.ListAsync(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "summary": "セッションの監査証跡にレビューメモを追加",
        "description": "ユーザー認証（KYC）セッションのレビュー／アクティビティフィードにメモを追加します。**このエンドポイントはエントリを記録するだけで、セッションを変更することはありません**。セッションの`status`はそのまま維持され、ステータス遷移の検証は行われず、Webhookも送信されません。実際にセッションを承認、却下、または再オープンする場合（このフィードに実行者情報が完全に付与された`STATUS_UPDATED`エントリも書き込まれます）は、代わりに`PATCH /v3/session/{session_id}/update-status/`を使用してください。\n\nボディの両フィールドは任意で、空のJSONオブジェクトも受け付けます。`new_status`はエントリのラベルとしてのみ保存され、10種類のセッションステータス値のいずれか（大文字と小文字を区別）を受け付けます。`comment`内の`@email`メンションはプレーンテキストとしてのみ保存されます。このエンドポイントでは通知はトリガーされず、エントリの`mentioned_emails`は空のままです。\n\n実行者情報に関する注意：ここで作成されたエントリには実行者情報が含まれません。フィードでは`actor_display: \"Unknown\"`、`actor_type: \"CONSOLE_USER\"`、`activity_type: \"STATUS_UPDATED\"`（保存時のデフォルト値）と表示され、`201`のボディの`user`フィールドは`\"Unknown\"`になります。",
        "operationId": "create_session_review",
        "x-didit-sdk": {
          "resource": "sessions.reviews",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": false,
            "description": "JSONボディを送信する場合は`application/json`に設定します。",
            "schema": {
              "type": "string",
              "example": "application/json"
            }
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "description": "ユーザー認証 (KYC) セッションのUUIDです。APIキーと同じアプリケーションに属している必要があります。別のアプリケーションのUUID、削除済みのセッション、法人確認 (KYB) セッションのIDはいずれも`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_status": {
                    "type": "string",
                    "nullable": true,
                    "enum": [
                      "Not Started",
                      "In Progress",
                      "Approved",
                      "Declined",
                      "In Review",
                      "Expired",
                      "Abandoned",
                      "Kyc Expired",
                      "Resubmitted",
                      "Awaiting User"
                    ],
                    "description": "エントリーに記録する任意のステータスラベルです。セッションのステータス値であればどれでも受け付けますが、大文字と小文字は区別されます（`\"approved\"`は`400`で拒否されます）。ここでステータスを記録しても、セッションの実際のステータスは**変更されません**。変更するにはupdate-statusエンドポイントを使用してください。",
                    "example": "In Review"
                  },
                  "comment": {
                    "type": "string",
                    "nullable": true,
                    "description": "任意の自由記述のメモです（文字数制限は適用されません）。入力内容はそのまま保存されます。このエンドポイントでは`@email`のメンションは処理されません。",
                    "example": "Flagging for manual document re-check."
                  }
                }
              },
              "examples": {
                "NoteWithStatusLabel": {
                  "summary": "ステータスラベル付きのメモ（セッションのステータスは変更されません）",
                  "value": {
                    "new_status": "In Review",
                    "comment": "Flagging for manual document re-check."
                  }
                },
                "CommentOnly": {
                  "summary": "ステータスラベルのないプレーンなメモ",
                  "value": {
                    "comment": "Customer emailed an updated utility bill; awaiting upload."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "セッションの監査証跡に記録されたエントリ。セッション自体は変更されません。`status`は以前の値のままで、Webhookは送信されません。新しいエントリは`GET …/reviews/`の先頭にも表示されます（`actor_display: \"Unknown\"`付き）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "user": {
                      "type": "string",
                      "description": "エントリー作成者の表示名です。このエンドポイントは操作者を記録しないため、このエンドポイントで作成されたエントリーでは常に`\"Unknown\"`となります。",
                      "example": "Unknown"
                    },
                    "new_status": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "Not Started",
                        "In Progress",
                        "Approved",
                        "Declined",
                        "In Review",
                        "Expired",
                        "Abandoned",
                        "Kyc Expired",
                        "Resubmitted",
                        "Awaiting User"
                      ],
                      "description": "エントリに記録されたステータスラベル。送信されなかった場合は`null`です。セッションの実際のステータスには影響しません。",
                      "example": "In Review"
                    },
                    "comment": {
                      "type": "string",
                      "nullable": true,
                      "description": "エントリーに記録されたメモ。送信されなかった場合は`null`です。",
                      "example": "Flagging for manual document re-check."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "エントリーが書き込まれた日時（ISO 8601、UTC）。",
                      "example": "2026-06-12T00:18:44.466537Z"
                    }
                  }
                },
                "examples": {
                  "NoteWithStatusLabel": {
                    "summary": "ステータスラベル付きのメモ",
                    "value": {
                      "user": "Unknown",
                      "new_status": "In Review",
                      "comment": "Flagging for manual document re-check.",
                      "created_at": "2026-06-12T00:18:44.466537Z"
                    }
                  },
                  "CommentOnly": {
                    "summary": "プレーンなメモ",
                    "value": {
                      "user": "Unknown",
                      "new_status": null,
                      "comment": "Note without status.",
                      "created_at": "2026-06-12T00:18:44.504157Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドごとのメッセージのマップとして返されます。よくある原因は、`new_status`の値が許可された10種類のステータスのいずれでもないことです。このチェックでは大文字と小文字が区別されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "new_status": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "\"approved\" is not a valid choice."
                      ]
                    }
                  }
                },
                "examples": {
                  "InvalidStatusChoice": {
                    "summary": "小文字または不明なステータス値",
                    "value": {
                      "new_status": [
                        "\"approved\" is not a valid choice."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない、形式が不正、期限切れ、または失効しています。認証はセッションの検索より前に確認されるため、セッションUUIDが存在しない場合でも、キーがなければ`403`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "You do not have permission to perform this action."
                    }
                  }
                },
                "examples": {
                  "InvalidKey": {
                    "summary": "x-api-keyヘッダーがないか無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDを持つユーザー認証(KYC)セッションは、お使いのアプリケーションからは参照できません。UUIDが存在しない、セッションが削除された、または別のアプリケーションに属している、のいずれかです。法人確認(KYB)のセッションIDもここでは`404`を返します。レビューフィードはKYCセッションに対してのみ指定できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "example": "Session not found."
                    }
                  }
                },
                "examples": {
                  "NotFound": {
                    "summary": "不明、削除済み、または別のアプリケーションのセッションUUID",
                    "value": {
                      "detail": "Session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。詳しくは[レート制限](/ja/integration/rate-limiting)を参照してください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "# Records an audit-trail note only -- the session's status does NOT change.\ncurl -s -X POST https://verification.didit.me/v3/sessions/8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d/reviews/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"new_status\": \"In Review\",\n    \"comment\": \"Flagging for manual document re-check.\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.reviews.create(\n    \"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\",\n    new_status=\"In Review\",\n    comment=\"Flagging for manual document re-check.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.reviews.create(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\", {\n  new_status: \"In Review\",\n  comment: \"Flagging for manual document re-check.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Reviews.Create(ctx, \"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\", didit.SessionsReviewsCreateParams{\n\tNewStatus: didit.Some(didit.SessionsReviewsCreateParamsNewStatus(\"In Review\")),\n\tComment:   didit.String(\"Flagging for manual document re-check.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsReviewsCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().reviews().create(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\", SessionsReviewsCreateParams.builder()\n        .newStatus(SessionsReviewsCreateParams.NewStatus.of(\"In Review\"))\n        .comment(\"Flagging for manual document re-check.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->reviews->create('8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d', [\n    'new_status' => 'In Review',\n    'comment' => 'Flagging for manual document re-check.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.reviews.create(\n  \"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\",\n  new_status: \"In Review\",\n  comment: \"Flagging for manual document re-check.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Reviews.CreateAsync(\"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\", new SessionsReviewsCreateParams\n{\n    NewStatus = new SessionsReviewsCreateParamsNewStatus(\"In Review\"),\n    Comment = \"Flagging for manual document re-check.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/billing/balance/": {
      "get": {
        "summary": "クレジット残高を取得",
        "description": "USD建ての現在の前払いクレジット残高（組織全体）と自動チャージの設定を取得します。金額は10進数の文字列のため、decimalライブラリで解析してください。",
        "operationId": "get_billing_balance",
        "x-didit-sdk": {
          "resource": "billing",
          "method": "retrieve_balance",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Billing"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/billing/balance/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.billing.retrieve_balance()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.billing.retrieveBalance();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Billing.RetrieveBalance(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.billing().retrieveBalance();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->billing->retrieveBalance();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.billing.retrieve_balance\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Billing.RetrieveBalanceAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "現在のクレジット残高と、組織の自動チャージ設定。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "balance",
                    "auto_refill_enabled"
                  ],
                  "properties": {
                    "balance": {
                      "type": "string",
                      "description": "現在のプリペイドクレジット残高（USD、固定小数点の10進数文字列）。認証が請求されるにつれて減少し、チャージが確定すると増加します。"
                    },
                    "auto_refill_enabled": {
                      "type": "boolean",
                      "description": "`true`の場合、残高が`auto_refill_threshold`を下回ると、Diditは保存済みの支払い方法に自動で請求してクレジットを追加します。Console → 請求から設定します。"
                    },
                    "auto_refill_amount": {
                      "type": "string",
                      "nullable": true,
                      "description": "自動チャージのたびに請求され、額面どおり残高に追加されるUSD金額。Console → Billingで\\$50から\\$10,000の範囲で設定します。自動チャージが無効または未設定の場合は`null`です。"
                    },
                    "auto_refill_threshold": {
                      "type": "string",
                      "nullable": true,
                      "description": "トリガーとなるしきい値（USD）。`balance`がこの値を下回ると自動チャージが実行されます。自動チャージが無効または未設定の場合は`null`です。"
                    }
                  }
                },
                "examples": {
                  "Healthy balance with auto-refill": {
                    "value": {
                      "balance": "1234.5600",
                      "auto_refill_enabled": true,
                      "auto_refill_amount": "500.00",
                      "auto_refill_threshold": "100.00"
                    }
                  },
                  "Low balance, manual top-up only": {
                    "value": {
                      "balance": "12.0000",
                      "auto_refill_enabled": false,
                      "auto_refill_amount": null,
                      "auto_refill_threshold": null
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、この組織の請求データを読み取る権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/billing/top-up/": {
      "post": {
        "summary": "クレジットをチャージ",
        "description": "ホスト型のStripe Checkoutセッションでクレジットを追加します（1回のチャージあたり**\\$50〜\\$10,000**）。チャージはFree、Growth、Scaleプランで利用でき、割引やボーナスなしで額面どおりに追加され、有効期間は12か月です。Enterpriseの年間契約ではチャージできません。返された`checkout_session_url`に顧客をリダイレクトしてください。",
        "operationId": "billing_top_up",
        "x-didit-sdk": {
          "resource": "billing",
          "method": "top_up",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount_in_dollars"
                ],
                "properties": {
                  "amount_in_dollars": {
                    "type": "number",
                    "minimum": 50,
                    "maximum": 10000,
                    "description": "請求する金額（USD）。**50から10,000の範囲である必要があります**。残高には同額が加算され、割引やボーナスはありません。税金は、顧客の請求先住所に基づいてチェックアウト時に自動的に加算されます。"
                  },
                  "success_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "決済成功後にホスト型チェックアウトが顧客をリダイレクトするURL。現在のデフォルトは`https://console.didit.me`です。デフォルトのホストは利用できないため、動作するURLを明示的に指定してください。ホスト型チェックアウトでセッションIDを置換させたい場合は、リテラルのプレースホルダー`{CHECKOUT_SESSION_ID}`を末尾に追加してください。"
                  },
                  "cancel_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "顧客がCheckoutウィンドウを中断または閉じたときに、ホスト型チェックアウトが顧客をリダイレクトするURL。現在のデフォルトは`https://console.didit.me`です。デフォルトのホストは利用できないため、動作するURLを明示的に指定してください。"
                  }
                }
              },
              "examples": {
                "Minimum top-up": {
                  "value": {
                    "amount_in_dollars": 50
                  }
                },
                "Custom amount with redirects": {
                  "value": {
                    "amount_in_dollars": 500,
                    "success_url": "https://yourapp.com/billing/top-up/success",
                    "cancel_url": "https://yourapp.com/billing/top-up/cancel"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/billing/top-up/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"amount_in_dollars\": 500,\n    \"success_url\": \"https://yourapp.com/billing/success\",\n    \"cancel_url\": \"https://yourapp.com/billing/cancel\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.billing.top_up(\n    amount_in_dollars=50.0,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.billing.topUp({\n  amount_in_dollars: 50.0,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Billing.TopUp(ctx, didit.BillingTopUpParams{\n\tAmountInDollars: 50.0,\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BillingTopUpParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.billing().topUp(BillingTopUpParams.builder()\n        .amountInDollars(50.0)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->billing->topUp([\n    'amount_in_dollars' => 50.0,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.billing.top_up(amount_in_dollars: 50.0)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Billing.TopUpAsync(new BillingTopUpParams\n{\n    AmountInDollars = 50.0,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ホスト型チェックアウトセッションが作成されました。支払いを完了するには、ユーザーを`checkout_session_url`にリダイレクトしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "checkout_session_id",
                    "checkout_session_url"
                  ],
                  "properties": {
                    "checkout_session_id": {
                      "type": "string",
                      "description": "ホスト型チェックアウトセッションの識別子です(例: `cs_test_a1B2c3...`)。サーバー側での照合に役立ちます。"
                    },
                    "checkout_session_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "1回限り使用できるホスト型決済ページのURL。顧客をここにリダイレクトして支払いを完了させてください。"
                    }
                  }
                },
                "examples": {
                  "Created": {
                    "value": {
                      "checkout_session_id": "cs_test_a1B2c3D4e5F6g7H8i9J0",
                      "checkout_session_url": "https://checkout.example.com/c/pay/cs_test_a1B2c3D4e5F6g7H8i9J0"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ペイロードが無効です。金額が欠落している、数値ではない、最低額\\$50未満である、最高額\\$10,000を超えている、または組織がEnterpriseの年間契約を結んでいることが原因です。エラーボディはJSON配列です。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing amount": {
                    "value": [
                      "amount_in_dollars is required."
                    ]
                  },
                  "Not a number": {
                    "value": [
                      "amount_in_dollars must be a number."
                    ]
                  },
                  "Below minimum": {
                    "value": [
                      "Amount must be at least $50."
                    ]
                  },
                  "Above maximum": {
                    "value": [
                      "Amount must be at most $10,000."
                    ]
                  },
                  "Annual plan": {
                    "value": [
                      "You have an annual plan. Contact your account manager to top up."
                    ]
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、そのキーではこの組織のチャージセッションを作成できません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/destinations/": {
      "get": {
        "summary": "Webhookの送信先を一覧表示",
        "description": "すべてのWebhookの送信先を一覧表示します(ページネーションなしの配列で、古い順)。各項目には、送信先の設定、過去30日間(`metrics_window_days`)の配信メトリクスと1日につき1件の`daily_points`エントリ、およびヘルス状態(`health_status`、`failing_streak`、`failing_since`、`last_success_at`)が含まれます。この一覧には`summary`オブジェクトがなく、署名シークレットも含まれません。各項目には`secret_last4`のみが表示されます。`secret_shared_key`を読み取るには、単一の送信先を取得してください(`GET /v3/webhook/destinations/{destination_uuid}/`)。",
        "operationId": "list_webhook_destinations",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/webhook/destinations/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.list()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.list();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.List(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().list();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->list();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.webhooks.destinations.list.each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.ListAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "Webhookの送信先のリスト（ページネーションなし、古い順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid",
                        "description": "不変の送信先識別子。更新・削除の際に`{destination_uuid}`として使用します。"
                      },
                      "label": {
                        "type": "string",
                        "description": "Consoleに表示される、人が読める名前。"
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Webhookペイロードを含む`POST`リクエストを受信する送信先URL。"
                      },
                      "enabled": {
                        "type": "boolean",
                        "description": "`false`の場合、Diditはこの送信先への配信を通知なしでスキップします。"
                      },
                      "webhook_version": {
                        "type": "string",
                        "enum": [
                          "v1",
                          "v2",
                          "v3"
                        ],
                        "description": "この送信先に送信されるペイロードのスキーマバージョン。`v3`が現在の推奨形式です。"
                      },
                      "subscribed_events": {
                        "$ref": "#/components/schemas/WebhookSubscribedEvents"
                      },
                      "subscribed_events_count": {
                        "type": "integer",
                        "description": "`subscribed_events`の長さをキャッシュした値。UIの表示に便利です。"
                      },
                      "deliveries_count": {
                        "type": "integer",
                        "description": "過去30日間にこの送信先に対して行われた配信試行(再試行を含む)の回数。"
                      },
                      "failed_deliveries_count": {
                        "type": "integer",
                        "description": "過去30日間の配信試行のうち、送信先がHTTP 400以上で応答したもの、または応答しなかったもの(タイムアウト、接続拒否、ブロックされたアドレス)の回数。"
                      },
                      "average_response_time_ms": {
                        "type": "integer",
                        "nullable": true,
                        "description": "過去30日間の平均応答時間（ミリ秒、整数に丸めた値）。この期間に配信がなかった場合は`null`。"
                      },
                      "error_rate_percentage": {
                        "type": "integer",
                        "description": "過去30日間の`round(failed_deliveries_count / deliveries_count * 100)`です。配信がない場合は`0`です。"
                      },
                      "last_delivery_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "直近の配信試行(成功または失敗)の日時。一度も配信されていない場合は`null`です。"
                      },
                      "metrics_window_days": {
                        "type": "integer",
                        "description": "`deliveries_count`、`failed_deliveries_count`、`average_response_time_ms`、`error_rate_percentage`、`daily_points`が対象とする期間の長さ（日数）。常に`30`です。"
                      },
                      "health_status": {
                        "type": "string",
                        "enum": [
                          "healthy",
                          "degraded",
                          "failing"
                        ],
                        "description": "配信の健全性。`failing`: 送信先が最後に正常に応答して以降、3件以上の連続したイベントで最初の配信試行が失敗した状態です（`failing_streak`を参照）。`degraded`: failingではないものの、過去24時間以内に配信試行が失敗し、そのイベントがその後の試行でまだ配信されていない状態です。再試行または再送信で配信されると、この状態は解消されます。`healthy`: どちらにも該当しない状態です。`enabled`とは独立しています。失敗した試行とは、HTTP 400以上で応答された試行、またはまったく応答がなかった試行です。"
                      },
                      "failing_streak": {
                        "type": "integer",
                        "description": "過去30日以内に、送信先が最後に成功応答して以降、最初の配信試行に連続して失敗したイベントの数です。再試行はカウントされず、再試行や再送を含め、いずれかの試行が成功すると連続記録は途切れます。最後の成功以降に失敗したイベントがない場合は`0`です。"
                      },
                      "failing_since": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "現在の`failing_streak`における最初の失敗した試行が行われた日時。`failing_streak`が`0`の場合は`null`。"
                      },
                      "last_success_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "過去30日以内に、送信先が配信に対して400未満のHTTPステータスで最後に応答した日時。その期間内に該当する応答がない場合は`null`。"
                      },
                      "environment": {
                        "type": "string",
                        "enum": [
                          "live",
                          "sandbox"
                        ],
                        "description": "送信先を所有するアプリケーションの環境。"
                      },
                      "daily_points": {
                        "type": "array",
                        "description": "過去30日間のUTC日ごとに1エントリーで、古い順に並び、配信のない日も含みます。再試行を含むすべての試行をカウントします。",
                        "items": {
                          "type": "object",
                          "properties": {
                            "date": {
                              "type": "string",
                              "format": "date",
                              "description": "UTCの日付です。"
                            },
                            "total_deliveries": {
                              "type": "integer",
                              "description": "その日に行われた配信試行。"
                            },
                            "failed_deliveries": {
                              "type": "integer",
                              "description": "その日に行われた試行のうち、HTTP 400以上で応答された試行、またはまったく応答がなかった試行。"
                            }
                          }
                        }
                      },
                      "secret_last4": {
                        "type": "string",
                        "description": "送信先の現在の署名シークレットの末尾4文字。シークレットを区別するために使用します。署名の検証にはこれだけでは不十分です。"
                      },
                      "created_by_email": {
                        "type": "string",
                        "nullable": true,
                        "description": "送信先を作成したBusiness Consoleメンバーのメールアドレス。APIキーで作成された送信先の場合は`null`。"
                      },
                      "created_by_name": {
                        "type": "string",
                        "nullable": true,
                        "description": "送信先を作成したBusiness Consoleメンバーの名前。APIキーで作成された送信先の場合は`null`です。"
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "updated_at": {
                        "type": "string",
                        "format": "date-time"
                      }
                    }
                  }
                },
                "examples": {
                  "Two destinations": {
                    "value": [
                      {
                        "uuid": "11111111-2222-3333-4444-555555555555",
                        "label": "Production session webhooks",
                        "url": "https://yourapp.com/webhooks/didit",
                        "enabled": true,
                        "webhook_version": "v3",
                        "subscribed_events": [
                          "status.updated",
                          "data.updated"
                        ],
                        "subscribed_events_count": 2,
                        "deliveries_count": 12453,
                        "failed_deliveries_count": 14,
                        "average_response_time_ms": 187,
                        "error_rate_percentage": 0,
                        "last_delivery_at": "2026-05-17T09:21:18Z",
                        "metrics_window_days": 30,
                        "health_status": "healthy",
                        "failing_streak": 0,
                        "failing_since": null,
                        "last_success_at": "2026-05-17T09:21:18Z",
                        "environment": "live",
                        "daily_points": [
                          {
                            "date": "2026-04-18",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-19",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-20",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-21",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-22",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-23",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-24",
                            "total_deliveries": 415,
                            "failed_deliveries": 9
                          },
                          {
                            "date": "2026-04-25",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-26",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-27",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-28",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-29",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-30",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-01",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-02",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-03",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-04",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-05",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-06",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-07",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-08",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-09",
                            "total_deliveries": 415,
                            "failed_deliveries": 5
                          },
                          {
                            "date": "2026-05-10",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-11",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-12",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-13",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-14",
                            "total_deliveries": 415,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-15",
                            "total_deliveries": 416,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-16",
                            "total_deliveries": 416,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-17",
                            "total_deliveries": 416,
                            "failed_deliveries": 0
                          }
                        ],
                        "secret_last4": "0xnQ",
                        "created_by_email": null,
                        "created_by_name": null,
                        "created_at": "2026-01-04T08:00:00Z",
                        "updated_at": "2026-04-22T14:09:11Z"
                      },
                      {
                        "uuid": "22222222-3333-4444-5555-666666666666",
                        "label": "Staging mirror",
                        "url": "https://staging.yourapp.com/webhooks/didit",
                        "enabled": false,
                        "webhook_version": "v3",
                        "subscribed_events": [
                          "status.updated"
                        ],
                        "subscribed_events_count": 1,
                        "deliveries_count": 0,
                        "failed_deliveries_count": 0,
                        "average_response_time_ms": null,
                        "error_rate_percentage": 0,
                        "last_delivery_at": null,
                        "metrics_window_days": 30,
                        "health_status": "healthy",
                        "failing_streak": 0,
                        "failing_since": null,
                        "last_success_at": null,
                        "environment": "live",
                        "daily_points": [
                          {
                            "date": "2026-04-18",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-19",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-20",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-21",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-22",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-23",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-24",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-25",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-26",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-27",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-28",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-29",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-04-30",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-01",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-02",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-03",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-04",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-05",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-06",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-07",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-08",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-09",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-10",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-11",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-12",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-13",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-14",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-15",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-16",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          },
                          {
                            "date": "2026-05-17",
                            "total_deliveries": 0,
                            "failed_deliveries": 0
                          }
                        ],
                        "secret_last4": "k9Qe",
                        "created_by_email": "reviewer@example.com",
                        "created_by_name": "Example Reviewer",
                        "created_at": "2026-03-12T10:15:02Z",
                        "updated_at": "2026-03-12T10:15:02Z"
                      }
                    ]
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空けてから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "Webhookの送信先を作成",
        "description": "Webhookの送信先を作成します。レスポンスには自動生成されたHMAC署名用シークレット`secret_shared_key`が含まれます（後から`GET /v3/webhook/destinations/{destination_uuid}/`でも取得できます）。`subscribed_events`には必ず1つ以上のイベントを指定して送信してください（ワイルドカードは使用できません）。明示的な空のリストは400で拒否され、フィールドを省略すると何も購読しない送信先が作成され、その送信先はWebhookを一切受信しません。`(application, url)`の組み合わせは、アプリケーションの送信先間で一意である必要があります。",
        "operationId": "create_webhook_destination",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/webhook/destinations/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"label\": \"Production session webhooks\",\n    \"url\": \"https://yourapp.com/webhooks/didit\",\n    \"webhook_version\": \"v3\",\n    \"subscribed_events\": [\"status.updated\", \"data.updated\"]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.create(\n    label=\"Production session webhooks\",\n    url=\"https://yourapp.com/webhooks/didit\",\n    webhook_version=\"v3\",\n    subscribed_events=[\"status.updated\", \"data.updated\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.create({\n  label: \"Production session webhooks\",\n  url: \"https://yourapp.com/webhooks/didit\",\n  webhook_version: \"v3\",\n  subscribed_events: [\"status.updated\", \"data.updated\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.Create(ctx, didit.WebhooksDestinationsCreateParams{\n\tLabel:            \"Production session webhooks\",\n\tURL:              \"https://yourapp.com/webhooks/didit\",\n\tWebhookVersion:   didit.Some(didit.WebhooksDestinationsCreateParamsWebhookVersion(\"v3\")),\n\tSubscribedEvents: didit.Some([]didit.WebhookEvent{didit.WebhookEvent(\"status.updated\"), didit.WebhookEvent(\"data.updated\")}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.WebhookEvent;\nimport me.didit.types.WebhooksDestinationsCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().create(WebhooksDestinationsCreateParams.builder()\n        .label(\"Production session webhooks\")\n        .url(\"https://yourapp.com/webhooks/didit\")\n        .webhookVersion(WebhooksDestinationsCreateParams.WebhookVersion.of(\"v3\"))\n        .subscribedEvents(List.of(WebhookEvent.of(\"status.updated\"), WebhookEvent.of(\"data.updated\")))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->create([\n    'label' => 'Production session webhooks',\n    'url' => 'https://yourapp.com/webhooks/didit',\n    'webhook_version' => 'v3',\n    'subscribed_events' => ['status.updated', 'data.updated'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.destinations.create(\n  label: \"Production session webhooks\",\n  url: \"https://yourapp.com/webhooks/didit\",\n  webhook_version: \"v3\",\n  subscribed_events: [\"status.updated\", \"data.updated\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.CreateAsync(new WebhooksDestinationsCreateParams\n{\n    Label = \"Production session webhooks\",\n    Url = \"https://yourapp.com/webhooks/didit\",\n    WebhookVersion = new WebhooksDestinationsCreateParamsWebhookVersion(\"v3\"),\n    SubscribedEvents = new WebhookEvent[] { \"status.updated\", \"data.updated\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "label",
                  "url"
                ],
                "properties": {
                  "label": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "Console → Webhooksに表示される、人が読める名前。複数の送信先がある場合に区別しやすくなります（例：\"Prod\"、\"Staging mirror\"）。"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "`POST`リクエストを受信するHTTPS URL。アプリケーションの送信先の中で一意である必要があります。安定した堅牢なエンドポイントを使用してください。Diditは失敗した配信をバックオフスケジュールに従って再試行します。",
                    "maxLength": 2000
                  },
                  "enabled": {
                    "type": "boolean",
                    "default": true,
                    "description": "`false`の場合、送信先は保存されますが、DiditはこのWebhookの送信先にWebhookを一切送信しません。保留しておきたいステージング用の設定に便利です。"
                  },
                  "webhook_version": {
                    "type": "string",
                    "enum": [
                      "v1",
                      "v2",
                      "v3"
                    ],
                    "description": "Diditが送信するペイロードのスキーマバージョン。`v3`が現在の推奨形式です。旧バージョンは従来の連携との後方互換性のために維持されています。"
                  },
                  "subscribed_events": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/WebhookSubscribedEvents"
                      }
                    ],
                    "description": "配信するイベントです。実質的に必須です。明示的な`[]`は400で拒否され、フィールドを省略すると、サブスクリプションがなく何も受信しない送信先が作成されます。"
                  }
                }
              },
              "examples": {
                "session_updates": {
                  "summary": "セッションのステータスとデータの更新",
                  "value": {
                    "label": "Production session webhooks",
                    "url": "https://yourapp.com/webhooks/didit",
                    "webhook_version": "v3",
                    "subscribed_events": [
                      "status.updated",
                      "data.updated"
                    ]
                  }
                },
                "transaction_updates": {
                  "summary": "トランザクションモニタリングの更新",
                  "value": {
                    "label": "Transaction monitoring webhooks",
                    "url": "https://yourapp.com/webhooks/didit-transactions",
                    "webhook_version": "v3",
                    "subscribed_events": [
                      "transaction.created",
                      "transaction.status.updated"
                    ]
                  }
                },
                "entity_updates": {
                  "summary": "ユーザーおよび企業エンティティの更新",
                  "value": {
                    "label": "Entity lifecycle webhooks",
                    "url": "https://yourapp.com/webhooks/didit-entities",
                    "webhook_version": "v3",
                    "subscribed_events": [
                      "user.status.updated",
                      "user.data.updated",
                      "business.status.updated",
                      "business.data.updated",
                      "activity.created"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "送信先が作成されました。`secret_shared_key`はHMAC署名用のシークレットです。今すぐ保存してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "不変の送信先識別子。以降の呼び出しで`{destination_uuid}`として使用します。"
                    },
                    "label": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "webhook_version": {
                      "type": "string",
                      "enum": [
                        "v1",
                        "v2",
                        "v3"
                      ]
                    },
                    "secret_shared_key": {
                      "type": "string",
                      "description": "この送信先に紐付けられた、自動生成のHMAC署名シークレット（43文字のURLセーフなトークン）。受信したWebhookの署名ヘッダーの検証に使用します。APIキーで呼び出した場合は常に完全な値が返されます。Consoleユーザーには`read:webhooks`権限が必要で、権限がない場合は空文字列が表示されます。"
                    },
                    "secret_last4": {
                      "type": "string",
                      "description": "送信先の現在の署名シークレットの末尾4文字。シークレットを区別するために使用します。署名の検証にはこれだけでは不十分です。"
                    },
                    "previous_secret_expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "Business Consoleで送信先の署名シークレットをローテーションしてから24時間、設定されます。この時刻までは、送信先へのすべての配信に、置き換えられたシークレットで作成された`X-Signature-Previous`、`X-Signature-V2-Previous`、`X-Signature-Simple-Previous`も付与されます（[署名検証](/ja/integration/webhooks#署名検証)を参照）。過去24時間にローテーションが行われていない場合は`null`です。"
                    },
                    "subscribed_events": {
                      "$ref": "#/components/schemas/WebhookSubscribedEvents"
                    },
                    "created_by_email": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信先を作成したBusiness Consoleメンバーのメールアドレス。APIキーで作成された送信先の場合は`null`。"
                    },
                    "created_by_name": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信先を作成したBusiness Consoleメンバーの名前。APIキーで作成された送信先の場合は`null`です。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "health_status": {
                      "type": "string",
                      "enum": [
                        "healthy",
                        "degraded",
                        "failing"
                      ],
                      "description": "配信の健全性。`failing`: 送信先が最後に正常に応答して以降、3件以上の連続したイベントで最初の配信試行が失敗した状態です（`failing_streak`を参照）。`degraded`: failingではないものの、過去24時間以内に配信試行が失敗し、そのイベントがその後の試行でまだ配信されていない状態です。再試行または再送信で配信されると、この状態は解消されます。`healthy`: どちらにも該当しない状態です。`enabled`とは独立しています。失敗した試行とは、HTTP 400以上で応答された試行、またはまったく応答がなかった試行です。"
                    },
                    "failing_streak": {
                      "type": "integer",
                      "description": "過去30日以内に、送信先が最後に成功応答して以降、最初の配信試行に連続して失敗したイベントの数です。再試行はカウントされず、再試行や再送を含め、いずれかの試行が成功すると連続記録は途切れます。最後の成功以降に失敗したイベントがない場合は`0`です。"
                    },
                    "failing_since": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "現在の`failing_streak`における最初の失敗した試行が行われた日時。`failing_streak`が`0`の場合は`null`。"
                    },
                    "last_success_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "過去30日以内に、送信先が配信に対して400未満のHTTPステータスで最後に応答した日時。その期間内に該当する応答がない場合は`null`。"
                    },
                    "environment": {
                      "type": "string",
                      "enum": [
                        "live",
                        "sandbox"
                      ],
                      "description": "送信先を所有するアプリケーションの環境。"
                    },
                    "summary": {
                      "type": "object",
                      "description": "直近`metrics_window_days`（30）日間の配信メトリクス。`last_delivery_at`は、いつ行われたかにかかわらず最新の試行です。",
                      "properties": {
                        "total_deliveries": {
                          "type": "integer"
                        },
                        "failed_deliveries": {
                          "type": "integer"
                        },
                        "error_rate_percentage": {
                          "type": "integer"
                        },
                        "min_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "avg_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "max_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "last_delivery_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true
                        },
                        "metrics_window_days": {
                          "type": "integer",
                          "description": "その他のサマリー指標が対象とする期間の長さ（日数）。常に`30`です。"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Created": {
                    "value": {
                      "uuid": "11111111-2222-3333-4444-555555555555",
                      "label": "Production session webhooks",
                      "url": "https://yourapp.com/webhooks/didit",
                      "enabled": true,
                      "webhook_version": "v3",
                      "secret_shared_key": "tno2NTeRC1ZK3sBOYlBJDyEzBVENl3pQ1AcZyAW0xnQ",
                      "secret_last4": "0xnQ",
                      "previous_secret_expires_at": null,
                      "subscribed_events": [
                        "status.updated",
                        "data.updated"
                      ],
                      "created_by_email": null,
                      "created_by_name": null,
                      "created_at": "2026-05-17T10:00:00Z",
                      "updated_at": "2026-05-17T10:00:00Z",
                      "health_status": "healthy",
                      "failing_streak": 0,
                      "failing_since": null,
                      "last_success_at": null,
                      "environment": "live",
                      "summary": {
                        "total_deliveries": 0,
                        "failed_deliveries": 0,
                        "error_rate_percentage": 0,
                        "min_response_time_ms": null,
                        "avg_response_time_ms": null,
                        "max_response_time_ms": null,
                        "last_delivery_at": null,
                        "metrics_window_days": 30
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました。通常は、URLの重複、`subscribed_events`の欠落または無効、あるいは不明なイベント名が原因です。",
            "content": {
              "application/json": {
                "examples": {
                  "Duplicate URL": {
                    "value": {
                      "url": [
                        "This webhook destination already exists for the application."
                      ]
                    }
                  },
                  "Empty events list": {
                    "value": {
                      "subscribed_events": [
                        "At least one subscribed event is required."
                      ]
                    }
                  },
                  "Unknown event": {
                    "value": {
                      "subscribed_events": [
                        "Unsupported webhook events: foo.bar"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空けてから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/destinations/{destination_uuid}/": {
      "get": {
        "summary": "Webhookの送信先を取得",
        "description": "1つのWebhookの送信先を取得します。署名シークレット`secret_shared_key`、ヘルス状態（`health_status`、`failing_streak`、`failing_since`、`last_success_at`）、過去30日間の配信`summary`が含まれます。APIキーで呼び出した場合は常にシークレット全体が返されます。`read:webhooks`を持たないコンソールユーザーには空文字列が表示されます。",
        "operationId": "get_webhook_destination",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "送信先のUUID (作成または一覧取得で返される`uuid`) です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.destinations.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "Webhookの送信先の詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "label": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "webhook_version": {
                      "type": "string",
                      "enum": [
                        "v1",
                        "v2",
                        "v3"
                      ]
                    },
                    "secret_shared_key": {
                      "type": "string",
                      "description": "HMAC署名シークレット(43文字のURLセーフなトークン)。APIキーで呼び出す場合は常に完全な値が返されます。Consoleユーザーには`read:webhooks`が必要で、権限がない場合は空文字列になります。"
                    },
                    "secret_last4": {
                      "type": "string",
                      "description": "送信先の現在の署名シークレットの末尾4文字。シークレットを区別するために使用します。署名の検証にはこれだけでは不十分です。"
                    },
                    "previous_secret_expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "Business Consoleで送信先の署名シークレットをローテーションしてから24時間、設定されます。この時刻までは、送信先へのすべての配信に、置き換えられたシークレットで作成された`X-Signature-Previous`、`X-Signature-V2-Previous`、`X-Signature-Simple-Previous`も付与されます（[署名検証](/ja/integration/webhooks#署名検証)を参照）。過去24時間にローテーションが行われていない場合は`null`です。"
                    },
                    "subscribed_events": {
                      "$ref": "#/components/schemas/WebhookSubscribedEvents"
                    },
                    "created_by_email": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信先を作成したBusiness Consoleメンバーのメールアドレス。APIキーで作成された送信先の場合は`null`。"
                    },
                    "created_by_name": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信先を作成したBusiness Consoleメンバーの名前。APIキーで作成された送信先の場合は`null`です。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "health_status": {
                      "type": "string",
                      "enum": [
                        "healthy",
                        "degraded",
                        "failing"
                      ],
                      "description": "配信の健全性。`failing`: 送信先が最後に正常に応答して以降、3件以上の連続したイベントで最初の配信試行が失敗した状態です（`failing_streak`を参照）。`degraded`: failingではないものの、過去24時間以内に配信試行が失敗し、そのイベントがその後の試行でまだ配信されていない状態です。再試行または再送信で配信されると、この状態は解消されます。`healthy`: どちらにも該当しない状態です。`enabled`とは独立しています。失敗した試行とは、HTTP 400以上で応答された試行、またはまったく応答がなかった試行です。"
                    },
                    "failing_streak": {
                      "type": "integer",
                      "description": "過去30日以内に、送信先が最後に成功応答して以降、最初の配信試行に連続して失敗したイベントの数です。再試行はカウントされず、再試行や再送を含め、いずれかの試行が成功すると連続記録は途切れます。最後の成功以降に失敗したイベントがない場合は`0`です。"
                    },
                    "failing_since": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "現在の`failing_streak`における最初の失敗した試行が行われた日時。`failing_streak`が`0`の場合は`null`。"
                    },
                    "last_success_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "過去30日以内に、送信先が配信に対して400未満のHTTPステータスで最後に応答した日時。その期間内に該当する応答がない場合は`null`。"
                    },
                    "environment": {
                      "type": "string",
                      "enum": [
                        "live",
                        "sandbox"
                      ],
                      "description": "送信先を所有するアプリケーションの環境。"
                    },
                    "summary": {
                      "type": "object",
                      "description": "直近`metrics_window_days`（30）日間の配信メトリクス。`last_delivery_at`は、いつ行われたかにかかわらず最新の試行です。",
                      "properties": {
                        "total_deliveries": {
                          "type": "integer"
                        },
                        "failed_deliveries": {
                          "type": "integer"
                        },
                        "error_rate_percentage": {
                          "type": "integer"
                        },
                        "min_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "avg_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "max_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "last_delivery_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true
                        },
                        "metrics_window_days": {
                          "type": "integer",
                          "description": "その他のサマリー指標が対象とする期間の長さ（日数）。常に`30`です。"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Healthy destination": {
                    "value": {
                      "uuid": "11111111-2222-3333-4444-555555555555",
                      "label": "Production session webhooks",
                      "url": "https://yourapp.com/webhooks/didit",
                      "enabled": true,
                      "webhook_version": "v3",
                      "secret_shared_key": "tno2NTeRC1ZK3sBOYlBJDyEzBVENl3pQ1AcZyAW0xnQ",
                      "secret_last4": "0xnQ",
                      "previous_secret_expires_at": null,
                      "subscribed_events": [
                        "status.updated",
                        "data.updated"
                      ],
                      "created_by_email": null,
                      "created_by_name": null,
                      "created_at": "2026-01-04T08:00:00Z",
                      "updated_at": "2026-04-22T14:09:11Z",
                      "health_status": "healthy",
                      "failing_streak": 0,
                      "failing_since": null,
                      "last_success_at": "2026-05-17T09:21:18Z",
                      "environment": "live",
                      "summary": {
                        "total_deliveries": 12453,
                        "failed_deliveries": 14,
                        "error_rate_percentage": 0,
                        "min_response_time_ms": 41,
                        "avg_response_time_ms": 187,
                        "max_response_time_ms": 2103,
                        "last_delivery_at": "2026-05-17T09:21:18Z",
                        "metrics_window_days": 30
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの送信先が存在しないか、別のアプリケーションに属しているか、削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空けてから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "Webhookの送信先を更新",
        "description": "Webhookの送信先を更新します。**`subscribed_events`はマージされず、全体が置き換えられます**。先に取得し、追加してから再送信してください。シークレットはローテーションされません。ボディ内の`uuid`は無視され、送信先はパスで指定されます。",
        "operationId": "update_webhook_destination",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "更新する送信先のUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string",
                    "description": "人が読める新しい名前。"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "新しい送信先URL。アプリケーション内で一意である必要があります。"
                  },
                  "enabled": {
                    "type": "boolean",
                    "description": "この送信先を削除せずに配信を一時停止するには`false`に設定します。"
                  },
                  "webhook_version": {
                    "type": "string",
                    "enum": [
                      "v1",
                      "v2",
                      "v3"
                    ],
                    "description": "今後の配信に使用する新しいペイロードスキーマバージョン。"
                  },
                  "subscribed_events": {
                    "$ref": "#/components/schemas/WebhookSubscribedEvents"
                  }
                }
              },
              "examples": {
                "Pause destination": {
                  "value": {
                    "enabled": false
                  }
                },
                "Add transaction events": {
                  "value": {
                    "subscribed_events": [
                      "status.updated",
                      "data.updated",
                      "transaction.created",
                      "transaction.status.updated"
                    ]
                  }
                },
                "Move target URL": {
                  "value": {
                    "label": "Production session webhooks v2",
                    "url": "https://api.yourapp.com/webhooks/didit/v2"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"subscribed_events\": [\n      \"status.updated\",\n      \"data.updated\",\n      \"transaction.created\"\n    ]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    enabled=False,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.update(\"11111111-2222-3333-4444-555555555555\", {\n  enabled: false,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WebhooksDestinationsUpdateParams{\n\tEnabled: didit.Bool(false),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.WebhooksDestinationsUpdateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().update(\"11111111-2222-3333-4444-555555555555\", WebhooksDestinationsUpdateParams.builder()\n        .enabled(false)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->update('11111111-2222-3333-4444-555555555555', [\n    'enabled' => false,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.destinations.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  enabled: false\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new WebhooksDestinationsUpdateParams\n{\n    Enabled = false,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後のWebhookの送信先。ボディは`GET /v3/webhook/destinations/{destination_uuid}/`と同じ形式です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "label": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "webhook_version": {
                      "type": "string",
                      "enum": [
                        "v1",
                        "v2",
                        "v3"
                      ]
                    },
                    "secret_shared_key": {
                      "type": "string"
                    },
                    "secret_last4": {
                      "type": "string",
                      "description": "送信先の現在の署名シークレットの末尾4文字。シークレットを区別するために使用します。署名の検証にはこれだけでは不十分です。"
                    },
                    "previous_secret_expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "Business Consoleで送信先の署名シークレットをローテーションしてから24時間、設定されます。この時刻までは、送信先へのすべての配信に、置き換えられたシークレットで作成された`X-Signature-Previous`、`X-Signature-V2-Previous`、`X-Signature-Simple-Previous`も付与されます（[署名検証](/ja/integration/webhooks#署名検証)を参照）。過去24時間にローテーションが行われていない場合は`null`です。"
                    },
                    "subscribed_events": {
                      "$ref": "#/components/schemas/WebhookSubscribedEvents"
                    },
                    "created_by_email": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信先を作成したBusiness Consoleメンバーのメールアドレス。APIキーで作成された送信先の場合は`null`。"
                    },
                    "created_by_name": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信先を作成したBusiness Consoleメンバーの名前。APIキーで作成された送信先の場合は`null`です。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "health_status": {
                      "type": "string",
                      "enum": [
                        "healthy",
                        "degraded",
                        "failing"
                      ],
                      "description": "配信の健全性。`failing`: 送信先が最後に正常に応答して以降、3件以上の連続したイベントで最初の配信試行が失敗した状態です（`failing_streak`を参照）。`degraded`: failingではないものの、過去24時間以内に配信試行が失敗し、そのイベントがその後の試行でまだ配信されていない状態です。再試行または再送信で配信されると、この状態は解消されます。`healthy`: どちらにも該当しない状態です。`enabled`とは独立しています。失敗した試行とは、HTTP 400以上で応答された試行、またはまったく応答がなかった試行です。"
                    },
                    "failing_streak": {
                      "type": "integer",
                      "description": "過去30日以内に、送信先が最後に成功応答して以降、最初の配信試行に連続して失敗したイベントの数です。再試行はカウントされず、再試行や再送を含め、いずれかの試行が成功すると連続記録は途切れます。最後の成功以降に失敗したイベントがない場合は`0`です。"
                    },
                    "failing_since": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "現在の`failing_streak`における最初の失敗した試行が行われた日時。`failing_streak`が`0`の場合は`null`。"
                    },
                    "last_success_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "過去30日以内に、送信先が配信に対して400未満のHTTPステータスで最後に応答した日時。その期間内に該当する応答がない場合は`null`。"
                    },
                    "environment": {
                      "type": "string",
                      "enum": [
                        "live",
                        "sandbox"
                      ],
                      "description": "送信先を所有するアプリケーションの環境。"
                    },
                    "summary": {
                      "type": "object",
                      "properties": {
                        "total_deliveries": {
                          "type": "integer"
                        },
                        "failed_deliveries": {
                          "type": "integer"
                        },
                        "error_rate_percentage": {
                          "type": "integer"
                        },
                        "min_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "avg_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "max_response_time_ms": {
                          "type": "integer",
                          "nullable": true
                        },
                        "last_delivery_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true
                        },
                        "metrics_window_days": {
                          "type": "integer",
                          "description": "その他のサマリー指標が対象とする期間の長さ（日数）。常に`30`です。"
                        }
                      },
                      "description": "直近`metrics_window_days`（30）日間の配信メトリクス。`last_delivery_at`は、いつ行われたかにかかわらず最新の試行です。"
                    }
                  }
                },
                "examples": {
                  "Paused": {
                    "value": {
                      "uuid": "11111111-2222-3333-4444-555555555555",
                      "label": "Production session webhooks",
                      "url": "https://yourapp.com/webhooks/didit",
                      "enabled": false,
                      "webhook_version": "v3",
                      "secret_shared_key": "tno2NTeRC1ZK3sBOYlBJDyEzBVENl3pQ1AcZyAW0xnQ",
                      "secret_last4": "0xnQ",
                      "previous_secret_expires_at": null,
                      "subscribed_events": [
                        "status.updated",
                        "data.updated"
                      ],
                      "created_by_email": null,
                      "created_by_name": null,
                      "created_at": "2026-01-04T08:00:00Z",
                      "updated_at": "2026-05-17T11:02:55Z",
                      "health_status": "healthy",
                      "failing_streak": 0,
                      "failing_since": null,
                      "last_success_at": "2026-05-17T09:21:18Z",
                      "environment": "live",
                      "summary": {
                        "total_deliveries": 12453,
                        "failed_deliveries": 14,
                        "error_rate_percentage": 0,
                        "min_response_time_ms": 41,
                        "avg_response_time_ms": 187,
                        "max_response_time_ms": 2103,
                        "last_delivery_at": "2026-05-17T09:21:18Z",
                        "metrics_window_days": 30
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました（URLの重複、空または不明なイベントリスト、不正な形式のボディ）。",
            "content": {
              "application/json": {
                "examples": {
                  "Duplicate URL": {
                    "value": {
                      "url": [
                        "This webhook destination already exists for the application."
                      ]
                    }
                  },
                  "Empty events": {
                    "value": {
                      "subscribed_events": [
                        "At least one subscribed event is required."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの送信先は存在しません（または削除済みか、別のアプリケーションに属しています）。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空けてから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Webhookの送信先を削除",
        "description": "Webhookの送信先、その署名シークレット、および配信ログ全体を完全に削除します。この操作は元に戻せません。送信先のURLには新しいWebhookは送信されなくなります。同じイベントをサブスクライブしている他の送信先は引き続きイベントを受信します。削除後、その送信先は`GET /v3/webhook/destinations/`に表示されなくなり、配信、配信の詳細、その再送を含む`/v3/webhook/destinations/{destination_uuid}/`配下のすべてのルートは404を返します。アプリケーションの従来の`webhook_url`は、残っている有効な送信先のうち最も古いもののURLに設定され、有効な送信先が残っていない場合はクリアされます。再度DELETEを呼び出すと404が返されます。",
        "operationId": "delete_webhook_destination",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "削除する送信先のUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.webhooks.destinations.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.webhooks.destinations.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Webhooks.Destinations.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.webhooks().destinations().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->webhooks->destinations->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.webhooks.destinations.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Webhooks.Destinations.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ],
        "responses": {
          "204": {
            "description": "送信先、署名シークレット、配信ログは完全に削除されました。レスポンスボディはありません。"
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの送信先はアプリケーションに存在しません（すでに削除されたか、存在したことがありません）。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空けてから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/wallet-screening/": {
      "post": {
        "summary": "ウォレットアドレスをスクリーニングする",
        "description": "取引を作成せずに、単一の暗号資産ウォレット/アドレスに対してオンデマンドのAMLスクリーニングを実行します。アプリケーションに設定されたブロックチェーン分析プロバイダーを特定し、アドレスを同期的にスクリーニングして、正規化されたリスク結果を返します。LIGHTNINGは、Marketplaceから追加したEllipticまたはChainalysisのBYOK接続がある場合にのみ利用できます。transactionsテーブルには何も書き込まれません。スクリーニングが成功するごとに、AMLモニタリングの利用1件分が請求されます（サンドボックスアプリケーションには請求されません）。",
        "operationId": "screenWallet",
        "x-didit-sdk": {
          "resource": "wallet_screening",
          "method": "screen",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "wallet_address"
                ],
                "properties": {
                  "wallet_address": {
                    "type": "string",
                    "description": "スクリーニング対象の暗号資産アドレスまたはネットワーク識別子。選択したネットワークと一致する必要があります(例:EVMチェーンの場合は`0x`で始まる40文字の16進数アドレス)。エイリアス:`address`。",
                    "example": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "任意のネットワーク識別子です。省略した場合、ネットワークはアドレスの形式から判定されます。`bc1`、`1`、`3`で始まるアドレスはBitcoin（BTC）、`T`で始まるアドレスはTron（TRX）、base58の公開鍵はSolana（SOL）と判定されます。`0x`アドレスはすべてのEVMネットワークで有効なため、このアドレスで`blockchain`を省略すると、候補となるネットワークを`candidate_chains`に含めた422が返されます。マネージドスクリーニングは、BTC、ETH、LTC、XRP、BCH、DOGE、TRX、SOL、MATIC、BNB、BASE（Base）、OP（Optimism）、ARB（Arbitrum One）、AVAX（Avalanche C-Chain）、ADA（Cardano）、XLM（Stellar）、HBAR（Hedera）に対応しています。USDTとUSDCは従来のEthereumのエイリアスであり、複数のネットワークにまたがる検索ではありません。接続済みプロバイダーの対応範囲はプロバイダーによって異なります。LIGHTNINGには対応する接続済みプロバイダーが必要です。CELO（Celo）、MODE（Mode）、PLUME（Plume）は接続済みのTRM Labsアカウントを通じてスクリーニングされ、マネージドスクリーニングではこれらに対して400が返されます。エイリアス：`currency`。",
                    "enum": [
                      "BTC",
                      "LIGHTNING",
                      "ETH",
                      "LTC",
                      "XRP",
                      "BCH",
                      "DOGE",
                      "TRX",
                      "SOL",
                      "MATIC",
                      "BNB",
                      "USDT",
                      "USDC",
                      "BASE",
                      "OP",
                      "ARB",
                      "AVAX",
                      "ADA",
                      "XLM",
                      "HBAR",
                      "CELO",
                      "MODE",
                      "PLUME"
                    ],
                    "example": "ETH"
                  },
                  "direction": {
                    "type": "string",
                    "description": "任意。アドレスを受信（入金）側と送信（出金）側のどちらの取引相手としてスクリーニングするかを指定します。`inbound`、`outbound`、`deposit`、`withdrawal`のいずれかを指定できます。省略した場合は、中立的な送金前スクリーニングになります。この値はコンテキストとしてプロバイダーに渡されるだけで、返される`risk_score`、`severity`、および`source_of_funds`/`destination_of_funds`の内訳は変わりません。これらの内訳は`direction`に関係なく常に両方返されます。そのため、`direction`を変更または省略しても、アドレスを再スクリーニングする必要はありません。",
                    "enum": [
                      "inbound",
                      "outbound",
                      "deposit",
                      "withdrawal"
                    ]
                  }
                }
              },
              "example": {
                "wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
                "blockchain": "ETH"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/wallet-screening/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"wallet_address\": \"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n    \"blockchain\": \"ETH\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.wallet_screening.screen(\n    wallet_address=\"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n    blockchain=\"ETH\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.walletScreening.screen({\n  wallet_address: \"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n  blockchain: \"ETH\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.WalletScreening.Screen(ctx, didit.WalletScreeningScreenParams{\n\tWalletAddress: \"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n\tBlockchain:    didit.Some(didit.WalletScreeningScreenParamsBlockchain(\"ETH\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.WalletScreeningScreenParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.walletScreening().screen(WalletScreeningScreenParams.builder()\n        .walletAddress(\"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\")\n        .blockchain(WalletScreeningScreenParams.Blockchain.of(\"ETH\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->walletScreening->screen([\n    'wallet_address' => '0x94f1b9b64e2932f6a2db338f616844400cd58e8a',\n    'blockchain' => 'ETH',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.wallet_screening.screen(\n  wallet_address: \"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n  blockchain: \"ETH\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.WalletScreening.ScreenAsync(new WalletScreeningScreenParams\n{\n    WalletAddress = \"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n    Blockchain = new WalletScreeningScreenParamsBlockchain(\"ETH\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "正規化されたウォレットスクリーニングの結果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletScreeningResult"
                },
                "example": {
                  "provider": "merklescience",
                  "screening_type": "WALLET_SCREENING",
                  "risk_score": 95,
                  "severity": "CRITICAL",
                  "status": "SCREENED",
                  "summary": "Merkle Science risk: Critical (5/5). SANCTIONS HIT. Dominant risk: sanctioned. Driven by: the address is attributed to Sanctions / OFAC (Example Sanctions)",
                  "wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
                  "transaction_hash": null,
                  "blockchain": "ETH",
                  "block_timestamp": null,
                  "total_value_usd": null,
                  "fee_usd": null,
                  "sender_rows": [],
                  "receiver_rows": [],
                  "transaction_flows": [],
                  "transaction_flows_status": null,
                  "transaction_flows_error": null,
                  "source_of_funds": [
                    {
                      "category": "sanctioned",
                      "percentage": 100.0,
                      "amount_usd": 9813695.0,
                      "entity_name": "Example Sanctions",
                      "entity_type": "Sanctions",
                      "entity_subtype": "OFAC",
                      "hops": null,
                      "description": "Sanctions / OFAC",
                      "is_direct": true,
                      "exposure_direction": "incoming",
                      "exposure_type": "direct",
                      "provider_entity_id": "118885",
                      "provider_entity_type_id": "30",
                      "provider_entity_subtype_id": "125",
                      "country": "",
                      "raw_amount": null,
                      "raw_currency": null
                    }
                  ],
                  "destination_of_funds": [
                    {
                      "category": "defi",
                      "percentage": 84.824453,
                      "amount_usd": 7783414.38,
                      "entity_name": "Example DeFi 7",
                      "entity_type": "DeFi",
                      "entity_subtype": "Bridges",
                      "hops": null,
                      "description": "DeFi / Bridges",
                      "is_direct": false,
                      "exposure_direction": "outgoing",
                      "exposure_type": "indirect",
                      "provider_entity_id": "118459",
                      "provider_entity_type_id": "33",
                      "provider_entity_subtype_id": "143",
                      "country": "",
                      "raw_amount": null,
                      "raw_currency": null
                    },
                    {
                      "category": "defi",
                      "percentage": 15.175547,
                      "amount_usd": 1392494.37,
                      "entity_name": "Example DeFi 2",
                      "entity_type": "DeFi",
                      "entity_subtype": "Yield Aggregator",
                      "hops": null,
                      "description": "DeFi / Yield Aggregator",
                      "is_direct": false,
                      "exposure_direction": "outgoing",
                      "exposure_type": "indirect",
                      "provider_entity_id": "90192",
                      "provider_entity_type_id": "33",
                      "provider_entity_subtype_id": "142",
                      "country": "",
                      "raw_amount": null,
                      "raw_currency": null
                    }
                  ],
                  "counterparty_connections": [
                    {
                      "entity_name": "Example Sanctions",
                      "entity_type": "Sanctions",
                      "entity_subtype": "OFAC",
                      "risk_level": "critical",
                      "categories": [
                        "sanctioned"
                      ],
                      "received_usd": null,
                      "sent_usd": null,
                      "received_hops": null,
                      "sent_hops": null,
                      "percentage": 0.0,
                      "is_direct": true,
                      "country": null,
                      "provider_entity_id": null
                    },
                    {
                      "entity_name": "Example Sanctions",
                      "entity_type": "Sanctions",
                      "entity_subtype": "OFAC",
                      "risk_level": "critical",
                      "categories": [
                        "sanctioned"
                      ],
                      "received_usd": null,
                      "sent_usd": null,
                      "received_hops": null,
                      "sent_hops": null,
                      "percentage": 0.0,
                      "is_direct": true,
                      "country": null,
                      "provider_entity_id": null
                    }
                  ],
                  "network_nodes": [],
                  "network_edges": [],
                  "sanctions_hit": true,
                  "pep_counterparty": null,
                  "dominant_risk_category": "sanctioned",
                  "risk_factors": [
                    {
                      "source": "attribution",
                      "category": "sanctioned",
                      "label": "Sanctions / OFAC",
                      "entity_name": "Example Sanctions",
                      "direction": "attribution",
                      "exposure_type": "attribution",
                      "amount_usd": null,
                      "percentage": 0.0,
                      "is_high_risk": true,
                      "description": "the address is attributed to Sanctions / OFAC (Example Sanctions)"
                    },
                    {
                      "source": "exposure",
                      "category": "sanctioned",
                      "label": "Sanctions / OFAC",
                      "entity_name": "Example Sanctions",
                      "direction": "incoming",
                      "exposure_type": "direct",
                      "amount_usd": 9813695.0,
                      "percentage": 51.679304,
                      "is_high_risk": true,
                      "description": "51.6793% direct incoming exposure to Sanctions / OFAC (Example Sanctions)"
                    },
                    {
                      "source": "exposure",
                      "category": "defi",
                      "label": "DeFi / Bridges",
                      "entity_name": "Example DeFi 7",
                      "direction": "outgoing",
                      "exposure_type": "indirect",
                      "amount_usd": 7783414.38,
                      "percentage": 40.987766,
                      "is_high_risk": false,
                      "description": "40.9878% indirect outgoing exposure to DeFi / Bridges (Example DeFi 7)"
                    },
                    {
                      "source": "exposure",
                      "category": "defi",
                      "label": "DeFi / Yield Aggregator",
                      "entity_name": "Example DeFi 2",
                      "direction": "outgoing",
                      "exposure_type": "indirect",
                      "amount_usd": 1392494.37,
                      "percentage": 7.33293,
                      "is_high_risk": false,
                      "description": "7.33293% indirect outgoing exposure to DeFi / Yield Aggregator (Example DeFi 2)"
                    }
                  ],
                  "raw_response": {
                    "...": "provider-specific details"
                  },
                  "report_signature": "<hmac-sha256 over the result, scoped to your application>"
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：不正な形式のウォレットアドレス、`wallet_address`の欠落、サポートされていない`blockchain`、形式からネットワークを特定できないアドレスでの`blockchain`の省略、またはEllipticまたはChainalysisのBYOK Marketplace接続がない状態でのLIGHTNING。"
          },
          "401": {
            "description": "`x-api-key`がないか無効です。"
          },
          "409": {
            "description": "アプリケーションにAMLプロバイダーが設定されていないか、設定されたプロバイダーがまだウォレットスクリーニングに対応していません。先にトランザクションモニタリングを設定してください。"
          },
          "422": {
            "description": "すべてのEVMネットワークで共通の`0x`アドレスに対して`blockchain`が省略されました。スクリーニングも課金も行われていません。`blockchain`を`candidate_chains`のいずれかに設定して再送信してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "blockchain": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "A 0x address is valid on every EVM chain. Send blockchain as one of: ETH, BNB, MATIC, BASE, ARB, OP, CELO, MODE, PLUME."
                      ]
                    },
                    "candidate_chains": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "ETH",
                        "BNB",
                        "MATIC",
                        "BASE",
                        "ARB",
                        "OP",
                        "CELO",
                        "MODE",
                        "PLUME"
                      ]
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "AMLプロバイダーがスクリーニングを完了できませんでした。後で再試行してください。"
          }
        }
      }
    },
    "/v3/wallet-screening/pdf/": {
      "post": {
        "summary": "ウォレットスクリーニングの結果をPDFとしてレンダリングする",
        "description": "`POST /v3/wallet-screening/`と対になるステートレスなエンドポイントです。そのエンドポイントが返したJSONボディを、付加された`report_signature`も含めてそのまま再送信すると、同じ結果のDiditブランドのPDFが返されます。プロバイダーは呼び出されず、課金も保存も一切行われません。Diditがすでに生成した結果を再レンダリングするだけです。署名によってPDFは改変されていない結果に紐付けられます。再送信前に`risk_score`、`severity`、`sanctions_hit`、その他の署名対象フィールドを編集すると`400`で失敗します。",
        "operationId": "screenWalletPdf",
        "x-didit-sdk": {
          "resource": "wallet_screening",
          "method": "screen_pdf",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "description": "`POST /v3/wallet-screening/`から返された、変更を加えていないJSONオブジェクト（`report_signature`を含む）。",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WalletScreeningResult"
                  }
                ],
                "required": [
                  "report_signature"
                ],
                "description": "`POST /v3/wallet-screening/`のレスポンスと同じ形式です。`report_signature`を含め、そのレスポンス本文をそのまま渡してください。"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "# $RESULT is the saved JSON body from POST /v3/wallet-screening/\ncurl -X POST 'https://verification.didit.me/v3/wallet-screening/pdf/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d \"$RESULT\" \\\n  -o wallet_screening_report.pdf"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.wallet_screening.screen_pdf(\n    provider=\"your-provider\",\n    screening_type=\"WALLET_SCREENING\",\n    risk_score=1,\n    severity=\"UNKNOWN\",\n    status=\"SCREENED\",\n    summary=\"your-summary\",\n    wallet_address=\"your-wallet-address\",\n    blockchain=\"your-blockchain\",\n    source_of_funds=[{}],\n    destination_of_funds=[{}],\n    counterparty_connections=[{}],\n    sanctions_hit=True,\n    dominant_risk_category=\"your-dominant-risk-category\",\n    report_signature=\"your-report-signature\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.walletScreening.screenPdf({\n  provider: \"your-provider\",\n  screening_type: \"WALLET_SCREENING\",\n  risk_score: 1,\n  severity: \"UNKNOWN\",\n  status: \"SCREENED\",\n  summary: \"your-summary\",\n  wallet_address: \"your-wallet-address\",\n  blockchain: \"your-blockchain\",\n  source_of_funds: [{}],\n  destination_of_funds: [{}],\n  counterparty_connections: [{}],\n  sanctions_hit: true,\n  dominant_risk_category: \"your-dominant-risk-category\",\n  report_signature: \"your-report-signature\",\n});\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.WalletScreening.ScreenPDF(ctx, didit.WalletScreeningResultParam{\n\tProvider:                \"your-provider\",\n\tScreeningType:           \"WALLET_SCREENING\",\n\tRiskScore:               1,\n\tSeverity:                \"UNKNOWN\",\n\tStatus:                  \"SCREENED\",\n\tSummary:                 \"your-summary\",\n\tWalletAddress:           \"your-wallet-address\",\n\tBlockchain:              \"your-blockchain\",\n\tSourceOfFunds:           []didit.WalletScreeningResultParamSourceOfFunds{{}},\n\tDestinationOfFunds:      []didit.WalletScreeningResultParamDestinationOfFunds{{}},\n\tCounterpartyConnections: []didit.WalletScreeningResultParamCounterpartyConnections{{}},\n\tSanctionsHit:            true,\n\tDominantRiskCategory:    didit.String(\"your-dominant-risk-category\"),\n\tReportSignature:         \"your-report-signature\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.WalletScreeningResult;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.walletScreening().screenPdf(WalletScreeningResult.builder()\n        .provider(\"your-provider\")\n        .screeningType(WalletScreeningResult.ScreeningType.of(\"WALLET_SCREENING\"))\n        .riskScore(1L)\n        .severity(WalletScreeningResult.Severity.of(\"UNKNOWN\"))\n        .status(WalletScreeningResult.Status.of(\"SCREENED\"))\n        .summary(\"your-summary\")\n        .walletAddress(\"your-wallet-address\")\n        .blockchain(\"your-blockchain\")\n        .sourceOfFunds(List.of(WalletScreeningResult.SourceOfFunds.builder()\n                .build()))\n        .destinationOfFunds(List.of(WalletScreeningResult.DestinationOfFunds.builder()\n                .build()))\n        .counterpartyConnections(List.of(WalletScreeningResult.CounterpartyConnections.builder()\n                .build()))\n        .sanctionsHit(true)\n        .dominantRiskCategory(\"your-dominant-risk-category\")\n        .reportSignature(\"your-report-signature\")\n        .build())\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->walletScreening->screenPdf([\n    'provider' => 'your-provider',\n    'screening_type' => 'WALLET_SCREENING',\n    'risk_score' => 1,\n    'severity' => 'UNKNOWN',\n    'status' => 'SCREENED',\n    'summary' => 'your-summary',\n    'wallet_address' => 'your-wallet-address',\n    'blockchain' => 'your-blockchain',\n    'source_of_funds' => [[]],\n    'destination_of_funds' => [[]],\n    'counterparty_connections' => [[]],\n    'sanctions_hit' => true,\n    'dominant_risk_category' => 'your-dominant-risk-category',\n    'report_signature' => 'your-report-signature',\n]);\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.wallet_screening.screen_pdf(\n  provider: \"your-provider\",\n  screening_type: \"WALLET_SCREENING\",\n  risk_score: 1,\n  severity: \"UNKNOWN\",\n  status: \"SCREENED\",\n  summary: \"your-summary\",\n  wallet_address: \"your-wallet-address\",\n  blockchain: \"your-blockchain\",\n  source_of_funds: [{}],\n  destination_of_funds: [{}],\n  counterparty_connections: [{}],\n  sanctions_hit: true,\n  dominant_risk_category: \"your-dominant-risk-category\",\n  report_signature: \"your-report-signature\"\n)\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.WalletScreening.ScreenPdfAsync(new WalletScreeningResult\n{\n    Provider = \"your-provider\",\n    ScreeningType = \"WALLET_SCREENING\",\n    RiskScore = 1,\n    Severity = \"UNKNOWN\",\n    Status = \"SCREENED\",\n    Summary = \"your-summary\",\n    WalletAddress = \"your-wallet-address\",\n    Blockchain = \"your-blockchain\",\n    SourceOfFunds = new WalletScreeningResultSourceOfFunds[] { new() },\n    DestinationOfFunds = new WalletScreeningResultDestinationOfFunds[] { new() },\n    CounterpartyConnections = new WalletScreeningResultCounterpartyConnections[] { new() },\n    SanctionsHit = true,\n    DominantRiskCategory = \"your-dominant-risk-category\",\n    ReportSignature = \"your-report-signature\",\n});\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ],
        "responses": {
          "200": {
            "description": "レンダリングされたPDF書類。バイナリの`application/pdf`として直接返されます。JSONラッパーはありません。",
            "headers": {
              "Content-Disposition": {
                "description": "`attachment; filename=wallet_screening_{address}.pdf`。再投稿された結果の`wallet_address`（または`transaction_hash`）から生成されます。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=wallet_screening_0x28c6c06298d514db0899.pdf"
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディがウォレットスクリーニング結果の形式に一致するJSONオブジェクトではないか、`report_signature`がない、または再送信されたフィールドと一致しません（再送信前に編集または切り詰められています）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "examples": {
                  "Not an object": {
                    "value": {
                      "non_field_errors": [
                        "Expected a JSON object matching a wallet-screening result."
                      ]
                    }
                  },
                  "Missing or invalid signature": {
                    "value": {
                      "report_signature": [
                        "This wallet-screening result is missing or fails its report signature - repost the exact JSON returned by the wallet-screening endpoint, unmodified."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "`x-api-key`がないか無効です。"
          }
        }
      }
    },
    "/v3/transactions/": {
      "get": {
        "summary": "取引を一覧表示",
        "description": "ページネーションされた監視対象取引の一覧（新しい順、`txn_date`の降順）。`count`の上限は100です。実際の行数には`total_transactions`を使用してください。このエンドポイントはフィルターや検索パラメーターをサポートしていません。",
        "operationId": "listTransactions",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "description": "ページサイズ。省略時は50です。強制される上限はありませんが、レイテンシーを抑えるためにページは小さく保ってください。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "description": "返す最初のレコードの0始まりのオフセットです。前のページの`next`URLをたどる方法を推奨します。"
          },
          {
            "name": "travel_rule_status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "トラベルルールの送金がこのステータスと完全に一致する取引のみを返します（例: `ON_HOLD`や`AWAITING_COUNTERPARTY`）。`count`はこのフィルターに従いますが、`total_transactions`は引き続きアプリケーション内のすべての取引を数えます。"
          },
          {
            "name": "assignee",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りで指定し、いずれかの値に該当する取引が一致します。`unassigned`はまだ誰も担当していない取引、`rules`はレビュアーを介さずルールのみで判定された取引を表し、メンバーのメールアドレスはその取引に割り当てられたレビュアーに一致します。`me`はConsoleにサインインしているレビュアーを指すため、APIキーで`me`を送信すると`400`が返されます。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.transactions.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.transactions.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.ListAutoPaging(ctx, didit.TransactionsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.transactions().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->transactions->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Transactions.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされた取引サマリーの一覧（新しい順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "条件に一致する取引の件数（上限あり。100件までは正確な値で、それを超えると上限値で打ち切られます）。ページネーション時に実際の件数を知るには`total_transactions`を使用してください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "total_transactions": {
                      "type": "integer",
                      "description": "アプリケーションの（削除されていない）取引の正確な総数です。ページネーションされたレスポンスに含まれます。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "description": "不変のDidit取引識別子。詳細・メモ・関連の呼び出しで`{transaction_id}`として使用します。"
                          },
                          "transaction_number": {
                            "type": "integer",
                            "description": "Consoleに表示される、アプリケーション単位の取引の連番（例: `4123`）。"
                          },
                          "txn_id": {
                            "type": "string",
                            "description": "作成時の呼び出しで顧客が指定した識別子（最大128文字）。アプリケーションごとに一意です。"
                          },
                          "transaction_type": {
                            "type": "string",
                            "description": "保存されている最上位カテゴリー: `finance`、`kyc`、`travelRule`、`userPlatformEvent`、`gamblingBet`、`gamblingLimitChange`、`gamblingBonusChange`、`auditTrailEvent`。複数語の値は、snake_caseで送信した場合でもcamelCaseで返される点に注意してください。"
                          },
                          "action_type": {
                            "type": "string",
                            "description": "カテゴリ内のサブタイプ（例: `deposit`、`withdrawal`、`transfer`）。"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "APPROVED",
                              "IN_REVIEW",
                              "DECLINED",
                              "AWAITING_USER"
                            ],
                            "description": "現在のモニタリング判定。"
                          },
                          "direction": {
                            "type": "string",
                            "enum": [
                              "INBOUND",
                              "OUTBOUND"
                            ],
                            "description": "対象者から見た方向です。送信時の大文字・小文字にかかわらず大文字で保存されます。"
                          },
                          "amount": {
                            "type": "string",
                            "description": "末尾のゼロを除去した10進数文字列で表した取引金額（例: `\"1500\"`、`\"0.5\"`、`\"0.123456789012345678\"`）。小数点以下最大18桁です。"
                          },
                          "currency": {
                            "type": "string",
                            "description": "`amount`の通貨コード。ISO 4217の任意のアルファベットコード（例: `EUR`、`USD`、`NGN`）と暗号資産シンボル（例: `BTC`）を受け付けます。現在流通しているコードを推奨します。受け付けられるすべてのコードに為替レートがあるわけではありません。コードに為替レートがない場合（たとえばISOの会計単位`XSU`や、Diditが価格を付けていない暗号資産シンボル）、自動換算は失敗し、リクエストで換算済みの`amount_in_default_currency`を指定していない限り`preferred_currency_amount`はnullで返されます。"
                          },
                          "preferred_currency_amount": {
                            "type": "string",
                            "nullable": true,
                            "description": "利用可能な場合に、アプリケーションの優先通貨に換算した`amount`です。"
                          },
                          "preferred_currency_code": {
                            "type": "string",
                            "nullable": true,
                            "description": "`preferred_currency_amount`に使用する優先通貨コード。アプリケーションの基準通貨で、現在流通している任意のISO 4217コードを指定できます。利用可能な為替レートがないコードの場合、リクエストで換算済みの`amount_in_default_currency`が指定されていない限り、`preferred_currency_amount`はnullになります。"
                          },
                          "payment_details": {
                            "type": "string",
                            "nullable": true,
                            "description": "送信内容に含まれる自由記述の支払い参照情報またはメモ。"
                          },
                          "score": {
                            "type": "integer",
                            "description": "リスクスコア(通常0~100)。値が高いほどリスクが高くなります。"
                          },
                          "severity": {
                            "type": "string",
                            "nullable": true,
                            "enum": [
                              "UNKNOWN",
                              "LOW",
                              "MEDIUM",
                              "HIGH",
                              "CRITICAL"
                            ],
                            "description": "ルールまたはプロバイダーが設定するカテゴリ別のリスク重大度（`UNKNOWN`、`LOW`、`MEDIUM`、`HIGH`、`CRITICAL`）。いずれかによって設定されるまでは`null`です。"
                          },
                          "subject_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "`APPLICANT`当事者の氏名。"
                          },
                          "subject_vendor_data": {
                            "type": "string",
                            "nullable": true,
                            "description": "申請者に対するお客様の内部ユーザー/企業識別子です。"
                          },
                          "subject_country": {
                            "type": "string",
                            "nullable": true,
                            "description": "申請者の国コード。送信された`address.country`から取得します(通常はISO 3166-1 alpha-3)。"
                          },
                          "counterparty_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "`COUNTERPARTY`当事者の氏名（存在する場合）。"
                          },
                          "counterparty_vendor_data": {
                            "type": "string",
                            "nullable": true,
                            "description": "取引相手に対するお客様の内部識別子です。"
                          },
                          "counterparty_country": {
                            "type": "string",
                            "nullable": true,
                            "description": "取引相手の国コード。送信された`address.country`から取得します。"
                          },
                          "tags": {
                            "type": "array",
                            "description": "取引に付与されたタグ(手動またはルールによる)。",
                            "items": {
                              "type": "object",
                              "properties": {
                                "uuid": {
                                  "type": "string",
                                  "format": "uuid"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "color": {
                                  "type": "string"
                                },
                                "description": {
                                  "type": "string",
                                  "nullable": true
                                },
                                "source": {
                                  "type": "string",
                                  "enum": [
                                    "didit",
                                    "custom"
                                  ],
                                  "description": "タグがDiditのプリセットかカスタムタグか。"
                                }
                              }
                            }
                          },
                          "txn_date": {
                            "type": "string",
                            "format": "date-time",
                            "description": "取引が発生した日時（作成時の`transaction_at`の値）。"
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "description": "Diditが送信内容を記録した日時です。"
                          },
                          "decision_reason_code": {
                            "type": "string",
                            "nullable": true,
                            "description": "現在の`status`の機械可読な理由（例: `WALLET_HIGH_RISK`）。"
                          },
                          "decision_reason_label": {
                            "type": "string",
                            "nullable": true,
                            "description": "`decision_reason_code`の人が読めるラベル。"
                          },
                          "assigned_to_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "この取引に割り当てられたConsoleレビュアーの表示名です。"
                          },
                          "travel_rule_status": {
                            "type": "string",
                            "nullable": true,
                            "description": "取引のトラベルルール送金のステータス（例：`COMPLETED`）です。送金がない場合は`null`です。"
                          },
                          "travel_rule": {
                            "nullable": true,
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/TransactionTravelRule"
                              }
                            ],
                            "description": "取引のトラベルルール送金。`GET /v3/transactions/{transaction_id}/`の`travel_rule`と同じブロックです。取引に送金がない場合は`null`です。"
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Single transaction": {
                    "value": {
                      "count": 1,
                      "next": null,
                      "previous": null,
                      "total_transactions": 1,
                      "results": [
                        {
                          "uuid": "abcdef12-3456-4890-abcd-ef1234567890",
                          "transaction_number": 4123,
                          "txn_id": "your-txn-2026-05-17-001",
                          "transaction_type": "finance",
                          "action_type": "withdrawal",
                          "status": "IN_REVIEW",
                          "direction": "OUTBOUND",
                          "amount": "1500",
                          "currency": "EUR",
                          "preferred_currency_amount": "1620.45",
                          "preferred_currency_code": "USD",
                          "payment_details": "Withdrawal to crypto wallet",
                          "txn_date": "2026-05-17T08:42:00Z",
                          "created_at": "2026-05-17T08:42:11Z",
                          "score": 78,
                          "severity": "HIGH",
                          "decision_reason_code": "WALLET_HIGH_RISK",
                          "decision_reason_label": "Destination wallet flagged as high risk",
                          "tags": [
                            {
                              "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                              "name": "Manual review",
                              "color": "#F59E0B",
                              "description": null,
                              "source": "custom"
                            }
                          ],
                          "subject_name": "Maria Garcia",
                          "subject_vendor_data": "user-12345",
                          "counterparty_name": null,
                          "counterparty_vendor_data": null,
                          "counterparty_country": null,
                          "subject_country": null,
                          "assigned_to_name": "Alex Reviewer",
                          "travel_rule_status": null,
                          "travel_rule": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの取引を一覧表示する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "取引を作成",
        "description": "同期的なAML/リスクモニタリングのために取引を送信します。取引は`APPROVED`として作成され、その後ルール（および該当する場合は暗号資産スクリーニング）がインラインで実行され、返される`status`が`IN_REVIEW`または`DECLINED`に変わることがあります。**`transaction_id`は冪等性キーです**（最大128文字、アプリごとに一意）。再利用すると400が返されます。本番アプリケーションでは、成功時に`transaction.created`のWebhookが送信されます。サンドボックスアプリケーションには請求が発生せず、`transaction.created`および`transaction.status.updated`のWebhookも送信されません。サンドボックスでのトラベルルールのやり取りでは、`environment: sandbox`付きの`travel_rule.status.updated`のWebhookが送信されます。トラベルルールの送金は、取引相手に連絡する前に保存されて返されます。`travel_rule.status`は`AWAITING_COUNTERPARTY`（しきい値未満の場合は`NOT_APPLICABLE`、申告されたセルフホスト型ウォレットの場合は`UNCONFIRMED_OWNERSHIP`、相手側ウォレットが自社の検証済みウォレットである場合は`COMPLETED`）として返され、`travel_rule.protocol`はnullになります。その後Diditがレールを選択してやり取りを送信し、送金のその後のすべてのステータス変更（どのレールでも取引相手に到達できない場合の`COUNTERPARTY_VASP_NOT_FOUND`を含む）は`travel_rule.status.updated`のWebhookとして届きます。レールまたはステータスが変わると、ルールが再度実行されます。",
        "operationId": "createTransaction",
        "tags": [
          "Transactions"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/transactions/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"transaction_id\": \"your-txn-2026-05-17-001\",\n    \"transaction_category\": \"finance\",\n    \"transaction_details\": {\n      \"direction\": \"outbound\",\n      \"amount\": 1500,\n      \"currency\": \"EUR\",\n      \"action_type\": \"withdrawal\"\n    },\n    \"subject\": {\n      \"entity_type\": \"individual\",\n      \"vendor_data\": \"user-12345\",\n      \"full_name\": \"Maria Garcia\"\n    }\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.create(\n    transaction_id=\"your-txn-2026-05-17-001\",\n    transaction_category=\"finance\",\n    transaction_details={\n        \"direction\": \"outbound\",\n        \"amount\": 1500.0,\n        \"currency\": \"EUR\",\n        \"action_type\": \"withdrawal\",\n    },\n    subject={\n        \"entity_type\": \"individual\",\n        \"vendor_data\": \"user-12345\",\n        \"full_name\": \"Maria Garcia\",\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.create({\n  transaction_id: \"your-txn-2026-05-17-001\",\n  transaction_category: \"finance\",\n  transaction_details: {\n    direction: \"outbound\",\n    amount: 1500.0,\n    currency: \"EUR\",\n    action_type: \"withdrawal\",\n  },\n  subject: {\n    entity_type: \"individual\",\n    vendor_data: \"user-12345\",\n    full_name: \"Maria Garcia\",\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Create(ctx, didit.TransactionsCreateParams{\n\tTransactionID:       \"your-txn-2026-05-17-001\",\n\tTransactionCategory: \"finance\",\n\tTransactionDetails: didit.TransactionsCreateParamsTransactionDetails{\n\t\tDirection:  \"outbound\",\n\t\tAmount:     1500.0,\n\t\tCurrency:   \"EUR\",\n\t\tActionType: didit.String(\"withdrawal\"),\n\t},\n\tSubject: didit.TransactionsCreateParamsSubject{\n\t\tEntityType: didit.String(\"individual\"),\n\t\tVendorData: \"user-12345\",\n\t\tFullName:   \"Maria Garcia\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TransactionsCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().create(TransactionsCreateParams.builder()\n        .transactionId(\"your-txn-2026-05-17-001\")\n        .transactionCategory(TransactionsCreateParams.TransactionCategory.of(\"finance\"))\n        .transactionDetails(TransactionsCreateParams.TransactionDetails.builder()\n                .direction(TransactionsCreateParams.TransactionDetails.Direction.of(\"outbound\"))\n                .amount(1500.0)\n                .currency(\"EUR\")\n                .actionType(\"withdrawal\")\n                .build())\n        .subject(TransactionsCreateParams.Subject.builder()\n                .entityType(\"individual\")\n                .vendorData(\"user-12345\")\n                .fullName(\"Maria Garcia\")\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->create([\n    'transaction_id' => 'your-txn-2026-05-17-001',\n    'transaction_category' => 'finance',\n    'transaction_details' => [\n        'direction' => 'outbound',\n        'amount' => 1500.0,\n        'currency' => 'EUR',\n        'action_type' => 'withdrawal',\n    ],\n    'subject' => [\n        'entity_type' => 'individual',\n        'vendor_data' => 'user-12345',\n        'full_name' => 'Maria Garcia',\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.create(\n  transaction_id: \"your-txn-2026-05-17-001\",\n  transaction_category: \"finance\",\n  transaction_details: {\n    direction: \"outbound\",\n    amount: 1500.0,\n    currency: \"EUR\",\n    action_type: \"withdrawal\",\n  },\n  subject: {\n    entity_type: \"individual\",\n    vendor_data: \"user-12345\",\n    full_name: \"Maria Garcia\",\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.CreateAsync(new TransactionsCreateParams\n{\n    TransactionId = \"your-txn-2026-05-17-001\",\n    TransactionCategory = \"finance\",\n    TransactionDetails = new()\n    {\n        Direction = \"outbound\",\n        Amount = 1500.0,\n        Currency = \"EUR\",\n        ActionType = \"withdrawal\",\n    },\n    Subject = new()\n    {\n        EntityType = \"individual\",\n        VendorData = \"user-12345\",\n        FullName = \"Maria Garcia\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "transaction_id": {
                    "type": "string",
                    "description": "この取引に対するお客様独自の識別子です（最大128文字）。",
                    "example": "your-txn-2026-05-17-001"
                  },
                  "transaction_at": {
                    "type": "string",
                    "format": "date-time",
                    "description": "取引が発生した日時。省略した場合は現在日時になります。"
                  },
                  "time_zone": {
                    "type": "string",
                    "description": "IANAタイムゾーン識別子。例: `Europe/Madrid`。"
                  },
                  "transaction_category": {
                    "type": "string",
                    "description": "取引のカテゴリ。キャメルケースのエイリアス（`travelRule`、`userPlatformEvent`、`gamblingBet`など）も受け付けます。複数語のカテゴリでは、保存および返却される値はキャメルケースです。",
                    "example": "finance",
                    "enum": [
                      "finance",
                      "kyc",
                      "travel_rule",
                      "user_event",
                      "audit_trail_event",
                      "gambling_bet",
                      "gambling_limit_change",
                      "gambling_bonus_change",
                      "travelRule"
                    ]
                  },
                  "transaction_details": {
                    "type": "object",
                    "description": "取引の主要な金融情報。",
                    "required": [
                      "direction",
                      "amount",
                      "currency"
                    ],
                    "properties": {
                      "direction": {
                        "type": "string",
                        "description": "対象者から見た取引の方向です。大文字と小文字は区別されず、`in`/`out`もエイリアスとして受け付けます。大文字（`INBOUND`/`OUTBOUND`）で返されます。",
                        "example": "outbound",
                        "enum": [
                          "inbound",
                          "outbound",
                          "in",
                          "out"
                        ]
                      },
                      "amount": {
                        "type": "number",
                        "description": "取引金額（小数点以下最大18桁）。正確な精度が重要な場合は、10進数の文字列（例: `\"0.123456789012345678\"`）として送信してください。JSONの数値はまずバイナリ浮動小数点数として解析されるため、有効桁数約15桁を超える桁は金額の保存前に丸められます。0以上である必要があります。符号は方向で表され、負の金額を送ると`400`が返されます。",
                        "example": 1500
                      },
                      "currency": {
                        "type": "string",
                        "description": "通貨コード。ISO 4217のアルファベットコード（例：`EUR`、`USD`、`NGN`）と暗号資産シンボル（例：`BTC`）を受け付けます。現在流通しているコードを推奨します。受け付けるすべてのコードに為替レートがあるわけではありません。コードに利用可能な為替レートがない場合（例：ISOの会計単位`XSU`や、Diditが価格を算出していない暗号資産シンボル）、自動換算は失敗し、リクエストで換算済みの`amount_in_default_currency`を指定していない限り、`preferred_currency_amount`はnullで返されます。",
                        "example": "EUR"
                      },
                      "currency_kind": {
                        "type": "string",
                        "description": "通貨が`fiat`と`crypto`のどちらか。"
                      },
                      "amount_in_default_currency": {
                        "type": "number",
                        "nullable": true,
                        "description": "デフォルト通貨に事前換算した金額。省略した場合は、自動で為替換算が試行されます。0以上である必要があります。"
                      },
                      "default_currency": {
                        "type": "string",
                        "description": "換算額のデフォルト通貨コードです。現在流通している任意のISO 4217コードを指定できます。"
                      },
                      "payment_details": {
                        "type": "string",
                        "nullable": true,
                        "description": "自由記述の支払い参照情報またはメモ。"
                      },
                      "payment_reference_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "外部決済システムの参照番号です。暗号資産のAML取引ハッシュスクリーニングでは、ブロックチェーンの取引ハッシュを送信し、関連するアドレスを`subject.payment_method.account_id`にも指定してください。"
                      },
                      "action_type": {
                        "type": "string",
                        "nullable": true,
                        "description": "取引のサブタイプ。例: `deposit`、`withdrawal`、`transfer`。"
                      },
                      "crypto_params": {
                        "type": "object",
                        "description": "通貨（資産シンボル）とは別に指定する暗号資産ネットワークの選択。カスタムトークンのシンボルを記録しても、そのコントラクトのトランザクションハッシュがカバーされることは保証されません。",
                        "properties": {
                          "crypto_chain": {
                            "type": "string",
                            "description": "スクリーニングに実際に使用されたネットワーク。マネージドスクリーニングは、BTC、ETH、LTC、XRP、BCH、DOGE、TRX、SOL、MATIC、BNB、BASE（Base）、OP（Optimism）、ARB（Arbitrum One）、AVAX（Avalanche C-Chain）、ADA（Cardano）、XLM（Stellar）、HBAR（Hedera）に対応しています。一般的なネットワーク名も使用できます。たとえば、MATICにはPOLYGONまたはPOL、BNBにはBSC、TRXにはTRONを指定できます。複数のネットワークに存在するトークンでは、必ずこの値を指定してください。0xで始まるトランザクションハッシュで送信されたUSDT、USDC、ETHでこの値が指定されていない場合、DiditはEthereum、BNB Chain、Polygon、Base、Arbitrum、Optimismでハッシュを検索し、見つかったネットワークでスクリーニングします。いずれのネットワークにも見つからない場合、その取引はスクリーニングされず、custom_values.aml_screening_statusはFAILEDとなり、理由がcustom_values.aml_screening_errorに設定されます。ウォレットでスクリーニングするUSDTまたはUSDC（トランザクションハッシュなし）でこの値が指定されていない場合、TronのアドレスはTronで、SolanaのアドレスはSolanaでスクリーニングされます。0xアドレスは、上記6つのネットワークのうち、そのアドレスが取引を送信したことがある、またはそのトークンを保有している最初のネットワークでスクリーニングされ、いずれのネットワークでもアクティブでない場合はEthereumでスクリーニングされます。接続プロバイダーの対応範囲は異なります。LIGHTNINGには、対応する接続プロバイダーが必要です。",
                            "example": "BASE"
                          }
                        }
                      }
                    }
                  },
                  "subject": {
                    "type": "object",
                    "description": "取引の対象者（申請者）。",
                    "required": [
                      "vendor_data",
                      "full_name"
                    ],
                    "properties": {
                      "entity_type": {
                        "type": "string",
                        "description": "エンティティの種類：`individual`または`company`。"
                      },
                      "vendor_data": {
                        "type": "string",
                        "description": "お客様の内部ユーザー/企業識別子です。",
                        "example": "user-12345"
                      },
                      "full_name": {
                        "type": "string",
                        "description": "対象者の氏名。",
                        "example": "Maria Garcia"
                      },
                      "first_name": {
                        "type": "string",
                        "description": "対象者の名。"
                      },
                      "last_name": {
                        "type": "string",
                        "description": "対象者の姓。"
                      },
                      "date_of_birth": {
                        "type": "string",
                        "format": "date",
                        "description": "生年月日（YYYY-MM-DD）。"
                      },
                      "address": {
                        "type": "object",
                        "description": "住所オブジェクト。",
                        "properties": {
                          "country": {
                            "type": "string",
                            "description": "国コード(ISO 3166-1 alpha-3を推奨)。当事者の`country_code`にコピーされます。"
                          },
                          "town": {
                            "type": "string"
                          },
                          "state": {
                            "type": "string"
                          },
                          "street": {
                            "type": "string"
                          },
                          "post_code": {
                            "type": "string"
                          }
                        }
                      },
                      "institution_details": {
                        "type": "object",
                        "description": "機関の詳細（機関である対象者の場合）。",
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "address": {
                            "type": "object"
                          }
                        }
                      },
                      "device_context": {
                        "type": "object",
                        "description": "取引時に取得されたデバイスコンテキスト。browser_familyとplatformは明示的なトップレベルのキーとして送信する必要があり、user_agentから導出されることはありません。リクエストでは、camelCaseのエイリアスであるdeviceも受け付けます。",
                        "properties": {
                          "fingerprint": {
                            "type": "string",
                            "description": "一意のデバイスフィンガープリント。"
                          },
                          "persistent_device_id": {
                            "type": "string",
                            "description": "セッションをまたいで不変のデバイス識別子(v2フィンガープリントスキーマ)。"
                          },
                          "user_agent": {
                            "type": "string",
                            "description": "ブラウザまたはアプリのユーザーエージェント文字列。CamelCaseのエイリアス：userAgent。"
                          },
                          "browser_family": {
                            "type": "string",
                            "description": "ブラウザファミリー（例：Chrome、Firefox、Safari）。明示的に送信する必要があり、user_agentからは導出されません。CamelCaseのエイリアス：browserFamily。"
                          },
                          "browser_version": {
                            "type": "string",
                            "description": "ブラウザのバージョン文字列。明示的に送信する必要があります。CamelCaseのエイリアス：browserVersion。"
                          },
                          "platform": {
                            "type": "string",
                            "description": "プラットフォーム識別子(web、ios、android、macos、windows、linux)。明示的に送信する必要があります。user_agentからは導出されません。"
                          },
                          "os_family": {
                            "type": "string",
                            "description": "オペレーティングシステムのファミリー（例: iOS、Android、Windows）。CamelCaseのエイリアス: osFamily。"
                          },
                          "os_version": {
                            "type": "string",
                            "description": "オペレーティングシステムのバージョン文字列です。CamelCaseのエイリアス: osVersion。"
                          },
                          "accept_language": {
                            "type": "string",
                            "description": "Accept-Languageヘッダーの値。キャメルケースのエイリアス：acceptLang。"
                          },
                          "session_id": {
                            "type": "string",
                            "description": "ユーザーの現在のセッションのセッション識別子。メタデータに保存されます。キャメルケースのエイリアスはsessionIdです。"
                          },
                          "session_age_ms": {
                            "type": "number",
                            "description": "取引時点でのユーザーセッションの経過時間（ミリ秒）。キャメルケースのエイリアス:sessionAgeMs。"
                          },
                          "network_context": {
                            "type": "object",
                            "description": "IPアドレスと位置情報を含むネットワークコンテキスト。トップレベルのipInfoブロックもこのオブジェクトに統合されます。",
                            "properties": {
                              "ip_address": {
                                "type": "string",
                                "description": "クライアントのIPアドレス。キャメルケースのエイリアス: ip。"
                              },
                              "ip_country_code": {
                                "type": "string",
                                "description": "IPアドレスの位置情報から特定された国（ISO 3166-1 alpha-3）。キャメルケースのエイリアス：countryCode3。"
                              },
                              "latitude": {
                                "type": "number",
                                "description": "IPの地理的な緯度。CamelCaseのエイリアス: lat。"
                              },
                              "longitude": {
                                "type": "number",
                                "description": "IPの地理的な経度。CamelCaseのエイリアス: lon。"
                              }
                            }
                          }
                        }
                      },
                      "payment_method": {
                        "type": "object",
                        "description": "対象者が使用した支払い方法。",
                        "properties": {
                          "method_type": {
                            "type": "string",
                            "description": "支払い方法の種類：`bank_card`、`bank_account`、`crypto_wallet`、`ewallet`、`unhosted_wallet`、`other`。"
                          },
                          "account_id": {
                            "type": "string",
                            "description": "口座識別子（例：IBAN、ウォレットアドレス）。暗号資産のスクリーニングでは、この参加者のウォレットアドレスを指定してください。インバウンドのトランザクションハッシュのスクリーニングでは、対象者側にサービスまたは顧客の入金アドレスが必要です。アウトバウンドのスクリーニングでは、取引相手側の送金先ウォレットを使用します。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は\"\"）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は\"\"）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。"
                          },
                          "memo": {
                            "type": "string",
                            "maxLength": 256,
                            "description": "メモ型ネットワーク（XRP、XLM、EOS、ATOM、HBAR）でウォレットの一部となる宛先タグまたはメモです。共有された1つの取引所アドレス上では、メモごとに独立した支払い方法になります。XRPでは宛先タグで、0から4294967295までの整数です（JSONの数値も受け付けます）。XLMでは最大28バイトのテキストメモ、64ビットのID、または16進数の32バイトハッシュです。EOSでは最大256バイトです。ATOMでは最大256文字です。HBARでは最大100バイトです。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin Cash、Dogecoin、Lightningのウォレットはメモを受け付けず、指定すると`400`になります。エイリアスは`destinationTag`または`destination_tag`です。"
                          },
                          "issuing_country": {
                            "type": "string",
                            "description": "発行者の国を示すISO 3166-1 alpha-3コード。"
                          }
                        }
                      }
                    }
                  },
                  "counterparty": {
                    "type": "object",
                    "description": "取引の取引相手(任意)。",
                    "properties": {
                      "entity_type": {
                        "type": "string",
                        "description": "エンティティの種類：`individual`または`company`。"
                      },
                      "vendor_data": {
                        "type": "string",
                        "description": "取引相手に対するお客様の内部識別子です。"
                      },
                      "full_name": {
                        "type": "string",
                        "description": "取引相手の氏名。"
                      },
                      "first_name": {
                        "type": "string"
                      },
                      "last_name": {
                        "type": "string"
                      },
                      "date_of_birth": {
                        "type": "string",
                        "format": "date"
                      },
                      "address": {
                        "type": "object",
                        "description": "`country`（ISO 3166-1 alpha-3）を含む住所オブジェクト。"
                      },
                      "institution_details": {
                        "type": "object"
                      },
                      "device_context": {
                        "type": "object",
                        "description": "取引相手のデバイスコンテキストです。browser_familyとplatformは明示的なトップレベルのキーとして送信する必要があります。これらはuser_agentから導出されません。",
                        "properties": {
                          "fingerprint": {
                            "type": "string",
                            "description": "一意のデバイスフィンガープリント。"
                          },
                          "persistent_device_id": {
                            "type": "string",
                            "description": "セッションをまたいで不変のデバイス識別子(v2フィンガープリントスキーマ)。"
                          },
                          "user_agent": {
                            "type": "string",
                            "description": "ブラウザまたはアプリのユーザーエージェント文字列。CamelCaseのエイリアス：userAgent。"
                          },
                          "browser_family": {
                            "type": "string",
                            "description": "ブラウザファミリー（例：Chrome、Firefox、Safari）。明示的に送信する必要があり、user_agentからは導出されません。CamelCaseのエイリアス：browserFamily。"
                          },
                          "browser_version": {
                            "type": "string",
                            "description": "ブラウザのバージョン文字列。明示的に送信する必要があります。CamelCaseのエイリアス：browserVersion。"
                          },
                          "platform": {
                            "type": "string",
                            "description": "プラットフォーム識別子(web、ios、android、macos、windows、linux)。明示的に送信する必要があります。user_agentからは導出されません。"
                          },
                          "os_family": {
                            "type": "string",
                            "description": "オペレーティングシステムのファミリー（例: iOS、Android、Windows）。CamelCaseのエイリアス: osFamily。"
                          },
                          "os_version": {
                            "type": "string",
                            "description": "オペレーティングシステムのバージョン文字列です。CamelCaseのエイリアス: osVersion。"
                          },
                          "accept_language": {
                            "type": "string",
                            "description": "Accept-Languageヘッダーの値。キャメルケースのエイリアス：acceptLang。"
                          },
                          "session_id": {
                            "type": "string",
                            "description": "取引相手のセッションのセッション識別子。メタデータに保存されます。キャメルケースのエイリアスはsessionIdです。"
                          },
                          "session_age_ms": {
                            "type": "number",
                            "description": "取引時点でのユーザーセッションの経過時間（ミリ秒）。キャメルケースのエイリアス:sessionAgeMs。"
                          },
                          "network_context": {
                            "type": "object",
                            "description": "IPアドレスと位置情報を含むネットワークコンテキスト。トップレベルのipInfoブロックもこのオブジェクトに統合されます。",
                            "properties": {
                              "ip_address": {
                                "type": "string",
                                "description": "クライアントのIPアドレス。キャメルケースのエイリアス: ip。"
                              },
                              "ip_country_code": {
                                "type": "string",
                                "description": "IPアドレスの位置情報から特定された国（ISO 3166-1 alpha-3）。キャメルケースのエイリアス：countryCode3。"
                              },
                              "latitude": {
                                "type": "number",
                                "description": "IPの地理的な緯度。CamelCaseのエイリアス: lat。"
                              },
                              "longitude": {
                                "type": "number",
                                "description": "IPの地理的な経度。CamelCaseのエイリアス: lon。"
                              }
                            }
                          }
                        }
                      },
                      "payment_method": {
                        "type": "object",
                        "description": "取引相手が使用した支払い方法。travelRule取引では、`method_type: \"unhosted_wallet\"`を指定すると取引相手のウォレットがセルフホスト型として申告されます。この場合、送金は取引相手VASPへのルーティングをスキップして直接`UNCONFIRMED_OWNERSHIP`で作成され、（`auto_wallet_verification`が有効な場合）ウォレット所有権ウィジェットのセッションが自動発行され、取引の`action_required`ブロックで返されます。",
                        "properties": {
                          "method_type": {
                            "type": "string",
                            "description": "支払い方法の種類：`bank_card`、`bank_account`、`crypto_wallet`、`ewallet`、`unhosted_wallet`、`other`。トラベルルールのためにセルフホスト型ウォレットを申告するには`unhosted_wallet`を使用します。"
                          },
                          "account_id": {
                            "type": "string",
                            "description": "口座識別子（例：IBANまたはウォレットアドレス）。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は\"\"）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は\"\"）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。"
                          },
                          "memo": {
                            "type": "string",
                            "maxLength": 256,
                            "description": "メモ型ネットワーク（XRP、XLM、EOS、ATOM、HBAR）でウォレットの一部となる宛先タグまたはメモです。共有された1つの取引所アドレス上では、メモごとに独立した支払い方法になります。XRPでは宛先タグで、0から4294967295までの整数です（JSONの数値も受け付けます）。XLMでは最大28バイトのテキストメモ、64ビットのID、または16進数の32バイトハッシュです。EOSでは最大256バイトです。ATOMでは最大256文字です。HBARでは最大100バイトです。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin Cash、Dogecoin、Lightningのウォレットはメモを受け付けず、指定すると`400`になります。エイリアスは`destinationTag`または`destination_tag`です。"
                          },
                          "issuing_country": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "custom_properties": {
                    "type": "object",
                    "description": "取引に付与する任意のキーと値のペア。各キーは、ルール条件でフィールドパス`custom_values.<key>`を使って参照できます。",
                    "additionalProperties": true,
                    "example": {
                      "merchant_id": "test",
                      "bank_name": "test_2"
                    }
                  },
                  "travel_rule_details": {
                    "type": "object",
                    "description": "トラベルルールのデータ。トラベルルールが有効で、transaction_categoryがtravel_ruleの場合は、Didit自身が交換を実行します。この場合、status、protocol、required、obligations_countは無視され、originator_data、beneficiary_data、metadataが使用されます。それ以外の場合、Diditはこれらの値を受動的なトラベルルール記録として保存します。トラベルルールが有効な間は、設定したしきい値以上のアウトバウンド送金に、その規制（EU TFRまたはFATF勧告16）が求める情報を含める必要があり、送信した側について確認されます。フィールドが不足している場合は、`travel_rule_details.originator_data`または`travel_rule_details.beneficiary_data`の下で400が返されます。例：「EU TFR requires the originator name.」",
                    "required": [
                      "status"
                    ],
                    "properties": {
                      "status": {
                        "type": "string",
                        "description": "travel_rule_detailsを送信する場合は必須です。トラベルルールの送金ステータスのいずれか（例: AWAITING_COUNTERPARTY、COMPLETED、NOT_APPLICABLE）を指定します。小文字およびcamelCaseの表記、ならびに従来の値UNKNOWN、COMPLIANT、PENDING_ACTION、PENDING_COUNTERPARTY、FAILED、EXEMPTも受け付けられ、対応する値にマッピングされます。それ以外の値を指定すると400が返されます。"
                      },
                      "protocol": {
                        "type": "string"
                      },
                      "required": {
                        "type": "boolean"
                      },
                      "obligations_count": {
                        "type": "integer"
                      },
                      "originator_data": {
                        "type": "object",
                        "description": "送金人当事者です。フラットなフィールド、またはIVMS 101形式の1人の人物として指定します。承認済みのKYC認証を持つユーザーの場合、Diditは認証が保持するフィールドを認証済みの値で置き換えます（`metadata.originator_provenance`を参照）。オブジェクトである必要があり、それ以外は`400`になります。メモを使用するネットワークでは、`memo`キーで送金人ウォレットのメモまたはタグを指定します。"
                      },
                      "beneficiary_data": {
                        "type": "object",
                        "description": "受取人の当事者情報。フラットなフィールド、またはIVMS 101の人物1件として指定します。オブジェクトである必要があり、それ以外の場合は`400`になります。送金をルーティングするため、Diditは`wallet_address`（空の場合は`counterparty.payment_method.account_id`から補完）、`chain`（`transaction_details.crypto_params.crypto_chain`から補完、または`currency`がサポート対象のチェーンを示す場合はそこから補完）、`name`（`counterparty.full_name`にフォールバック）、`travel_address`、`counterparty_vasp_name`、`counterparty_vasp_lei`、`counterparty_vasp_email`を読み取ります。メモ方式のネットワークでは、`memo`で受取人ウォレットのメモまたはタグを指定します。`wallet_address`と`memo`は取引相手の支払い方法より優先されます。"
                      },
                      "metadata": {
                        "type": "object"
                      },
                      "utxo": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/TravelRuleUtxo"
                          }
                        ],
                        "description": "任意。UTXOチェーン（BTC、LTC、BCH、DOGE）のみ。取引の入力と出力です。送金人ウォレットと受取人の出力を宣言しない場合、Diditはこれらから推定します。"
                      },
                      "originator": {
                        "type": "object",
                        "description": "IVMS 101の送金人ブロックです。`originatorPersons`（`naturalPerson`または`legalPerson`を1つ。法人の場合、当事者は企業になります）と`accountNumber`（ウォレットアドレス）で構成されます。`originator_data`オブジェクトが空の場合に、その値として使用されます。形式が不正なブロックには、そのパスをキーとした400が返されます（例: `originator.originatorPersons`）。"
                      },
                      "beneficiary": {
                        "type": "object",
                        "description": "IVMS 101の受取人ブロックです。`beneficiaryPersons`（`naturalPerson`または`legalPerson`を1つ。法人の場合、当事者は企業になります）と`accountNumber`（ウォレットアドレス）で構成されます。`beneficiary_data`オブジェクトが空の場合に、その値として使用されます。形式が不正なブロックには、そのパスをキーとした400が返されます（例: `beneficiary.beneficiaryPersons`）。"
                      },
                      "ivms101": {
                        "type": "object",
                        "description": "`originator`ブロックと`beneficiary`ブロックを1つのIVMS 101オブジェクトにまとめたものです（`IVMS101`も受け付けます）。トップレベルのブロックがラッパー内のブロックより優先されます。"
                      }
                    }
                  },
                  "network_snapshot": {
                    "type": "object",
                    "description": "事前に計算されたネットワークグラフのスナップショット。",
                    "properties": {
                      "nodes": {
                        "type": "array",
                        "items": {
                          "type": "object"
                        }
                      },
                      "edges": {
                        "type": "array",
                        "items": {
                          "type": "object"
                        }
                      },
                      "metrics": {
                        "type": "object"
                      }
                    }
                  },
                  "include_crypto_screening": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "暗号資産のブロックチェーン分析スクリーニングに対する取引ごとの上書き設定です。`true`の場合、アプリケーションのデフォルトに関係なく暗号資産スクリーニングが実行されます。`false`の場合、アプリケーションの設定で有効になっていても暗号資産スクリーニングはスキップされます。省略した場合または`null`の場合は、Consoleで設定したアプリケーションレベルのデフォルトが使用されます。暗号資産スクリーニングには、`transaction_details.direction`、`currency_kind: \"crypto\"`、チェーン/通貨、および方向に応じて選択されるウォレットアドレスが必要です。入金の送金前スクリーニングでは`counterparty.payment_method.account_id`、入金のトランザクションハッシュによるスクリーニングでは`subject.payment_method.account_id`、出金のスクリーニングでは`counterparty.payment_method.account_id`が使用されます。`transaction_details.payment_reference_id`にブロックチェーンのトランザクションハッシュが含まれている場合、Diditは取引スクリーニングを実行し、利用可能な場合は取引サマリーのエンリッチメント情報を返します。"
                  }
                },
                "required": [
                  "transaction_id",
                  "transaction_category",
                  "transaction_details",
                  "subject"
                ]
              },
              "examples": {
                "Minimal fiat withdrawal": {
                  "summary": "法定通貨の送金(アウトバウンド)で受け付けられる最小限のペイロード",
                  "value": {
                    "transaction_id": "your-txn-2026-05-17-001",
                    "transaction_category": "finance",
                    "transaction_details": {
                      "direction": "outbound",
                      "amount": 1500,
                      "currency": "EUR",
                      "action_type": "withdrawal"
                    },
                    "subject": {
                      "entity_type": "individual",
                      "vendor_data": "user-12345",
                      "full_name": "Maria Garcia"
                    }
                  }
                },
                "Crypto outbound with screening": {
                  "summary": "アンホステッドウォレットへの外部への暗号資産出金（オプトインのスクリーニング）",
                  "value": {
                    "transaction_id": "your-txn-2026-05-17-002",
                    "transaction_category": "finance",
                    "include_crypto_screening": true,
                    "transaction_details": {
                      "direction": "outbound",
                      "amount": 0.5,
                      "currency": "BTC",
                      "currency_kind": "crypto",
                      "amount_in_default_currency": 32500,
                      "default_currency": "USD",
                      "action_type": "withdrawal"
                    },
                    "subject": {
                      "entity_type": "individual",
                      "vendor_data": "user-12345",
                      "full_name": "Maria Garcia",
                      "payment_method": {
                        "method_type": "crypto_wallet",
                        "account_id": "bc1qexampleexchangewalletaddressxyz",
                        "issuing_country": "ESP"
                      }
                    },
                    "counterparty": {
                      "entity_type": "individual",
                      "payment_method": {
                        "method_type": "unhosted_wallet",
                        "account_id": "bc1qexampleexternalwalletaddressabc"
                      }
                    }
                  }
                },
                "Travel Rule transfer": {
                  "summary": "トラベルルールの送金人・受取人データを含む、外部への暗号資産送金",
                  "value": {
                    "transaction_id": "your-txn-2026-05-17-003",
                    "transaction_category": "travel_rule",
                    "transaction_details": {
                      "direction": "outbound",
                      "amount": 25000,
                      "currency": "USDT",
                      "currency_kind": "crypto",
                      "action_type": "transfer"
                    },
                    "subject": {
                      "entity_type": "individual",
                      "vendor_data": "user-12345",
                      "full_name": "Maria Garcia",
                      "date_of_birth": "1992-03-14",
                      "address": {
                        "country": "ESP",
                        "town": "Madrid",
                        "street": "Calle Mayor 1",
                        "post_code": "28013"
                      }
                    },
                    "counterparty": {
                      "entity_type": "individual",
                      "full_name": "John Beneficiary",
                      "institution_details": {
                        "name": "Beneficiary VASP, Inc.",
                        "code": "BVASP-US"
                      }
                    },
                    "travel_rule_details": {
                      "status": "AWAITING_COUNTERPARTY",
                      "protocol": "IVMS101",
                      "required": true,
                      "originator_data": {
                        "name": "Maria Garcia"
                      },
                      "beneficiary_data": {
                        "name": "John Beneficiary"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "取引が送信され、モニタリングされています。本文は取引の完全な詳細（`GET /v3/transactions/{transaction_id}/`と同じ形式）で、すでに適用されたルールの結果を反映しています。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetail"
                },
                "examples": {
                  "Approved with no rule hits": {
                    "value": {
                      "uuid": "abcdef12-3456-4890-abcd-ef1234567890",
                      "environment": "live",
                      "transaction_number": 4123,
                      "txn_id": "your-txn-2026-05-17-001",
                      "txn_date": "2026-05-17T08:42:00Z",
                      "zone_id": "Europe/Madrid",
                      "transaction_type": "finance",
                      "action_type": "withdrawal",
                      "direction": "OUTBOUND",
                      "status": "APPROVED",
                      "source": "LIVE",
                      "amount": "1500",
                      "currency": "EUR",
                      "currency_type": "fiat",
                      "amount_in_default_currency": "1620.45",
                      "default_currency_code": "USD",
                      "preferred_currency_amount": "1620.45",
                      "preferred_currency_code": "USD",
                      "payment_details": "Withdrawal to crypto wallet",
                      "payment_txn_id": null,
                      "score": 0,
                      "severity": null,
                      "decision_reason_code": null,
                      "decision_reason_label": null,
                      "vendor_data": "user-12345",
                      "metadata": {
                        "subject": {
                          "entity_type": "individual",
                          "vendor_data": "user-12345",
                          "full_name": "Maria Garcia",
                          "address": {},
                          "institution_details": {},
                          "device_context": {}
                        },
                        "counterparty": {}
                      },
                      "props": {},
                      "tags": [],
                      "parties": [
                        {
                          "uuid": "b1111111-2222-4333-8444-555555555555",
                          "role": "APPLICANT",
                          "entity_type": "individual",
                          "kind": "USER",
                          "vendor_data": "user-12345",
                          "full_name": "Maria Garcia",
                          "first_name": null,
                          "last_name": null,
                          "country_code": null,
                          "dob": null,
                          "address": {},
                          "institution_info": {},
                          "device": {},
                          "external_party_snapshot": null
                        }
                      ],
                      "payment_methods": [],
                      "documents": [],
                      "activities": [
                        {
                          "uuid": "d4e5f6a7-8901-4bcd-9ef0-123456789abc",
                          "activity_type": "TRANSACTION_CREATED",
                          "source": "TRANSACTION",
                          "status": "APPROVED",
                          "title": "withdrawal",
                          "description": "Transaction recorded.",
                          "metadata": {},
                          "occurred_at": "2026-05-17T08:42:11Z"
                        }
                      ],
                      "alerts": [],
                      "rule_runs": [],
                      "provider_results": [],
                      "travel_rule": null,
                      "network_snapshot": null,
                      "remediation": null,
                      "action_required": null,
                      "cost_breakdown": null
                    }
                  },
                  "Flagged for review": {
                    "value": {
                      "uuid": "abcdef12-3456-4890-abcd-ef1234567891",
                      "environment": "live",
                      "transaction_number": 4124,
                      "txn_id": "your-txn-2026-05-17-002",
                      "txn_date": "2026-05-17T08:42:00Z",
                      "zone_id": "Europe/Madrid",
                      "transaction_type": "finance",
                      "action_type": "withdrawal",
                      "direction": "OUTBOUND",
                      "status": "IN_REVIEW",
                      "source": "LIVE",
                      "amount": "0.5",
                      "currency": "BTC",
                      "currency_type": "crypto",
                      "amount_in_default_currency": "32500",
                      "default_currency_code": "USD",
                      "preferred_currency_amount": "32500",
                      "preferred_currency_code": "USD",
                      "payment_details": "Withdrawal to crypto wallet",
                      "payment_txn_id": null,
                      "score": 78,
                      "severity": "HIGH",
                      "decision_reason_code": "WALLET_HIGH_RISK",
                      "decision_reason_label": "Destination wallet flagged as high risk",
                      "vendor_data": "user-12345",
                      "metadata": {
                        "subject": {
                          "entity_type": "individual",
                          "vendor_data": "user-12345",
                          "full_name": "Maria Garcia",
                          "address": {},
                          "institution_details": {},
                          "device_context": {}
                        },
                        "counterparty": {}
                      },
                      "props": {
                        "order_id": "ord-9988"
                      },
                      "tags": [],
                      "parties": [
                        {
                          "uuid": "b1111111-2222-4333-8444-555555555555",
                          "role": "APPLICANT",
                          "entity_type": "individual",
                          "kind": "USER",
                          "vendor_data": "user-12345",
                          "full_name": "Maria Garcia",
                          "first_name": null,
                          "last_name": null,
                          "country_code": null,
                          "dob": null,
                          "address": {},
                          "institution_info": {},
                          "device": {},
                          "external_party_snapshot": null
                        }
                      ],
                      "payment_methods": [],
                      "documents": [],
                      "activities": [],
                      "alerts": [
                        {
                          "uuid": "a7b8c9d0-1234-4abc-9def-567890abcdef",
                          "title": "Destination wallet flagged as high risk",
                          "description": "Provider risk score exceeded the configured threshold.",
                          "severity": "HIGH",
                          "status": "OPEN",
                          "source": "RULE",
                          "metadata": {},
                          "created_at": "2026-05-17T08:42:12Z",
                          "due_at": null
                        }
                      ],
                      "rule_runs": [
                        {
                          "uuid": "e5f6a7b8-9012-4cde-af01-23456789abcd",
                          "rule": "f6a7b8c9-0123-4def-b012-3456789abcde",
                          "rule_title": "High-risk wallet screening",
                          "rule_description": null,
                          "rule_category": "crypto",
                          "matched": true,
                          "is_test": false,
                          "mode": "ACTIVE",
                          "severity": "HIGH",
                          "score_delta": 78,
                          "status_target": "IN_REVIEW",
                          "action_summary": "score +78; change_status:IN_REVIEW",
                          "metadata": {},
                          "created_at": "2026-05-17T08:42:12Z"
                        }
                      ],
                      "provider_results": [],
                      "travel_rule": null,
                      "network_snapshot": null,
                      "remediation": null,
                      "action_required": null,
                      "cost_breakdown": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました（必須フィールドの欠落、`transaction_id`の重複、不明なenum値、無効な通貨など）。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing required field": {
                    "value": {
                      "transaction_details": {
                        "amount": [
                          "This field is required."
                        ]
                      }
                    }
                  },
                  "Duplicate transaction_id": {
                    "value": {
                      "transaction_id": [
                        "A transaction with this transaction_id already exists."
                      ]
                    }
                  },
                  "Invalid category": {
                    "value": {
                      "non_field_errors": [
                        "Unsupported transaction category."
                      ]
                    }
                  },
                  "Missing subject identity": {
                    "value": {
                      "subject": [
                        "subject.vendor_data and subject.full_name are required."
                      ]
                    }
                  },
                  "Blocklisted participant": {
                    "value": {
                      "vendor_data": [
                        "The individual 'user-12345' is in the blocklist and cannot participate in transactions."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの取引を送信する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "このリクエストの処理中に、同じ`transaction_id`を持つ別のリクエストが取引を作成したため、同時に送信された2件のうち1件のみが成功します。再送信せずに、既存の取引を参照してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Concurrent duplicate": {
                    "value": {
                      "detail": "A transaction with this transaction_id already exists."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "create",
          "auth": "api_key",
          "server": true
        }
      }
    },
    "/v3/transactions/{transaction_id}/": {
      "get": {
        "summary": "取引を取得",
        "description": "1件の取引の完全なモニタリング記録を取得します。当事者、スコア/重大度、ルールの実行結果、アラート、トラベルルールの結果、是正セッションが含まれます。",
        "operationId": "getTransaction",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "Diditの安定した取引UUIDです（作成または一覧取得で返される`uuid`であり、`txn_id`**ではありません**）。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "abcdef12-3456-7890-abcd-ef1234567890"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.retrieve(\n    \"abcdef12-3456-7890-abcd-ef1234567890\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.retrieve(\"abcdef12-3456-7890-abcd-ef1234567890\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Retrieve(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().retrieve(\"abcdef12-3456-7890-abcd-ef1234567890\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->retrieve('abcdef12-3456-7890-abcd-ef1234567890');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.retrieve(\"abcdef12-3456-7890-abcd-ef1234567890\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.RetrieveAsync(\"abcdef12-3456-7890-abcd-ef1234567890\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "取引の完全な詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetail"
                },
                "examples": {
                  "In review with an alert": {
                    "value": {
                      "uuid": "abcdef12-3456-4890-abcd-ef1234567890",
                      "environment": "live",
                      "transaction_number": 4123,
                      "txn_id": "your-txn-2026-05-17-001",
                      "txn_date": "2026-05-17T08:42:00Z",
                      "zone_id": "Europe/Madrid",
                      "transaction_type": "finance",
                      "action_type": "withdrawal",
                      "direction": "OUTBOUND",
                      "status": "IN_REVIEW",
                      "source": "LIVE",
                      "amount": "1500",
                      "currency": "EUR",
                      "currency_type": "fiat",
                      "amount_in_default_currency": "1620.45",
                      "default_currency_code": "USD",
                      "preferred_currency_amount": "1620.45",
                      "preferred_currency_code": "USD",
                      "payment_details": "Withdrawal to crypto wallet",
                      "payment_txn_id": null,
                      "score": 78,
                      "severity": "HIGH",
                      "decision_reason_code": "WALLET_HIGH_RISK",
                      "decision_reason_label": "Destination wallet flagged as high risk",
                      "vendor_data": "user-12345",
                      "metadata": {
                        "subject": {
                          "entity_type": "individual",
                          "vendor_data": "user-12345",
                          "full_name": "Maria Garcia",
                          "address": {},
                          "institution_details": {},
                          "device_context": {}
                        },
                        "counterparty": {}
                      },
                      "props": {
                        "order_id": "ord-9988"
                      },
                      "tags": [],
                      "parties": [
                        {
                          "uuid": "b1111111-2222-4333-8444-555555555555",
                          "role": "APPLICANT",
                          "entity_type": "individual",
                          "kind": "USER",
                          "vendor_data": "user-12345",
                          "full_name": "Maria Garcia",
                          "first_name": null,
                          "last_name": null,
                          "country_code": null,
                          "dob": null,
                          "address": {},
                          "institution_info": {},
                          "device": {},
                          "external_party_snapshot": null
                        }
                      ],
                      "payment_methods": [],
                      "documents": [],
                      "activities": [],
                      "alerts": [
                        {
                          "uuid": "a7b8c9d0-1234-4abc-9def-567890abcdef",
                          "title": "Destination wallet flagged as high risk",
                          "description": "Provider risk score exceeded the configured threshold.",
                          "severity": "HIGH",
                          "status": "OPEN",
                          "source": "RULE",
                          "metadata": {},
                          "created_at": "2026-05-17T08:42:12Z",
                          "due_at": null
                        }
                      ],
                      "rule_runs": [],
                      "provider_results": [],
                      "travel_rule": null,
                      "network_snapshot": null,
                      "remediation": null,
                      "action_required": null,
                      "cost_breakdown": null
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの取引を読み取る権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの取引がアプリケーションに存在しません(削除済み、未作成、別のアプリケーションに属している、またはパスセグメントが有効なUUIDではない)。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/transactions/sdk-token/": {
      "post": {
        "summary": "SDK取引トークンの発行",
        "description": "アプリがDidit SDKに渡す短期間有効なスコープ付きトークンを発行し、SDKがエンドユーザーのデバイスから`POST /v1/transactions/`経由で取引を直接送信できるようにします。トークンは1つの`vendor_data`（お客様のユーザーID）に紐づけられます。このトークンで送信されたすべての取引は、その紐づけに基づいてサーバー側でサブジェクトの本人性が強制されるため、改ざんされたクライアントが別のユーザーになりすまして送信することはできません。トークンはバックエンドから発行してください。APIキー自体を絶対にアプリに含めないでください。camelCaseのエイリアス（`vendorData`、`ttlSeconds`、`maxUses`）も使用できます。",
        "operationId": "createTransactionSdkToken",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "create_sdk_token",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "vendor_data": {
                    "type": "string",
                    "description": "このトークンの対象となるエンドユーザーに対するお客様の内部識別子です。このトークンで送信されるすべての取引の主体として強制的に適用されます。",
                    "example": "user-042"
                  },
                  "ttl_seconds": {
                    "type": "integer",
                    "default": 900,
                    "maximum": 86400,
                    "description": "トークンの有効期間(秒)。デフォルトは900(15分)、最大は86400(24時間)です。"
                  },
                  "max_uses": {
                    "type": "integer",
                    "nullable": true,
                    "description": "このトークンで許可される送信成功の最大回数です。省略するかnullにすると、TTL内で無制限に使用できます。"
                  }
                },
                "required": [
                  "vendor_data"
                ]
              },
              "example": {
                "vendor_data": "user-042",
                "ttl_seconds": 900,
                "max_uses": 3
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/transactions/sdk-token/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"vendor_data\": \"user-042\", \"ttl_seconds\": 900, \"max_uses\": 3}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.create_sdk_token(\n    vendor_data=\"user-042\",\n    ttl_seconds=900,\n    max_uses=3,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.createSdkToken({\n  vendor_data: \"user-042\",\n  ttl_seconds: 900,\n  max_uses: 3,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.CreateSDKToken(ctx, didit.TransactionsCreateSDKTokenParams{\n\tVendorData: \"user-042\",\n\tTTLSeconds: didit.Int(900),\n\tMaxUses:    didit.Int(3),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TransactionsCreateSdkTokenParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().createSdkToken(TransactionsCreateSdkTokenParams.builder()\n        .vendorData(\"user-042\")\n        .ttlSeconds(900L)\n        .maxUses(3L)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->createSdkToken([\n    'vendor_data' => 'user-042',\n    'ttl_seconds' => 900,\n    'max_uses' => 3,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.create_sdk_token(\n  vendor_data: \"user-042\",\n  ttl_seconds: 900,\n  max_uses: 3\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.CreateSdkTokenAsync(new TransactionsCreateSdkTokenParams\n{\n    VendorData = \"user-042\",\n    TtlSeconds = 900,\n    MaxUses = 3,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "発行されたトークンです。`sdk_token`をアプリに渡してください。このトークンは`expires_at`まで、`X-Transaction-Token`ヘッダーを介してデバイス向けの`/v1/transactions/`エンドポイントを認証します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "sdk_token": {
                      "type": "string",
                      "description": "SDKに渡すスコープ付きの取引トークンです。"
                    },
                    "expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "トークンが受け付けられなくなる日時。"
                    }
                  }
                },
                "example": {
                  "sdk_token": "q7Zt...urlsafe",
                  "expires_at": "2026-07-07T12:15:00Z"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました。`vendor_data`がない、または`ttl_seconds`が許容範囲外です。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing vendor_data": {
                    "value": {
                      "vendor_data": [
                        "This field is required."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid API Key": {
                    "value": {
                      "detail": "Invalid API Key."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/transactions/": {
      "post": {
        "summary": "SDKから取引を送信する",
        "description": "DiditのSDKがエンドユーザーのデバイスから取引を直接送信するために呼び出す、デバイス向けのエンドポイントです。認証にはAPIキーではなく、`POST /v3/transactions/sdk-token/`で取得したスコープ付きトークンを`X-Transaction-Token`ヘッダーで送信します。このエンドポイントはCORSに対応しているため、ブラウザからクロスオリジンで呼び出せます。ペイロードには以下に示すcamelCaseのワイヤーエイリアスを使用します（SDKの`submitTransaction`メソッドが自動で構築します）。サーバー側では次の3点が保証されます。アプリケーションは常にトークンから取得されます。対象者のID（`externalUserId`）は常にトークンの`vendor_data`に基づいて強制されるため、なりすましによるペイロードの値は無視されます。デバイスインテリジェンス（SDKのデバイスフィンガープリントと、サーバー側で導出したIPおよびユーザーエージェント）は対象者に自動的に付与されます。",
        "operationId": "submitTransactionFromSdk",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "submit_from_device",
          "auth": "device_token",
          "server": false
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "TransactionTokenAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "txnId": {
                    "type": "string",
                    "description": "この取引に対するお客様独自の識別子です（`transaction_id`に対応、最大128文字）。",
                    "example": "wd-2026-07-07-0042"
                  },
                  "txnDate": {
                    "type": "string",
                    "format": "date-time",
                    "description": "取引が発生した日時（`transaction_at`に対応）。省略した場合は現在日時になります。"
                  },
                  "zoneId": {
                    "type": "string",
                    "description": "IANAタイムゾーン識別子（`time_zone`に対応）。例: `Europe/Madrid`。"
                  },
                  "type": {
                    "type": "string",
                    "description": "取引カテゴリー（`transaction_category`に対応）。例: `finance`、`kyc`、`travelRule`、`userPlatformEvent`、`gamblingBet`。",
                    "example": "travelRule"
                  },
                  "info": {
                    "type": "object",
                    "description": "取引の主要な金融情報（`transaction_details`に対応）。",
                    "required": [
                      "direction",
                      "amount",
                      "currency"
                    ],
                    "properties": {
                      "direction": {
                        "type": "string",
                        "description": "対象者から見た方向です。大文字と小文字は区別されず、`in`/`out`もエイリアスとして受け付けます。大文字（`INBOUND`/`OUTBOUND`）で返されます。",
                        "example": "out"
                      },
                      "amount": {
                        "type": "number",
                        "description": "取引金額（小数点以下最大18桁）。10進数の文字列も受け付けられ、有効桁数約15桁を超える精度を保持する唯一の方法です。JSONの数値はまずバイナリ浮動小数点数として解析されるため、`0.123456789012345678`は`0.12345678901234568`として保存されます。",
                        "example": 0.25
                      },
                      "currency": {
                        "type": "string",
                        "description": "通貨コード。ISO 4217のアルファベットコード（例：`EUR`、`USD`、`NGN`）と暗号資産シンボル（例：`BTC`）を受け付けます。現在流通しているコードを推奨します。受け付けるすべてのコードに為替レートがあるわけではありません。コードに利用可能な為替レートがない場合（例：ISOの会計単位`XSU`や、Diditが価格を算出していない暗号資産シンボル）、自動換算は失敗し、リクエストで換算済みの`amountInDefaultCurrency`を指定していない限り、`preferred_currency_amount`はnullで返されます。",
                        "example": "ETH"
                      },
                      "currencyType": {
                        "type": "string",
                        "description": "通貨が`fiat`と`crypto`のどちらか(`currency_kind`に対応)。"
                      },
                      "amountInDefaultCurrency": {
                        "type": "number",
                        "nullable": true,
                        "description": "デフォルト通貨に事前換算した金額(`amount_in_default_currency`に対応)。省略した場合は、自動で為替換算が試行されます。"
                      },
                      "defaultCurrencyCode": {
                        "type": "string",
                        "description": "換算額のデフォルト通貨コードです（`default_currency`に対応）。現在流通している任意のISO 4217コードを指定できます。"
                      },
                      "paymentDetails": {
                        "type": "string",
                        "nullable": true,
                        "description": "自由記述の支払い参照情報またはメモ（`payment_details`に対応）。"
                      },
                      "paymentTxnId": {
                        "type": "string",
                        "nullable": true,
                        "description": "外部の決済参照番号です（`payment_reference_id`に対応）。暗号資産取引の場合はオンチェーンの取引ハッシュです。"
                      },
                      "type": {
                        "type": "string",
                        "nullable": true,
                        "description": "取引のサブタイプ（`action_type`に対応）。例: `deposit`、`withdrawal`、`transfer`。"
                      },
                      "cryptoParams": {
                        "type": "object",
                        "description": "暗号資産固有のパラメーター（例: `{\"crypto_chain\": \"ETH\"}`）。"
                      }
                    }
                  },
                  "subject": {
                    "type": "object",
                    "description": "取引の対象者（申請者）。ここでは`externalUserId`は無視されます。対象者の身元は常にトークンの`vendor_data`に基づいて強制されます。",
                    "required": [
                      "fullName"
                    ],
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "エンティティの種類（`entity_type`に対応）：`individual`（デフォルト）または`company`。"
                      },
                      "externalUserId": {
                        "type": "string",
                        "description": "subjectでは無視されます。トークンの`vendor_data`に基づき、サーバー側で強制的に適用されます。"
                      },
                      "fullName": {
                        "type": "string",
                        "example": "Jane Doe"
                      },
                      "firstName": {
                        "type": "string"
                      },
                      "lastName": {
                        "type": "string"
                      },
                      "dob": {
                        "type": "string",
                        "format": "date",
                        "description": "生年月日（YYYY-MM-DD、`date_of_birth`に対応）。"
                      },
                      "address": {
                        "type": "object",
                        "description": "`country`（ISO 3166-1 alpha-3）、`town`、`state`、`street`、`post_code`を含む住所オブジェクト。"
                      },
                      "institutionInfo": {
                        "type": "object",
                        "description": "機関である参加者の機関の詳細（`institution_details`に対応）。"
                      },
                      "device": {
                        "type": "object",
                        "description": "任意で指定する明示的なデバイスコンテキストです。自動的に取得されるデバイスインテリジェンスと統合され、競合した場合はサーバー側で導出されたフィールドが優先されます。"
                      },
                      "paymentMethod": {
                        "type": "object",
                        "description": "対象者が使用した支払い方法（`payment_method`に対応）。",
                        "properties": {
                          "type": {
                            "type": "string",
                            "description": "支払い方法の種類（`method_type`に対応）。例：`bank_card`、`bank_account`、`crypto_wallet`、`ewallet`、`unhosted_wallet`、`other`。"
                          },
                          "accountId": {
                            "type": "string",
                            "description": "口座識別子（`account_id`に対応）：IBAN、カードフィンガープリント、またはウォレットアドレス。"
                          },
                          "issuingCountry": {
                            "type": "string",
                            "description": "発行者の国を示すISO 3166-1 alpha-3コード(`issuing_country`に対応)。"
                          }
                        }
                      }
                    }
                  },
                  "counterparty": {
                    "type": "object",
                    "description": "取引の取引相手(任意)。`subject`と同じ形式です。ここでは`externalUserId`が意味を持ちます。",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "エンティティの種類（`entity_type`に対応）：`individual`または`company`。"
                      },
                      "externalUserId": {
                        "type": "string",
                        "description": "取引相手に対するお客様の内部識別子です（`vendor_data`に対応します）。"
                      },
                      "fullName": {
                        "type": "string"
                      },
                      "firstName": {
                        "type": "string"
                      },
                      "lastName": {
                        "type": "string"
                      },
                      "dob": {
                        "type": "string",
                        "format": "date"
                      },
                      "address": {
                        "type": "object"
                      },
                      "institutionInfo": {
                        "type": "object"
                      },
                      "device": {
                        "type": "object"
                      },
                      "paymentMethod": {
                        "type": "object",
                        "description": "取引相手が使用した支払い方法（`payment_method`に対応）。travelRule取引では、`type: \"unhosted_wallet\"`を指定すると取引相手のウォレットがセルフホスト型として申告されます。この場合、送金は取引相手VASPへのルーティングをスキップして直接`UNCONFIRMED_OWNERSHIP`で作成され、（`auto_wallet_verification`が有効な場合）ウォレット所有権ウィジェットのセッションが自動発行され、SDKが起動できるよう`action_required`で返されます。",
                        "properties": {
                          "type": {
                            "type": "string",
                            "description": "支払い方法の種類（`method_type`に対応）。例：`bank_card`、`bank_account`、`crypto_wallet`、`ewallet`、`unhosted_wallet`、`other`。トラベルルールのためにセルフホスト型ウォレットを申告するには`unhosted_wallet`を使用します。"
                          },
                          "accountId": {
                            "type": "string",
                            "description": "口座識別子（`account_id`に対応）：IBAN、カードフィンガープリント、またはウォレットアドレス。"
                          },
                          "issuingCountry": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "props": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "カスタムのキーと値のペア（`custom_properties`に対応）。各キーはルール条件で`custom_values.<key>`として参照できます。"
                  },
                  "travelRule": {
                    "type": "object",
                    "description": "トラベルルールの詳細（`travel_rule_details`に対応）。アプリケーションでトラベルルールが有効な場合、Diditは送信された`status`を無視し、交換を自ら進めます。",
                    "required": [
                      "status"
                    ],
                    "properties": {
                      "status": {
                        "type": "string"
                      },
                      "protocol": {
                        "type": "string"
                      },
                      "required": {
                        "type": "boolean"
                      },
                      "obligationsCount": {
                        "type": "integer"
                      },
                      "originatorData": {
                        "type": "object"
                      },
                      "beneficiaryData": {
                        "type": "object"
                      },
                      "metadata": {
                        "type": "object"
                      }
                    }
                  },
                  "includeCryptoScreening": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "暗号資産のブロックチェーン分析スクリーニングに対する取引ごとの上書き設定です（`include_crypto_screening`に対応します）。"
                  },
                  "fingerprint_v2": {
                    "type": "object",
                    "description": "`didit-fp-v2`デバイスフィンガープリントのペイロードです。SDKが自動的に挿入します。ワイヤーAPIを直接呼び出す場合にのみ関係します。"
                  }
                },
                "required": [
                  "txnId",
                  "type",
                  "info",
                  "subject"
                ]
              },
              "example": {
                "txnId": "wd-2026-07-07-0042",
                "type": "travelRule",
                "info": {
                  "direction": "out",
                  "amount": "0.25",
                  "currency": "ETH",
                  "currencyType": "crypto",
                  "cryptoParams": {
                    "crypto_chain": "ETH"
                  }
                },
                "subject": {
                  "fullName": "Jane Doe"
                },
                "counterparty": {
                  "fullName": "Ana Diaz",
                  "paymentMethod": {
                    "type": "unhosted_wallet",
                    "accountId": "0xBeneficiaryWallet01"
                  }
                },
                "travelRule": {
                  "status": "AWAITING_COUNTERPARTY",
                  "beneficiaryData": {
                    "wallet_address": "0xBeneficiaryWallet01",
                    "name": "Ana Diaz"
                  }
                },
                "includeCryptoScreening": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v1/transactions/ \\\n  -H 'X-Transaction-Token: SDK_TOKEN' -H 'Content-Type: application/json' \\\n  -d '{\"txnId\": \"wd-2026-07-07-0042\", \"type\": \"travelRule\", \"info\": {\"direction\": \"out\", \"amount\": \"0.25\", \"currency\": \"ETH\", \"currencyType\": \"crypto\"}, \"subject\": {\"fullName\": \"Jane Doe\"}, \"counterparty\": {\"fullName\": \"Ana Diaz\", \"paymentMethod\": {\"type\": \"unhosted_wallet\", \"accountId\": \"0xBeneficiaryWallet01\"}}, \"travelRule\": {\"status\": \"AWAITING_COUNTERPARTY\", \"beneficiaryData\": {\"wallet_address\": \"0xBeneficiaryWallet01\", \"name\": \"Ana Diaz\"}}, \"includeCryptoScreening\": true}'"
          },
          {
            "lang": "javascript",
            "label": "Web SDK",
            "source": "import { DiditSdk } from '@didit-protocol/sdk-web';\n\nconst result = await DiditSdk.shared.submitTransaction({\n  transactionToken: sdkToken,\n  transaction: {\n    txnId: 'wd-2026-07-07-0042',\n    category: 'travelRule',\n    details: { direction: 'out', amount: '0.25', currency: 'ETH', currencyType: 'crypto' },\n    subject: { fullName: 'Jane Doe' },\n    counterparty: { fullName: 'Ana Diaz', paymentMethod: { type: 'unhosted_wallet', accountId: '0xBeneficiaryWallet01' } },\n    travelRule: { status: 'AWAITING_COUNTERPARTY', beneficiaryData: { wallet_address: '0xBeneficiaryWallet01', name: 'Ana Diaz' } },\n    includeCryptoScreening: true\n  },\n  onActionCompleted: (refreshed) => console.log(refreshed.status)\n});"
          }
        ],
        "responses": {
          "201": {
            "description": "取引が送信され、モニタリングされています。詳細の形式は`GET /v3/transactions/{transaction_id}/`と同じで、エンドユーザーがフォローアップのアクションを完了する必要がある場合は`action_required`ブロックを含みます（SDKはデフォルトでこれを自動的に起動します）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetail"
                },
                "examples": {
                  "Wallet ownership required": {
                    "value": {
                      "uuid": "22222222-3333-4444-5555-666666666666",
                      "txn_id": "wd-2026-07-07-0042",
                      "transaction_type": "travelRule",
                      "direction": "OUTBOUND",
                      "status": "APPROVED",
                      "amount": "0.25",
                      "currency": "ETH",
                      "travel_rule": {
                        "uuid": "33333333-4444-5555-6666-777777777777",
                        "status": "UNCONFIRMED_OWNERSHIP",
                        "required": true
                      },
                      "action_required": {
                        "type": "wallet_ownership",
                        "url": "https://verify.didit.me/wallet-ownership/3s9x...urlsafe",
                        "widget_session_id": "77777777-8888-9999-aaaa-bbbbbbbbbbbb",
                        "expires_at": "2026-07-07T13:00:00Z"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました（必須フィールドの欠落、`txnId`の重複、不明なカテゴリー）。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing fields": {
                    "value": {
                      "transaction_details": {
                        "currency": [
                          "This field is required."
                        ]
                      }
                    }
                  },
                  "Duplicate txnId": {
                    "value": {
                      "transaction_id": [
                        "A transaction with this transaction_id already exists."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "取引トークンが拒否されました。トークンがない、不明、失効済み、`max_uses`を超過している、または期限切れのいずれかです。期限切れトークンのレスポンスでは、detailに必ず`expired`という語が含まれます。SDKはこれによって`expired_token`エラーと`invalid_token`エラーを区別します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "Invalid transaction token."
                    }
                  },
                  "Expired token": {
                    "value": {
                      "detail": "Transaction token expired."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "このリクエストの処理中に、同じ`txnId`を持つ別のリクエストが取引を作成したため、同時に送信された2件のうち1件のみが成功します。再送信せずに、既存の取引を参照してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Concurrent duplicate": {
                    "value": {
                      "detail": "A transaction with this transaction_id already exists."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/transactions/{transaction_id}/": {
      "get": {
        "summary": "SDKから取引を取得",
        "description": "送信時と同じ`X-Transaction-Token`で認証する、デバイス向けの読み取りエンドポイントです。SDKは、自動起動したアクションフローが完了した後、またはそのウィンドウが閉じられた後にこのエンドポイントをポーリングするため、最終状態が単一の通知に依存することはありません。送信時のレスポンスと同じ取引の詳細を返し、現在の`action_required`ブロックも含まれます（アクションが解決されると`null`になります）。",
        "operationId": "getTransactionFromSdk",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "retrieve_from_device",
          "auth": "device_token",
          "server": false
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "Diditの安定した取引UUIDです（送信レスポンスの`uuid`であり、`txnId`**ではありません**）。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "22222222-3333-4444-5555-666666666666"
          }
        ],
        "security": [
          {
            "TransactionTokenAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v1/transactions/22222222-3333-4444-5555-666666666666/' \\\n  -H 'X-Transaction-Token: SDK_TOKEN'"
          }
        ],
        "responses": {
          "200": {
            "description": "`action_required`を含む取引の詳細情報です（保留中のアクションが解決されると`null`になります）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetail"
                }
              }
            }
          },
          "401": {
            "description": "取引トークンが拒否されました。トークンがない、不明、失効済み、`max_uses`を超過している、または期限切れのいずれかです。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired token": {
                    "value": {
                      "detail": "Transaction token expired."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの取引がトークンのアプリケーションに存在しないか、パスセグメントが有効なUUIDではありません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/businesses/": {
      "get": {
        "summary": "企業一覧を取得",
        "description": "同じ`vendor_data`(自由形式の文字列で、UUIDではありません)を共有するKYBセッションからDiditがまとめた[企業](/entities/businesses)と、API経由で作成された企業の一覧を取得します。ページネーションに対応し、`last_session_at`の降順で並びます。このエンドポイントはフィルターや検索のパラメーターに対応していないため、ページを取得してクライアント側でフィルタリングしてください。",
        "operationId": "list_businesses",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "description": "ページサイズ。省略時は50です。強制される上限はありませんが、レイテンシーを抑えるためにページは小さく保ってください。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "description": "返す最初のレコードの0始まりのオフセットです。手動で計算するよりも、前のページの`next`URLをたどる方法を推奨します。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/businesses/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.businesses.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.businesses.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Businesses.ListAutoPaging(ctx, didit.BusinessesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.businesses().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->businesses->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.businesses.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Businesses.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ステータス、セッション数、機能別の内訳を含む、ページネーションされた企業一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "一致する行の数。100までは正確な値で、パフォーマンスのため100を超える場合は100が上限となります。最終ページの判定には使用せず、代わりに`next`が`null`であることを利用してください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/BusinessListItem"
                      }
                    }
                  }
                },
                "examples": {
                  "Example": {
                    "value": {
                      "count": 1,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "didit_internal_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
                          "vendor_data": "company-123",
                          "display_name": null,
                          "legal_name": "Acme Trading Ltd",
                          "registration_number": "12345678",
                          "country_code": "GB",
                          "effective_name": "Acme Trading Ltd",
                          "status": "ACTIVE",
                          "session_count": 2,
                          "approved_count": 1,
                          "declined_count": 0,
                          "in_review_count": 1,
                          "features": {
                            "KYB": "Approved"
                          },
                          "features_list": [
                            {
                              "feature": "KYB",
                              "status": "Approved"
                            }
                          ],
                          "last_session_at": "2026-03-15T10:30:00Z",
                          "last_activity_at": "2026-03-15T10:30:00Z",
                          "first_session_at": "2026-01-10T08:00:00Z",
                          "tags": [
                            {
                              "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                              "name": "VIP",
                              "color": "#2567FF"
                            }
                          ],
                          "created_at": "2026-01-10T08:00:00Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの企業を一覧表示する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/customization/": {
      "get": {
        "summary": "ブランディングのカスタマイズを取得",
        "description": "APIキーから特定されたアプリケーションのホワイトラベルのブランディングを返します。色、フォント、角の丸み、ロゴのURL、UI/UXオプションが含まれます。カスタムドメインとホワイトラベルメールの設定はBusiness Consoleでのみ管理され、このレスポンスには含まれません。",
        "operationId": "get_customization",
        "x-didit-sdk": {
          "resource": "customization",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Customization"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/customization/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.customization.retrieve()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.customization.retrieve();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Customization.Retrieve(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.customization().retrieve();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->customization->retrieve();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.customization.retrieve\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Customization.RetrieveAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "アプリケーションの現在のブランディングのカスタマイズ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandingCustomization"
                },
                "examples": {
                  "Default branding": {
                    "value": {
                      "color_primary": "#000000",
                      "color_secondary": "#9DA1A1",
                      "color_background": "#FFFFFF",
                      "color_panel": "#2567FF",
                      "color_panel_10": "#1A1A1A",
                      "color_on_panel_1": "#9DA1A1",
                      "color_on_panel_2": "#F4F4F6",
                      "color_on_background": "#000000",
                      "color_button_1": "#2567FF",
                      "color_button_2": "#F8F8F8",
                      "color_button_text_1": "#FFFFFF",
                      "color_button_text_2": "#000000",
                      "color_pill_text": "#111827",
                      "border_radius_panel": 10,
                      "border_radius_buttons": 12,
                      "font_family": "Inter",
                      "font_weight": "regular",
                      "font_url": "https://fonts.googleapis.com/css2?family=Inter",
                      "logo_square": null,
                      "logo_rectangular": null,
                      "logo_rectangular_dark": null,
                      "favicon": null,
                      "app_public_name": "Acme Verify",
                      "privacy_policy_url": "https://acme.com/privacy",
                      "skip_welcome_screen": false,
                      "disable_login_with_didit": false,
                      "hide_progress_bar": false,
                      "callback_seconds": 3
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "ブランディングのカスタマイズを更新",
        "description": "アプリケーションのホワイトラベルブランディングを部分更新します。色、フォント、角丸、UIオプションを変更するには`application/json`を、ロゴ画像をアップロードするには`multipart/form-data`を送信してください。指定したフィールドのみが変更されます。カスタムドメインとホワイトラベルメールはこのエンドポイントでは設定できません。これらはBusiness Consoleで設定してください。",
        "operationId": "update_customization",
        "x-didit-sdk": {
          "resource": "customization",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Customization"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BrandingCustomizationUpdate"
              },
              "examples": {
                "Update colors and font": {
                  "summary": "ブランドカラーとフォントを変更",
                  "value": {
                    "color_primary": "#123456",
                    "color_button_1": "#2567FF",
                    "font_family": "AR One Sans",
                    "border_radius_buttons": 16
                  }
                },
                "Update UI options": {
                  "summary": "公開名とフローのオプションを変更",
                  "value": {
                    "app_public_name": "Acme Verify",
                    "privacy_policy_url": "https://acme.com/privacy",
                    "skip_welcome_screen": true,
                    "hide_progress_bar": true,
                    "callback_seconds": 5
                  }
                },
                "Remove a logo": {
                  "summary": "現在の長方形ロゴを削除",
                  "value": {
                    "delete_logo_rectangular": true
                  }
                },
                "Remove the dark-mode logo": {
                  "summary": "現在のダークモード用ロゴを削除",
                  "value": {
                    "delete_logo_rectangular_dark": true
                  }
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "description": "multipart/form-dataはロゴ画像のアップロードにのみ使用してください。上記のブランディングフィールドも、同じリクエスト内でフォームフィールドとして送信できます。",
                "properties": {
                  "image_square": {
                    "type": "string",
                    "format": "binary",
                    "description": "正方形のロゴ(アスペクト比1:1)。PNG、JPGまたはWebP、長辺512px以上、最大**1 MB**。"
                  },
                  "image_rectangular": {
                    "type": "string",
                    "format": "binary",
                    "description": "横長のロゴ（縦横比2:1）。PNG、JPG、WebPのいずれかで、長辺512px以上、**1 MB**以下です。"
                  },
                  "image_rectangular_dark": {
                    "type": "string",
                    "format": "binary",
                    "description": "ダークモード用の横長のロゴ（縦横比2:1）で、暗い背景上に表示されます。PNG、JPG、WebPのいずれかで、長辺512px以上、**1 MB**以下です。`logo_rectangular_dark`として返されます。"
                  },
                  "image_favicon": {
                    "type": "string",
                    "format": "binary",
                    "description": "ファビコン画像。最大**500 KB**。"
                  }
                }
              },
              "example": {
                "image_rectangular": "(binary PNG logo, 2:1)",
                "image_rectangular_dark": "(binary PNG logo for dark mode, 2:1)",
                "image_favicon": "(binary favicon)"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/customization/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"color_primary\": \"#123456\", \"font_family\": \"AR One Sans\"}'"
          },
          {
            "lang": "curl",
            "label": "curl (logo upload)",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/customization/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'image_rectangular=@logo.png' \\\n  -F 'image_rectangular_dark=@logo-dark.png' \\\n  -F 'image_favicon=@favicon.ico'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.customization.update(\n    image_rectangular=open(\"image_rectangular.jpg\", \"rb\"),\n    image_rectangular_dark=open(\"image_rectangular_dark.jpg\", \"rb\"),\n    image_favicon=open(\"image_favicon.jpg\", \"rb\"),\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.customization.update({\n  image_rectangular: await fileFromPath(\"image_rectangular.jpg\"),\n  image_rectangular_dark: await fileFromPath(\"image_rectangular_dark.jpg\"),\n  image_favicon: await fileFromPath(\"image_favicon.jpg\"),\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Customization.Update(ctx, didit.CustomizationUpdateParams{\n\tImageRectangular:     didit.Some(didit.FileFromPath(\"image_rectangular.jpg\")),\n\tImageRectangularDark: didit.Some(didit.FileFromPath(\"image_rectangular_dark.jpg\")),\n\tImageFavicon:         didit.Some(didit.FileFromPath(\"image_favicon.jpg\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.types.CustomizationUpdateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.customization().update(CustomizationUpdateParams.builder()\n        .imageRectangular(Path.of(\"image_rectangular.jpg\"))\n        .imageRectangularDark(Path.of(\"image_rectangular_dark.jpg\"))\n        .imageFavicon(Path.of(\"image_favicon.jpg\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->customization->update([\n    'image_rectangular' => File::fromPath('image_rectangular.jpg'),\n    'image_rectangular_dark' => File::fromPath('image_rectangular_dark.jpg'),\n    'image_favicon' => File::fromPath('image_favicon.jpg'),\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.customization.update(\n  image_rectangular: Pathname(\"image_rectangular.jpg\"),\n  image_rectangular_dark: Pathname(\"image_rectangular_dark.jpg\"),\n  image_favicon: Pathname(\"image_favicon.jpg\")\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Customization.UpdateAsync(new CustomizationUpdateParams\n{\n    ImageRectangular = FileUpload.FromPath(\"image_rectangular.jpg\"),\n    ImageRectangularDark = FileUpload.FromPath(\"image_rectangular_dark.jpg\"),\n    ImageFavicon = FileUpload.FromPath(\"image_favicon.jpg\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ブランディングを更新しました。ブランディングオブジェクト全体が返されます（変更したフィールドだけでなく、すべてのフィールド）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandingCustomization"
                },
                "examples": {
                  "Updated": {
                    "value": {
                      "color_primary": "#123456",
                      "color_secondary": "#9DA1A1",
                      "color_background": "#FFFFFF",
                      "color_panel": "#2567FF",
                      "color_panel_10": "#1A1A1A",
                      "color_on_panel_1": "#9DA1A1",
                      "color_on_panel_2": "#F4F4F6",
                      "color_on_background": "#000000",
                      "color_button_1": "#2567FF",
                      "color_button_2": "#F8F8F8",
                      "color_button_text_1": "#FFFFFF",
                      "color_button_text_2": "#000000",
                      "color_pill_text": "#111827",
                      "border_radius_panel": 10,
                      "border_radius_buttons": 16,
                      "font_family": "AR One Sans",
                      "font_weight": "400",
                      "font_url": "https://fonts.googleapis.com/css2?family=AR+One+Sans",
                      "logo_square": null,
                      "logo_rectangular": "https://cdn.didit.me/white_label/logo_rectangular/...",
                      "logo_rectangular_dark": null,
                      "favicon": null,
                      "app_public_name": "Acme Verify",
                      "privacy_policy_url": "https://acme.com/privacy",
                      "skip_welcome_screen": true,
                      "disable_login_with_didit": false,
                      "hide_progress_bar": false,
                      "callback_seconds": 3
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効です。例: 不正な形式の16進カラーコード、不明なフォントファミリーまたはウェイト、Business Consoleでのみ使用できるフィールド (`domain`、`from_email`、`verify_domain`、`force_remove_domain`、`verify_email_domain`、`force_remove_email_domain`、およびそれらに対応する読み取り専用フィールド)、またはPNG、JPG、WebP画像ではない、長辺が512px未満である、1MBを超える、アスペクト比が正しくないロゴのアップロードです。カスタムドメインが設定されている状態で`disable_login_with_didit`を`false`に設定した場合にも返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Bad color": {
                    "value": {
                      "color_primary": [
                        "Invalid color format. Use '#RRGGBB' or '#RRGGBBAA' format."
                      ]
                    }
                  },
                  "Bad logo": {
                    "value": {
                      "image_rectangular": [
                        "Image aspect ratio must be 2:1. Got 1024x1024 image dimensions"
                      ]
                    }
                  },
                  "Unsupported logo format": {
                    "summary": "PNG、JPG、WebPのいずれの画像でもありません（SVGなど）",
                    "value": {
                      "image_rectangular_dark": [
                        "Upload a PNG, JPG or WebP image."
                      ]
                    }
                  },
                  "Logo too small": {
                    "summary": "長辺が512px未満",
                    "value": {
                      "image_rectangular": [
                        "Image must be at least 512 px on its long side. Got 400x200 image dimensions"
                      ]
                    }
                  },
                  "Logo too large": {
                    "summary": "1MB超",
                    "value": {
                      "image_square": [
                        "File size should not exceed 1 MB"
                      ]
                    }
                  },
                  "Console-only field": {
                    "value": {
                      "domain": [
                        "Manage this field in the Business Console."
                      ]
                    }
                  },
                  "Bad font weight": {
                    "value": {
                      "font_weight": [
                        "Font weight 950 is not available for Inter. Available weights are: 100, 200, 300, 400, 500, 600, 700, 800, 900"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、形式が不正、期限切れ、または別のアプリケーションにスコープされています。キーがない場合は`403`、誤ったキー、失効したキー、期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid token": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。指数バックオフで再試行してください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/businesses/{vendor_data}/": {
      "get": {
        "summary": "企業を取得",
        "description": "`vendor_data`（完全一致）で[企業](/entities/businesses)を1件取得します。一覧表示の内容に`metadata`と`updated_at`が追加されます。削除された企業は404を返します。",
        "operationId": "get_business",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "企業に対するお客様独自の識別子です。自由形式の文字列（UUIDではありません）で、送信されたとおりに完全一致で照合されます。",
            "example": "company-123"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/businesses/company-123/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.businesses.retrieve(\n    \"company-123\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.businesses.retrieve(\"company-123\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.Retrieve(ctx, \"company-123\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.businesses().retrieve(\"company-123\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->businesses->retrieve('company-123');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.businesses.retrieve(\"company-123\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.RetrieveAsync(\"company-123\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "メタデータと集計されたセッションデータを含む企業の完全な詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessDetailItem"
                },
                "examples": {
                  "Active business": {
                    "value": {
                      "didit_internal_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
                      "vendor_data": "company-123",
                      "display_name": null,
                      "legal_name": "Acme Trading Ltd",
                      "registration_number": "12345678",
                      "country_code": "GB",
                      "effective_name": "Acme Trading Ltd",
                      "status": "ACTIVE",
                      "session_count": 2,
                      "approved_count": 1,
                      "declined_count": 0,
                      "in_review_count": 1,
                      "features": {
                        "KYB": "Approved"
                      },
                      "features_list": [
                        {
                          "feature": "KYB",
                          "status": "Approved"
                        }
                      ],
                      "last_session_at": "2026-03-15T10:30:00Z",
                      "last_activity_at": "2026-03-15T10:30:00Z",
                      "first_session_at": "2026-01-10T08:00:00Z",
                      "tags": [
                        {
                          "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                          "name": "VIP",
                          "color": "#2567FF"
                        }
                      ],
                      "created_at": "2026-01-10T08:00:00Z",
                      "metadata": {
                        "industry": "fintech"
                      },
                      "updated_at": "2026-03-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの企業を読み取る権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`を持つ(削除されていない)企業が、このアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "企業を更新",
        "description": "企業を部分更新します。対象は`display_name`、`legal_name`、`registration_number`、`country_code`、`status`、`metadata`です。`metadata`は全体が置き換えられます。`status`を`BLOCKED`に設定すると`vendor_data`がシステムのブロックリストに追加され、`BLOCKED`から変更するとそのエントリーが削除されます。すべての編集は企業のアクティビティに記録されます。ステータス変更は任意の`reason`とともに記録され、`display_name`、`legal_name`、`registration_number`、`country_code`、`metadata`の変更はプロファイル更新として記録されます。",
        "operationId": "update_business",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "企業に対するお客様独自の識別子です（自由形式の文字列で、UUIDではありません）。",
            "example": "company-123"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "部分更新ボディ。変更したいフィールドのみを指定してください。",
                "properties": {
                  "display_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "コンソールに表示されるわかりやすい表示名（UI表示では`legal_name`より優先されます）。"
                  },
                  "legal_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "登記簿または手動入力による正式な法人名。"
                  },
                  "registration_number": {
                    "type": "string",
                    "nullable": true,
                    "description": "法人の登記番号または設立番号。"
                  },
                  "country_code": {
                    "type": "string",
                    "nullable": true,
                    "description": "設立国（ISO 3166-1 alpha-2、例: `GB`、`US`）。"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "FLAGGED",
                      "BLOCKED"
                    ],
                    "description": "企業のライフサイクルステータス。`BLOCKED`を設定すると、`vendor_data`が自動的にシステムのブロックリストに追加されます。`BLOCKED`から別のステータスに変更すると、そのブロックリストのエントリは削除されます。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "企業に付与する任意のJSONオブジェクト。更新時には既存のメタデータを**完全に置き換えます**。キーを追加したいだけの場合は、クライアント側でマージしてください。"
                  },
                  "reason": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 1000,
                    "description": "ステータスが変更された理由。Business Consoleの企業の**Activity**にあるステータス変更エントリに記録されます。記録されるのは、ステータスが実際に変わった場合のみです。Webhookには含まれません。"
                  }
                }
              },
              "examples": {
                "Update name": {
                  "summary": "表示名を更新",
                  "value": {
                    "display_name": "Acme Corp"
                  }
                },
                "Flag for review": {
                  "summary": "ステータスを切り替える",
                  "value": {
                    "status": "FLAGGED"
                  }
                },
                "Add metadata": {
                  "summary": "メタデータJSONを置き換え",
                  "value": {
                    "metadata": {
                      "industry": "fintech",
                      "risk_level": "low"
                    }
                  }
                },
                "Fix registry data": {
                  "summary": "抽出されたフィールドを修正",
                  "value": {
                    "legal_name": "Acme Trading International Ltd",
                    "registration_number": "12345678",
                    "country_code": "GB"
                  }
                },
                "Flag with reason": {
                  "summary": "企業にフラグを付け、理由を記録する",
                  "value": {
                    "status": "FLAGGED",
                    "reason": "Ownership structure under review"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/businesses/company-123/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"display_name\": \"Acme Corp\", \"status\": \"FLAGGED\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.businesses.update(\n    \"company-123\",\n    display_name=\"Acme Corp\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.businesses.update(\"company-123\", {\n  display_name: \"Acme Corp\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.Update(ctx, \"company-123\", didit.BusinessesUpdateParams{\n\tDisplayName: didit.String(\"Acme Corp\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BusinessesUpdateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.businesses().update(\"company-123\", BusinessesUpdateParams.builder()\n        .displayName(\"Acme Corp\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->businesses->update('company-123', [\n    'display_name' => 'Acme Corp',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.businesses.update(\n  \"company-123\",\n  display_name: \"Acme Corp\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.UpdateAsync(\"company-123\", new BusinessesUpdateParams\n{\n    DisplayName = \"Acme Corp\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "企業を更新しました。更新後の企業の完全なレコードが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessDetailItem"
                },
                "examples": {
                  "Updated": {
                    "value": {
                      "didit_internal_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
                      "vendor_data": "company-123",
                      "display_name": "Acme Corp",
                      "legal_name": "Acme Trading Ltd",
                      "registration_number": "12345678",
                      "country_code": "GB",
                      "effective_name": "Acme Corp",
                      "status": "FLAGGED",
                      "session_count": 2,
                      "approved_count": 1,
                      "declined_count": 0,
                      "in_review_count": 1,
                      "features": {
                        "KYB": "Approved"
                      },
                      "features_list": [
                        {
                          "feature": "KYB",
                          "status": "Approved"
                        }
                      ],
                      "last_session_at": "2026-03-15T10:30:00Z",
                      "last_activity_at": "2026-03-15T10:30:00Z",
                      "first_session_at": "2026-01-10T08:00:00Z",
                      "tags": [
                        {
                          "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                          "name": "VIP",
                          "color": "#2567FF"
                        }
                      ],
                      "created_at": "2026-01-10T08:00:00Z",
                      "metadata": {
                        "industry": "fintech",
                        "risk_level": "low"
                      },
                      "updated_at": "2026-03-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効です。主な原因は、不明な`status`、不正な形式の`metadata`、または1000文字を超える`reason`です。",
            "content": {
              "application/json": {
                "examples": {
                  "Bad status": {
                    "value": {
                      "status": [
                        "Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED"
                      ]
                    }
                  },
                  "Bad metadata": {
                    "value": {
                      "metadata": [
                        "Metadata must be a JSON object."
                      ]
                    }
                  },
                  "Reason too long": {
                    "value": {
                      "reason": [
                        "Ensure this field has no more than 1000 characters."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの企業を更新する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`を持つ(削除されていない)企業が、このアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/businesses/{vendor_data}/update-status/": {
      "patch": {
        "summary": "企業ステータスを更新",
        "description": "企業のライフサイクル`status`のみを切り替えます：`ACTIVE`、`FLAGGED`、`BLOCKED`のいずれかです（セッションのステータスではありません）。`BLOCKED`にすると`vendor_data`がシステムのブロックリストに追加され、`BLOCKED`から別のステータスに変更するとそのエントリーは削除されます。各変更は、任意の`reason`とともに企業のアクティビティに記録されます。現在と同じステータスを送信しても何も変更されず、`reason`も記録されません。`business.status.updated`のWebhookには`reason`は含まれません。",
        "operationId": "update_business_status",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "update_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "企業に対するお客様独自の識別子です（自由形式の文字列で、UUIDではありません）。",
            "example": "company-123"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EntityStatusUpdateRequest"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "reason": {
                        "type": "string",
                        "nullable": true,
                        "maxLength": 1000,
                        "description": "ステータスが変更された理由。Business Consoleの企業の**Activity**にあるステータス変更エントリに記録されます。記録されるのは、ステータスが実際に変わった場合のみです。Webhookには含まれません。"
                      }
                    }
                  }
                ]
              },
              "examples": {
                "Flag": {
                  "summary": "企業にレビュー用のフラグを付ける",
                  "value": {
                    "status": "FLAGGED"
                  }
                },
                "Block": {
                  "summary": "企業をブロックします（システムのブロックリストに追加）",
                  "value": {
                    "status": "BLOCKED"
                  }
                },
                "Reactivate": {
                  "summary": "企業を再有効化する",
                  "value": {
                    "status": "ACTIVE"
                  }
                },
                "Block with reason": {
                  "summary": "企業をブロックし、その理由を記録します",
                  "value": {
                    "status": "BLOCKED",
                    "reason": "Registry shows the company dissolved"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/businesses/company-123/update-status/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"status\": \"BLOCKED\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.businesses.update_status(\n    \"company-123\",\n    status=\"FLAGGED\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.businesses.updateStatus(\"company-123\", {\n  status: \"FLAGGED\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.UpdateStatus(ctx, \"company-123\", didit.BusinessesUpdateStatusParams{\n\tStatus: \"FLAGGED\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BusinessesUpdateStatusParams;\nimport me.didit.types.EntityStatusUpdateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.businesses().updateStatus(\"company-123\", BusinessesUpdateStatusParams.builder()\n        .status(EntityStatusUpdateRequest.Status.of(\"FLAGGED\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->businesses->updateStatus('company-123', [\n    'status' => 'FLAGGED',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.businesses.update_status(\n  \"company-123\",\n  status: \"FLAGGED\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.UpdateStatusAsync(\"company-123\", new BusinessesUpdateStatusParams\n{\n    Status = \"FLAGGED\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "企業ステータスを更新しました。企業の完全なレコードが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessDetailItem"
                },
                "examples": {
                  "Blocked": {
                    "value": {
                      "didit_internal_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
                      "vendor_data": "company-123",
                      "display_name": null,
                      "legal_name": "Acme Trading Ltd",
                      "registration_number": "12345678",
                      "country_code": "GB",
                      "effective_name": "Acme Trading Ltd",
                      "status": "BLOCKED",
                      "session_count": 2,
                      "approved_count": 1,
                      "declined_count": 0,
                      "in_review_count": 1,
                      "features": {
                        "KYB": "Approved"
                      },
                      "features_list": [
                        {
                          "feature": "KYB",
                          "status": "Approved"
                        }
                      ],
                      "last_session_at": "2026-03-15T10:30:00Z",
                      "last_activity_at": "2026-03-15T10:30:00Z",
                      "first_session_at": "2026-01-10T08:00:00Z",
                      "tags": [
                        {
                          "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                          "name": "VIP",
                          "color": "#2567FF"
                        }
                      ],
                      "created_at": "2026-01-10T08:00:00Z",
                      "metadata": {
                        "industry": "fintech"
                      },
                      "updated_at": "2026-03-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`status`がないか無効です。または、`reason`が1000文字を超えています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing status": {
                    "value": {
                      "status": [
                        "This field is required."
                      ]
                    }
                  },
                  "Bad status": {
                    "value": {
                      "status": [
                        "Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED"
                      ]
                    }
                  },
                  "Reason too long": {
                    "value": {
                      "reason": [
                        "Ensure this field has no more than 1000 characters."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの企業を更新する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`を持つ(削除されていない)企業が、このアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/businesses/delete/": {
      "post": {
        "summary": "企業の一括削除",
        "description": "企業を**完全に削除**します。この操作は元に戻せません。ブロックする場合は、`BLOCKED`を指定した[Update Business Status](#patch-/v3/businesses/-vendor_data-/update-status/)の使用を推奨します。\n\n**提出済みの規制レポート：** 選択したデータが確定済みの規制レポートに含まれている場合、リクエスト全体が`409`で拒否され、何も削除されません。レスポンス本文は`code: in_filed_report`を使用し、各レポートを`uuid`、`report_number`、`report_type`、`case_uuid`で示します。それらのレポートを削除してから、リクエストを再度実行してください。",
        "operationId": "batch_delete_businesses",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "batch_delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Businesses"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "`vendor_data_list`、`didit_internal_id_list`、または`delete_all: true`を指定してください。複数を送信した場合の優先順位は`delete_all` > `vendor_data_list` > `didit_internal_id_list`です(最も優先度の高いセレクターのみが使用されます)。",
                "properties": {
                  "vendor_data_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "削除するお客様独自の識別子で、送信した値と完全一致で照合されます。"
                  },
                  "didit_internal_id_list": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "description": "削除するDiditの内部UUID（`didit_internal_id`）です。"
                  },
                  "delete_all": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、アプリケーション内のすべての企業を削除します。リストによる選択指定と併用することはできません。"
                  }
                }
              },
              "examples": {
                "Specific businesses": {
                  "summary": "vendor_dataで削除",
                  "value": {
                    "vendor_data_list": [
                      "company-123",
                      "company-456"
                    ]
                  }
                },
                "Specific internal IDs": {
                  "summary": "didit_internal_idで削除",
                  "value": {
                    "didit_internal_id_list": [
                      "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "b2c3d4e5-f6a7-8901-bcde-f12345678901"
                    ]
                  }
                },
                "All businesses": {
                  "summary": "このアプリケーションのすべての企業を消去",
                  "value": {
                    "delete_all": true
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/businesses/delete/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"vendor_data_list\": [\"company-123\", \"company-456\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.businesses.batch_delete(\n    vendor_data_list=[\"company-123\", \"company-456\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.businesses.batchDelete({\n  vendor_data_list: [\"company-123\", \"company-456\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.BatchDelete(ctx, didit.BusinessesBatchDeleteParams{\n\tVendorDataList: didit.Some([]string{\"company-123\", \"company-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.BusinessesBatchDeleteParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.businesses().batchDelete(BusinessesBatchDeleteParams.builder()\n        .vendorDataList(List.of(\"company-123\", \"company-456\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->businesses->batchDelete([\n    'vendor_data_list' => ['company-123', 'company-456'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.businesses.batch_delete(vendor_data_list: [\"company-123\", \"company-456\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.BatchDeleteAsync(new BusinessesBatchDeleteParams\n{\n    VendorDataList = new string[] { \"company-123\", \"company-456\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "企業を削除しました。実際に削除された行数が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "integer",
                      "description": "削除された企業の数（どれにも一致しなかったvendor_dataの値は含みません）。"
                    }
                  }
                },
                "examples": {
                  "Deleted some": {
                    "value": {
                      "deleted": 2
                    }
                  },
                  "Nothing matched": {
                    "value": {
                      "deleted": 0
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "セレクターが指定されていません(`vendor_data_list`、`didit_internal_id_list`、`delete_all`のすべてが欠落しているか空です)。エラーボディはJSON配列です。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing selector": {
                    "value": [
                      "Provide vendor_data_list, didit_internal_id_list, or set delete_all=true."
                    ]
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しているか、このアプリケーションの企業を削除する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "選択内容に、確定済みの規制当局向けレポートに含まれる企業が含まれています。何も削除されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InFiledReportError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/users/aml-monitoring/": {
      "post": {
        "summary": "ユーザーの継続的なAMLモニタリングを有効化または無効化する",
        "description": "選択したユーザーの継続的なAMLモニタリングをオンまたはオフにします。動作はBusiness Consoleと同じです。モニタリング対象のAMLスクリーニングはユーザーごとに1件のみ保持されるため、複数回認証したプロファイルでもモニタリングと請求は1回分です。無効にすると、そのプロファイルのすべてのスクリーニングでモニタリングがオフになります。AMLスクリーニングが1件もないユーザーは、必要な氏名、生年月日、国がある場合、先にスクリーニングされます（通常のAMLスクリーニングとして請求されます）。ない場合は`skipped_no_identity_data`として報告されます。\n\n`estimate_only: true`を設定すると、何も書き込まずに件数と費用をプレビューできます。20件以下のプロファイルの選択はその場で処理され、完了したジョブとともに`200`を返します。それより多い選択は`202`を返してバックグラウンドで実行されます。返された`job_id`を使って[AMLモニタリングジョブの取得](#get-/v3/aml-monitoring/jobs/-job_id-/)をポーリングしてください。組織の残高が見積額に満たない場合、有効化は`403`で拒否されます。どれにも一致しない識別子は`unmatched`に列挙され、リクエストが失敗することはありません。何にも一致しない選択は空のジョブ（`total`が0）として完了します。これは一括削除エンドポイントと同じ規則です。",
        "operationId": "toggle_users_aml_monitoring",
        "x-didit-sdk": {
          "resource": "users",
          "method": "set_aml_monitoring",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "AML Ongoing Monitoring"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "is_enabled"
                ],
                "description": "`vendor_data_list`、`didit_internal_id_list`、またはその両方でユーザーを選択します(2つのリストはORで結合されます)。1回のリクエストで指定できる識別子は、両方のリストを合わせて最大1000件です。",
                "properties": {
                  "is_enabled": {
                    "type": "boolean",
                    "description": "モニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
                  },
                  "estimate_only": {
                    "type": "boolean",
                    "default": false,
                    "description": "trueの場合、費用の見積もりを返し、書き込みは一切行いません（スクリーニング、請求、ジョブのいずれも発生しません）。"
                  },
                  "vendor_data_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "切り替えるユーザーのお客様独自の識別子で、送信した値と完全一致で照合されます。"
                  },
                  "didit_internal_id_list": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "description": "切り替えるユーザーのDidit内部IDです。作成、取得、一覧の各エンドポイントが返す`didit_internal_id`を指定します。"
                  }
                }
              },
              "examples": {
                "Estimate first": {
                  "summary": "書き込みを行わずに費用をプレビューする",
                  "value": {
                    "is_enabled": true,
                    "estimate_only": true,
                    "vendor_data_list": [
                      "user-123",
                      "user-456"
                    ]
                  }
                },
                "Enable": {
                  "summary": "2人のユーザーのモニタリングを有効にする",
                  "value": {
                    "is_enabled": true,
                    "vendor_data_list": [
                      "user-123",
                      "user-456"
                    ]
                  }
                },
                "Disable": {
                  "summary": "Diditの内部IDでモニタリングを無効化",
                  "value": {
                    "is_enabled": false,
                    "didit_internal_id_list": [
                      "3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11"
                    ]
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/users/aml-monitoring/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"is_enabled\": true, \"vendor_data_list\": [\"user-123\", \"user-456\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.users.set_aml_monitoring(\n    is_enabled=True,\n    estimate_only=True,\n    vendor_data_list=[\"user-123\", \"user-456\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.users.setAmlMonitoring({\n  is_enabled: true,\n  estimate_only: true,\n  vendor_data_list: [\"user-123\", \"user-456\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.SetAMLMonitoring(ctx, didit.UsersSetAMLMonitoringParams{\n\tIsEnabled:      true,\n\tEstimateOnly:   didit.Bool(true),\n\tVendorDataList: didit.Some([]string{\"user-123\", \"user-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.UsersSetAmlMonitoringParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.users().setAmlMonitoring(UsersSetAmlMonitoringParams.builder()\n        .isEnabled(true)\n        .estimateOnly(true)\n        .vendorDataList(List.of(\"user-123\", \"user-456\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->users->setAmlMonitoring([\n    'is_enabled' => true,\n    'estimate_only' => true,\n    'vendor_data_list' => ['user-123', 'user-456'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.users.set_aml_monitoring(\n  is_enabled: true,\n  estimate_only: true,\n  vendor_data_list: [\"user-123\", \"user-456\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Users.SetAmlMonitoringAsync(new UsersSetAmlMonitoringParams\n{\n    IsEnabled = true,\n    EstimateOnly = true,\n    VendorDataList = new string[] { \"user-123\", \"user-456\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "`estimate_only`がtrueの場合は見積もり、インラインで処理された選択の場合は完了したジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AMLMonitoringToggleResult"
                }
              }
            }
          },
          "202": {
            "description": "より大きな選択はバックグラウンドで実行されます。`job_id`を使用してジョブエンドポイントをポーリングしてください。プロファイルの処理が進むにつれて`results`に結果が追加されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AMLMonitoringJob"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: `is_enabled`がない、セレクターがない、または両方のリストを合わせて識別子が1000件を超えています。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "この選択内容でモニタリングを有効にするには残高が不足しています。レスポンスには`estimate`が含まれるため、必要な金額をチャージできます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "estimate": {
                      "type": "object",
                      "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(何も書き込まれません)。",
                      "properties": {
                        "users_total": {
                          "type": "integer",
                          "description": "選択条件に一致したプロフィール。"
                        },
                        "already_enabled": {
                          "type": "integer",
                          "description": "すでにモニタリング中のプロフィール(有効化時には何も行われず、無効化するとこれらがオフになります)。"
                        },
                        "with_existing_aml": {
                          "type": "integer",
                          "description": "既存のAMLスクリーニングがモニタリング対象に切り替えられるプロファイル（新たなスクリーニングは行われません）。"
                        },
                        "needing_screening": {
                          "type": "integer",
                          "description": "AMLスクリーニングが一度も行われておらず、最初にスクリーニングが行われるプロファイル（通常のAMLスクリーニングとして請求されます）。"
                        },
                        "skipped_no_identity_data": {
                          "type": "integer",
                          "description": "本人情報が不足しているためスクリーニングできないプロフィール。"
                        },
                        "skipped_blocked": {
                          "type": "integer",
                          "description": "スキップされるブロック済みユーザーの数（企業の場合は常に0）。"
                        },
                        "estimated_screening_cost_usd": {
                          "type": "number",
                          "example": 0.2,
                          "description": "新しいスクリーニングの1回限りの費用です。"
                        },
                        "estimated_annual_monitoring_cost_usd": {
                          "type": "number",
                          "example": 0.07,
                          "description": "モニタリング対象となるプロファイルの年間モニタリング費用。"
                        },
                        "balance_sufficient": {
                          "type": "boolean",
                          "description": "組織の残高でスクリーニングと初年度のモニタリングを賄えるかどうか。"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/businesses/aml-monitoring/": {
      "post": {
        "summary": "企業の継続的なAMLモニタリングを有効化または無効化する",
        "description": "選択した企業の継続的なAMLモニタリングをオンまたはオフにします。動作はBusiness Consoleと同じです。モニタリング対象のAMLスクリーニングは企業ごとに1件のみ保持されるため、複数回認証したプロファイルでもモニタリングと請求は1回分です。無効にすると、そのプロファイルのすべてのスクリーニングでモニタリングがオフになります。AMLスクリーニングが1件もない企業は、必要な法人名または表示名がある場合、先にスクリーニングされます（通常のAMLスクリーニングとして請求されます）。ない場合は`skipped_no_identity_data`として報告されます。\n\n`estimate_only: true`を設定すると、何も書き込まずに件数と費用をプレビューできます。20件以下のプロファイルの選択はその場で処理され、完了したジョブとともに`200`を返します。それより多い選択は`202`を返してバックグラウンドで実行されます。返された`job_id`を使って[AMLモニタリングジョブの取得](#get-/v3/aml-monitoring/jobs/-job_id-/)をポーリングしてください。組織の残高が見積額に満たない場合、有効化は`403`で拒否されます。どれにも一致しない識別子は`unmatched`に列挙され、リクエストが失敗することはありません。何にも一致しない選択は空のジョブ（`total`が0）として完了します。これは一括削除エンドポイントと同じ規則です。",
        "operationId": "toggle_businesses_aml_monitoring",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "set_aml_monitoring",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "AML Ongoing Monitoring"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "is_enabled"
                ],
                "description": "`vendor_data_list`、`didit_internal_id_list`、またはその両方で企業を選択します(2つのリストはORで結合されます)。1回のリクエストで指定できる識別子は、両方のリストを合わせて最大1000件です。",
                "properties": {
                  "is_enabled": {
                    "type": "boolean",
                    "description": "モニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
                  },
                  "estimate_only": {
                    "type": "boolean",
                    "default": false,
                    "description": "trueの場合、費用の見積もりを返し、書き込みは一切行いません（スクリーニング、請求、ジョブのいずれも発生しません）。"
                  },
                  "vendor_data_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "切り替える企業のお客様独自の識別子で、送信した値と完全一致で照合されます。"
                  },
                  "didit_internal_id_list": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "description": "切り替える企業のDidit内部IDです。作成、取得、一覧の各エンドポイントが返す`didit_internal_id`を指定します。"
                  }
                }
              },
              "examples": {
                "Estimate first": {
                  "summary": "書き込みを行わずに費用をプレビューする",
                  "value": {
                    "is_enabled": true,
                    "estimate_only": true,
                    "vendor_data_list": [
                      "company-123",
                      "company-456"
                    ]
                  }
                },
                "Enable": {
                  "summary": "2つの企業のモニタリングを有効にする",
                  "value": {
                    "is_enabled": true,
                    "vendor_data_list": [
                      "company-123",
                      "company-456"
                    ]
                  }
                },
                "Disable": {
                  "summary": "Diditの内部IDでモニタリングを無効化",
                  "value": {
                    "is_enabled": false,
                    "didit_internal_id_list": [
                      "3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11"
                    ]
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/businesses/aml-monitoring/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"is_enabled\": true, \"vendor_data_list\": [\"company-123\", \"company-456\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.businesses.set_aml_monitoring(\n    is_enabled=True,\n    estimate_only=True,\n    vendor_data_list=[\"company-123\", \"company-456\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.businesses.setAmlMonitoring({\n  is_enabled: true,\n  estimate_only: true,\n  vendor_data_list: [\"company-123\", \"company-456\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.SetAMLMonitoring(ctx, didit.BusinessesSetAMLMonitoringParams{\n\tIsEnabled:      true,\n\tEstimateOnly:   didit.Bool(true),\n\tVendorDataList: didit.Some([]string{\"company-123\", \"company-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.BusinessesSetAmlMonitoringParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.businesses().setAmlMonitoring(BusinessesSetAmlMonitoringParams.builder()\n        .isEnabled(true)\n        .estimateOnly(true)\n        .vendorDataList(List.of(\"company-123\", \"company-456\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->businesses->setAmlMonitoring([\n    'is_enabled' => true,\n    'estimate_only' => true,\n    'vendor_data_list' => ['company-123', 'company-456'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.businesses.set_aml_monitoring(\n  is_enabled: true,\n  estimate_only: true,\n  vendor_data_list: [\"company-123\", \"company-456\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.SetAmlMonitoringAsync(new BusinessesSetAmlMonitoringParams\n{\n    IsEnabled = true,\n    EstimateOnly = true,\n    VendorDataList = new string[] { \"company-123\", \"company-456\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "`estimate_only`がtrueの場合は見積もり、インラインで処理された選択の場合は完了したジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AMLMonitoringToggleResult"
                }
              }
            }
          },
          "202": {
            "description": "より大きな選択はバックグラウンドで実行されます。`job_id`を使用してジョブエンドポイントをポーリングしてください。プロファイルの処理が進むにつれて`results`に結果が追加されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AMLMonitoringJob"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: `is_enabled`がない、セレクターがない、または両方のリストを合わせて識別子が1000件を超えています。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "この選択内容でモニタリングを有効にするには残高が不足しています。レスポンスには`estimate`が含まれるため、必要な金額をチャージできます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "estimate": {
                      "type": "object",
                      "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(何も書き込まれません)。",
                      "properties": {
                        "users_total": {
                          "type": "integer",
                          "description": "選択条件に一致したプロフィール。"
                        },
                        "already_enabled": {
                          "type": "integer",
                          "description": "すでにモニタリング中のプロフィール(有効化時には何も行われず、無効化するとこれらがオフになります)。"
                        },
                        "with_existing_aml": {
                          "type": "integer",
                          "description": "既存のAMLスクリーニングがモニタリング対象に切り替えられるプロファイル（新たなスクリーニングは行われません）。"
                        },
                        "needing_screening": {
                          "type": "integer",
                          "description": "AMLスクリーニングが一度も行われておらず、最初にスクリーニングが行われるプロファイル（通常のAMLスクリーニングとして請求されます）。"
                        },
                        "skipped_no_identity_data": {
                          "type": "integer",
                          "description": "本人情報が不足しているためスクリーニングできないプロフィール。"
                        },
                        "skipped_blocked": {
                          "type": "integer",
                          "description": "スキップされるブロック済みユーザーの数（企業の場合は常に0）。"
                        },
                        "estimated_screening_cost_usd": {
                          "type": "number",
                          "example": 0.2,
                          "description": "新しいスクリーニングの1回限りの費用です。"
                        },
                        "estimated_annual_monitoring_cost_usd": {
                          "type": "number",
                          "example": 0.07,
                          "description": "モニタリング対象となるプロファイルの年間モニタリング費用。"
                        },
                        "balance_sufficient": {
                          "type": "boolean",
                          "description": "組織の残高でスクリーニングと初年度のモニタリングを賄えるかどうか。"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/aml-monitoring/jobs/{job_id}/": {
      "get": {
        "summary": "AMLの継続的なモニタリングジョブを取得",
        "description": "`POST /v3/users/aml-monitoring/`または`POST /v3/businesses/aml-monitoring/`で開始したモニタリング切り替えジョブのステータス、結果カウンター、レコードごとの結果。`status`が`PENDING`または`PROCESSING`の間は数秒ごとにポーリングしてください。`COMPLETED`になると`results`は完全な状態になります。",
        "operationId": "get_aml_monitoring_job",
        "x-didit-sdk": {
          "resource": "aml_monitoring",
          "method": "retrieve_job",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "AML Ongoing Monitoring"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "トグルエンドポイントが返した`job_id`です。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl 'https://verification.didit.me/v3/aml-monitoring/jobs/JOB_ID/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.aml_monitoring.retrieve_job(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.amlMonitoring.retrieveJob(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.AMLMonitoring.RetrieveJob(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.amlMonitoring().retrieveJob(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->amlMonitoring->retrieveJob('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.aml_monitoring.retrieve_job(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.AmlMonitoring.RetrieveJobAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "job_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "PENDING",
                        "PROCESSING",
                        "COMPLETED",
                        "FAILED"
                      ]
                    },
                    "is_enabled": {
                      "type": "boolean",
                      "description": "ジョブがモニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
                    },
                    "target_type": {
                      "type": "string",
                      "enum": [
                        "user",
                        "business"
                      ],
                      "description": "ジョブが切り替えるプロファイルの種類。"
                    },
                    "total": {
                      "type": "integer",
                      "description": "ジョブが処理するプロフィール。"
                    },
                    "processed": {
                      "type": "integer",
                      "description": "これまでに処理されたプロフィール。"
                    },
                    "outcomes": {
                      "type": "object",
                      "description": "レコードごとの結果カウンターです。選択された各プロフィールは必ずいずれか1つのカウンターに集計され、黙ってスキップされるものはありません。",
                      "properties": {
                        "enabled": {
                          "type": "integer",
                          "description": "既存のAMLスクリーニングでモニタリングが有効化されました。"
                        },
                        "screened_and_enabled": {
                          "type": "integer",
                          "description": "新しいAMLスクリーニングが作成され（課金対象）、そのスクリーニングでモニタリングが有効になりました。"
                        },
                        "already_enabled": {
                          "type": "integer",
                          "description": "モニタリングはすでに有効でした。何も変更されず、請求も発生していません。"
                        },
                        "disabled": {
                          "type": "integer",
                          "description": "プロファイルのすべてのAMLスクリーニングでモニタリングがオフになりました。"
                        },
                        "skipped_no_identity_data": {
                          "type": "integer",
                          "description": "スキップ: プロファイルに、スクリーニングに必要な氏名、生年月日、国(ユーザーの場合)または名称(企業の場合)がありません。"
                        },
                        "skipped_blocked": {
                          "type": "integer",
                          "description": "スキップ: ユーザーがブロックされています。"
                        },
                        "skipped_sandbox": {
                          "type": "integer",
                          "description": "スキップ: サンドボックスアプリケーションのため、スクリーニングは作成されません。"
                        },
                        "failed_provider": {
                          "type": "integer",
                          "description": "スクリーニングを完了できませんでした。後で再試行してください。"
                        },
                        "failed_insufficient_balance": {
                          "type": "integer",
                          "description": "ジョブの実行中に残高が不足しました。"
                        }
                      }
                    },
                    "results": {
                      "type": "array",
                      "description": "処理されたプロファイルごとに処理順で1エントリー。ジョブの実行中に増えていき、ステータスがCOMPLETEDになった時点で完全になります。APIから開始したジョブについて記録されます。Business Consoleから開始したジョブはカウンターのみを報告します。",
                      "items": {
                        "type": "object",
                        "properties": {
                          "didit_internal_id": {
                            "type": "string",
                            "format": "uuid",
                            "description": "プロファイルのDidit内部IDです。"
                          },
                          "vendor_data": {
                            "type": "string",
                            "nullable": true,
                            "description": "プロファイルに対するお客様独自の識別子です。"
                          },
                          "outcome": {
                            "type": "string",
                            "enum": [
                              "enabled",
                              "screened_and_enabled",
                              "already_enabled",
                              "disabled",
                              "skipped_no_identity_data",
                              "skipped_blocked",
                              "skipped_sandbox",
                              "failed_provider",
                              "failed_insufficient_balance"
                            ]
                          }
                        }
                      }
                    },
                    "error": {
                      "type": "string",
                      "nullable": true,
                      "description": "ステータスがFAILEDの場合の汎用的な失敗メッセージ。詳細な原因はプラットフォーム側で保持されます。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "completed_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "404": {
            "description": "このアプリケーションにそのようなジョブはありません。"
          }
        }
      }
    },
    "/v3/users/{vendor_data}/update-status/": {
      "patch": {
        "summary": "ユーザーステータスを更新",
        "description": "ユーザーのライフサイクル`status`のみを切り替えます：`ACTIVE`、`FLAGGED`、`BLOCKED`のいずれかです（セッションのステータスではありません）。`BLOCKED`にすると`vendor_data`がシステムのブロックリストに追加され、`BLOCKED`から別のステータスに変更するとそのエントリーは削除されます。各変更はユーザーの`STATUS_CHANGED`アクティビティとして記録され、任意の`reason`はその`comment`になります。現在と同じステータスを送信しても何も変更されず、`reason`も記録されません。`user.status.updated`のWebhookには`reason`は含まれません。",
        "operationId": "update_user_status",
        "x-didit-sdk": {
          "resource": "users",
          "method": "update_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ユーザーに対するお客様独自の識別子です。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EntityStatusUpdateRequest"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "reason": {
                        "type": "string",
                        "nullable": true,
                        "maxLength": 1000,
                        "description": "ステータスが変更された理由。ユーザーのアクティビティ（`comments[].comment`、およびBusiness Consoleの**Activity**）にあるステータス変更エントリに記録されます。記録されるのは、ステータスが実際に変わった場合のみです。Webhookには含まれません。"
                      }
                    }
                  }
                ]
              },
              "examples": {
                "Activate": {
                  "summary": "ユーザーを再有効化する",
                  "value": {
                    "status": "ACTIVE"
                  }
                },
                "Flag": {
                  "summary": "ユーザーにレビュー用のフラグを付ける",
                  "value": {
                    "status": "FLAGGED"
                  }
                },
                "Block": {
                  "summary": "ユーザーをブロックします（システムのブロックリストに追加）",
                  "value": {
                    "status": "BLOCKED"
                  }
                },
                "Block with reason": {
                  "summary": "ユーザーをブロックし、その理由を記録します",
                  "value": {
                    "status": "BLOCKED",
                    "reason": "Chargeback fraud pattern confirmed"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/users/user-abc-123/update-status/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"status\": \"BLOCKED\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.users.update_status(\n    \"user-123\",\n    status=\"ACTIVE\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.users.updateStatus(\"user-123\", {\n  status: \"ACTIVE\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.UpdateStatus(ctx, \"user-123\", didit.UsersUpdateStatusParams{\n\tStatus: \"ACTIVE\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.EntityStatusUpdateRequest;\nimport me.didit.types.UsersUpdateStatusParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.users().updateStatus(\"user-123\", UsersUpdateStatusParams.builder()\n        .status(EntityStatusUpdateRequest.Status.of(\"ACTIVE\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->users->updateStatus('user-123', [\n    'status' => 'ACTIVE',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.users.update_status(\n  \"user-123\",\n  status: \"ACTIVE\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Users.UpdateStatusAsync(\"user-123\", new UsersUpdateStatusParams\n{\n    Status = \"ACTIVE\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ユーザーステータスが更新されました。ユーザーの完全なレコードが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDetailItem"
                },
                "examples": {
                  "Blocked": {
                    "value": {
                      "didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
                      "vendor_data": "user-abc-123",
                      "display_name": null,
                      "full_name": "John Michael Doe",
                      "date_of_birth": "1990-05-15",
                      "effective_name": "John Michael Doe",
                      "status": "BLOCKED",
                      "metadata": {
                        "tier": "premium",
                        "source": "website"
                      },
                      "portrait_image_url": "https://<media-host>/...",
                      "session_count": 3,
                      "approved_count": 2,
                      "declined_count": 0,
                      "in_review_count": 1,
                      "issuing_states": [
                        "USA"
                      ],
                      "approved_emails": [
                        "john@example.com"
                      ],
                      "approved_phones": [
                        "+14155551234"
                      ],
                      "features": {
                        "ID_VERIFICATION": "Approved",
                        "LIVENESS": "Approved",
                        "FACE_MATCH": "Approved",
                        "AML": "Approved"
                      },
                      "features_list": [
                        {
                          "feature": "ID_VERIFICATION",
                          "status": "Approved"
                        },
                        {
                          "feature": "LIVENESS",
                          "status": "Approved"
                        },
                        {
                          "feature": "FACE_MATCH",
                          "status": "Approved"
                        },
                        {
                          "feature": "AML",
                          "status": "Approved"
                        }
                      ],
                      "last_session_at": "2025-06-15T10:30:00Z",
                      "last_activity_at": "2025-06-15T10:30:00Z",
                      "first_session_at": "2025-06-01T08:00:00Z",
                      "tags": [
                        {
                          "uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                          "tag": {
                            "uuid": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
                            "name": "VIP",
                            "color": "#2567FF",
                            "description": null,
                            "source": "custom",
                            "created_at": "2025-05-01T09:00:00Z",
                            "updated_at": "2025-05-01T09:00:00Z"
                          },
                          "added_by_email": "analyst@acme.com",
                          "added_by_name": "Jane Analyst",
                          "created_at": "2025-06-02T11:00:00Z"
                        }
                      ],
                      "comments": [
                        {
                          "uuid": "c1111111-2222-4333-8444-555555555555",
                          "comment_type": "STATUS_CHANGED",
                          "comment": "Chargeback fraud pattern confirmed",
                          "actor_email": null,
                          "actor_name": null,
                          "previous_status": "ACTIVE",
                          "new_status": "BLOCKED",
                          "previous_value": null,
                          "new_value": null,
                          "changed_fields": [],
                          "metadata": null,
                          "mentioned_emails": [],
                          "created_at": "2025-06-15T10:30:00Z"
                        }
                      ],
                      "created_at": "2025-06-01T08:00:00Z",
                      "updated_at": "2025-06-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`status`がないか無効です。または、`reason`が1000文字を超えています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing status": {
                    "value": {
                      "status": [
                        "This field is required."
                      ]
                    }
                  },
                  "Bad status": {
                    "value": {
                      "status": [
                        "Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED"
                      ]
                    }
                  },
                  "Reason too long": {
                    "value": {
                      "reason": [
                        "Ensure this field has no more than 1000 characters."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "このキーではこのアプリケーションのユーザーを更新できません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "指定された`vendor_data`を持つ(削除されていない)ユーザーが、このアプリケーションに存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/businesses/create/": {
      "post": {
        "summary": "企業を作成",
        "description": "KYBセッションを*伴わずに*[企業](/entities/businesses)を事前作成します。すべてのフィールドは任意ですが、`vendor_data`は必ず送信してください。これがないと、レコードをセッションや取引に紐付けることができません。指定した場合、`vendor_data`は削除されていない企業の間で一意である必要があります(完全一致。重複した場合は400が返されます)。冪等ではありません。",
        "operationId": "create_business",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Businesses"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "vendor_data": {
                    "type": "string",
                    "nullable": true,
                    "description": "この企業に対するお客様独自の識別子です（自由形式の文字列で、UUIDではありません）。任意ですが、指定を強く推奨します。指定する場合は、アプリケーション内の削除されていない企業の間で一意である必要があり、送信されたとおりに完全一致で照合されます。"
                  },
                  "display_name": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 255,
                    "description": "コンソールに表示されるわかりやすい表示名（UI表示では`legal_name`より優先されます）。"
                  },
                  "legal_name": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 255,
                    "description": "企業の正式な法人名。"
                  },
                  "registration_number": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 100,
                    "description": "法人の登記番号または設立番号。"
                  },
                  "country_code": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 10,
                    "description": "設立国（ISO 3166-1 alpha-2、例: `GB`、`US`）。"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "FLAGGED",
                      "BLOCKED"
                    ],
                    "default": "ACTIVE",
                    "description": "初期のライフサイクルステータス。デフォルトは`ACTIVE`です。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "企業に付与する任意のJSONオブジェクト。デフォルトは`{}`です。"
                  }
                }
              },
              "examples": {
                "Basic": {
                  "summary": "推奨される最小値",
                  "value": {
                    "vendor_data": "company-456",
                    "legal_name": "New Corp Ltd",
                    "country_code": "US"
                  }
                },
                "Full": {
                  "summary": "すべてのフィールド",
                  "value": {
                    "vendor_data": "company-789",
                    "display_name": "New Corp",
                    "legal_name": "New Corp International Ltd",
                    "registration_number": "98765432",
                    "country_code": "DE",
                    "status": "ACTIVE",
                    "metadata": {
                      "industry": "fintech",
                      "tier": "enterprise"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/businesses/create/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"vendor_data\": \"company-456\", \"legal_name\": \"New Corp Ltd\", \"country_code\": \"US\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.businesses.create(\n    vendor_data=\"company-456\",\n    legal_name=\"New Corp Ltd\",\n    country_code=\"US\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.businesses.create({\n  vendor_data: \"company-456\",\n  legal_name: \"New Corp Ltd\",\n  country_code: \"US\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.Create(ctx, didit.BusinessesCreateParams{\n\tVendorData:  didit.String(\"company-456\"),\n\tLegalName:   didit.String(\"New Corp Ltd\"),\n\tCountryCode: didit.String(\"US\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BusinessesCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.businesses().create(BusinessesCreateParams.builder()\n        .vendorData(\"company-456\")\n        .legalName(\"New Corp Ltd\")\n        .countryCode(\"US\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->businesses->create([\n    'vendor_data' => 'company-456',\n    'legal_name' => 'New Corp Ltd',\n    'country_code' => 'US',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.businesses.create(\n  vendor_data: \"company-456\",\n  legal_name: \"New Corp Ltd\",\n  country_code: \"US\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.CreateAsync(new BusinessesCreateParams\n{\n    VendorData = \"company-456\",\n    LegalName = \"New Corp Ltd\",\n    CountryCode = \"US\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "企業を作成しました。企業の完全なレコードが返されます(Get Businessと同じ形式)。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessDetailItem"
                },
                "examples": {
                  "Created": {
                    "value": {
                      "didit_internal_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
                      "vendor_data": "company-456",
                      "display_name": null,
                      "legal_name": "New Corp Ltd",
                      "registration_number": null,
                      "country_code": "US",
                      "effective_name": "New Corp Ltd",
                      "status": "ACTIVE",
                      "session_count": 0,
                      "approved_count": 0,
                      "declined_count": 0,
                      "in_review_count": 0,
                      "features": {},
                      "features_list": [],
                      "last_session_at": null,
                      "last_activity_at": "2026-03-15T10:30:00Z",
                      "first_session_at": null,
                      "tags": [],
                      "created_at": "2026-03-15T10:30:00Z",
                      "metadata": {},
                      "updated_at": "2026-03-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "無効なリクエストボディ。主な原因は、重複した`vendor_data`、不明な`status`、または不正な形式の`metadata`です。",
            "content": {
              "application/json": {
                "examples": {
                  "Duplicate": {
                    "value": {
                      "vendor_data": [
                        "A business with this vendor_data already exists."
                      ]
                    }
                  },
                  "Bad status": {
                    "value": {
                      "status": [
                        "Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED"
                      ]
                    }
                  },
                  "Bad metadata": {
                    "value": {
                      "metadata": [
                        "Metadata must be a JSON object."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、そのキーではこのアプリケーションの企業を作成できません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/users/create/": {
      "post": {
        "summary": "ユーザーを作成",
        "description": "`vendor_data`を指定して[ユーザー](/entities/users)を作成します。認証セッションの前でも、認証セッションなしでも作成できます。`vendor_data`はアプリケーションのユーザー間で一意である必要があります（重複すると`400`が返されます）。冪等ではありません。\n\n**連絡先情報:** `email`と`phone_number`は`metadata.contact`に、`country`は`metadata.address`に保存されます。`full_name`なしで`first_name`または`last_name`を送信すると、Diditはそれらを結合して`full_name`にします。\n\n**認証リンク:** `send_verification_link: true`を指定すると、Diditは`workflow_id`でその人物の認証セッションも作成し、`email`宛てにリンクをメールで送信します。このセッションでは、ブロックリストやクレジット残高など、[Create Session](/ja/sessions-api/create-session)と同じチェックが実行されます。人物とセッションは両方とも作成されるか、どちらも作成されないかのいずれかです。いずれかのチェックに失敗した場合、何も書き込まれず、メールも送信されません。レスポンスの`verification_link`はセッションの内容を表し、リンクを要求しない場合は`null`になります。\n\n**APIキーのアクセス:** スコープ付きAPIキーには`users`の書き込み権限が必要です。`send_verification_link: true`の場合は`sessions`の書き込み権限も必要で、ない場合は何も書き込まれる前に`403`が返されます。フルアクセスキーには影響しません。[APIキー](/ja/console/api-keys)を参照してください。",
        "operationId": "create_user",
        "x-didit-sdk": {
          "resource": "users",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Users"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "vendor_data"
                ],
                "properties": {
                  "vendor_data": {
                    "type": "string",
                    "description": "このユーザーに対するお客様独自の識別子です（自由形式の文字列で、UUIDではありません）。アプリケーションのユーザーの間で一意である必要があり、送信されたとおりに完全一致で照合されます。"
                  },
                  "full_name": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 512,
                    "description": "ユーザーの法的な氏名。"
                  },
                  "display_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "コンソールに表示されるわかりやすい表示名（UI表示では`full_name`より優先されます）。",
                    "maxLength": 255
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "`YYYY-MM-DD`形式の生年月日。"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "FLAGGED",
                      "BLOCKED"
                    ],
                    "default": "ACTIVE",
                    "description": "初期のライフサイクルステータス。デフォルトは`ACTIVE`です。"
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "description": "ユーザーに付与する任意のJSONオブジェクト。デフォルトは`{}`です。"
                  },
                  "approved_emails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "このユーザーについて事前に信頼済みとするメールアドレス。例: `[\"john@example.com\"]`。"
                  },
                  "approved_phones": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "このユーザーについて事前に信頼済みとする電話番号。例: `[\"+14155551234\"]`。"
                  },
                  "issuing_states": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "事前登録された発行国（ISO 3166-1 alpha-3）。例: `[\"USA\"]`。"
                  },
                  "first_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "名。`full_name`が送信されない場合、Diditは`first_name`と`last_name`をスペースで結合して`full_name`にします。個別のフィールドとしては返されません。"
                  },
                  "last_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "姓。`full_name`が送信されない場合、`first_name`と結合して`full_name`になります。個別のフィールドとしては返されません。"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "連絡先メールアドレス。`metadata.contact.email`に保存されます（`metadata.contact`内で送信した`email`は置き換えられます）。`send_verification_link`が`true`の場合は必須で、リンクはこのアドレスに送信されます。`metadata.contact`がJSONオブジェクトでない場合、このフィールドについて`400`が返されます。"
                  },
                  "phone_number": {
                    "type": "string",
                    "maxLength": 32,
                    "description": "連絡先電話番号。`metadata.contact.phone_number`に保存されます。`metadata.contact`がJSONオブジェクトでない場合、このフィールドについて`400`が返されます。"
                  },
                  "country": {
                    "type": "string",
                    "maxLength": 3,
                    "description": "ISO 3166コード(alpha-2またはalpha-3)で指定する国(`ES`または`ESP`)。大文字に変換されて`metadata.address.country`に保存されます。`metadata.address`がJSONオブジェクトでない場合、このフィールドについて`400`が返されます。"
                  },
                  "send_verification_link": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、Diditは`workflow_id`のワークフローでその人物の認証セッションを作成し、`email`宛てにリンクをメールで送信します。`email`と`workflow_id`が必須です。スコープ付きAPIキーの場合は、`sessions`の書き込み権限も必要です。"
                  },
                  "workflow_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "検証セッションのワークフロー。`send_verification_link`が`true`の場合は必須です。個人を検証するワークフローである必要があり、法人確認 (KYB)のワークフローは拒否されます。それ以外の場合は無視されます。"
                  },
                  "language": {
                    "type": "string",
                    "maxLength": 10,
                    "description": "認証メールの言語。[対応言語](/ja/integration/supported-languages)のコードで指定します。省略した場合は英語です。`send_verification_link`が`true`でない場合は無視されます。"
                  }
                }
              },
              "examples": {
                "Basic": {
                  "summary": "基本情報で作成",
                  "value": {
                    "vendor_data": "user-abc-123",
                    "full_name": "John Doe"
                  }
                },
                "Full": {
                  "summary": "すべてのフィールド",
                  "value": {
                    "vendor_data": "user-abc-456",
                    "full_name": "Jane Smith",
                    "display_name": "Jane S.",
                    "date_of_birth": "1990-05-15",
                    "status": "ACTIVE",
                    "metadata": {
                      "tier": "premium",
                      "source": "api"
                    },
                    "approved_emails": [
                      "jane@example.com"
                    ]
                  }
                },
                "Contact details": {
                  "summary": "氏名、メールアドレス、電話番号、国",
                  "value": {
                    "vendor_data": "user-abc-789",
                    "first_name": "Julia",
                    "last_name": "Martin",
                    "email": "julia.martin@example.com",
                    "phone_number": "+34600000000",
                    "country": "ES"
                  }
                },
                "With verification link": {
                  "summary": "人物を作成し、認証リンクをメールで送信する",
                  "value": {
                    "vendor_data": "user-abc-789",
                    "first_name": "Julia",
                    "last_name": "Martin",
                    "email": "julia.martin@example.com",
                    "send_verification_link": true,
                    "workflow_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                    "language": "es"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/users/create/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"vendor_data\": \"user-abc-123\", \"full_name\": \"John Doe\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.users.create(\n    vendor_data=\"user-abc-123\",\n    full_name=\"John Doe\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.users.create({\n  vendor_data: \"user-abc-123\",\n  full_name: \"John Doe\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.Create(ctx, didit.UsersCreateParams{\n\tVendorData: \"user-abc-123\",\n\tFullName:   didit.String(\"John Doe\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.UsersCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.users().create(UsersCreateParams.builder()\n        .vendorData(\"user-abc-123\")\n        .fullName(\"John Doe\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->users->create([\n    'vendor_data' => 'user-abc-123',\n    'full_name' => 'John Doe',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.users.create(\n  vendor_data: \"user-abc-123\",\n  full_name: \"John Doe\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Users.CreateAsync(new UsersCreateParams\n{\n    VendorData = \"user-abc-123\",\n    FullName = \"John Doe\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "ユーザーが作成されました。ユーザーの完全なレコード（Get Userと同じ形式）に加えて、`verification_link`を返します。これは`send_verification_link`が`true`の場合にDiditがメールで送信した認証セッションで、それ以外の場合は`null`です。",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/UserDetailItem"
                    },
                    {
                      "type": "object",
                      "required": [
                        "verification_link"
                      ],
                      "properties": {
                        "verification_link": {
                          "type": "object",
                          "nullable": true,
                          "description": "Diditが作成し、本人にメールで送信した認証セッション。常に含まれます。`send_verification_link`が`true`でなかった場合は`null`です。",
                          "required": [
                            "session_id",
                            "session_number",
                            "status",
                            "url",
                            "workflow_id",
                            "email"
                          ],
                          "properties": {
                            "session_id": {
                              "type": "string",
                              "format": "uuid",
                              "description": "認証セッションのID。"
                            },
                            "session_number": {
                              "type": "integer",
                              "description": "アプリケーション内でのセッションの連番。"
                            },
                            "status": {
                              "type": "string",
                              "description": "セッションのステータスです。作成直後のセッションでは`Not Started`です。"
                            },
                            "url": {
                              "type": "string",
                              "format": "uri",
                              "description": "Diditが本人にメールで送信した認証リンク。"
                            },
                            "workflow_id": {
                              "type": "string",
                              "format": "uuid",
                              "nullable": true,
                              "description": "セッションで実行されるワークフロー。"
                            },
                            "email": {
                              "type": "string",
                              "format": "email",
                              "description": "リンクの送信先アドレス。"
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "examples": {
                  "Created": {
                    "value": {
                      "didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
                      "vendor_data": "user-abc-123",
                      "display_name": null,
                      "full_name": "John Doe",
                      "date_of_birth": null,
                      "effective_name": "John Doe",
                      "status": "ACTIVE",
                      "metadata": {},
                      "portrait_image_url": null,
                      "session_count": 0,
                      "approved_count": 0,
                      "declined_count": 0,
                      "in_review_count": 0,
                      "issuing_states": [],
                      "approved_emails": [],
                      "approved_phones": [],
                      "features": {},
                      "features_list": [],
                      "last_session_at": null,
                      "last_activity_at": "2025-06-15T10:30:00Z",
                      "first_session_at": null,
                      "tags": [],
                      "comments": [],
                      "created_at": "2025-06-15T10:30:00Z",
                      "updated_at": "2025-06-15T10:30:00Z",
                      "verification_link": null
                    }
                  },
                  "Created with verification link": {
                    "value": {
                      "didit_internal_id": "9b2f6c1e-3d4a-4e5f-8a7b-1c2d3e4f5a6b",
                      "vendor_data": "user-abc-789",
                      "display_name": null,
                      "full_name": "Julia Martin",
                      "date_of_birth": null,
                      "effective_name": "Julia Martin",
                      "status": "ACTIVE",
                      "metadata": {
                        "contact": {
                          "email": "julia.martin@example.com"
                        }
                      },
                      "portrait_image_url": null,
                      "session_count": 1,
                      "approved_count": 0,
                      "declined_count": 0,
                      "in_review_count": 0,
                      "issuing_states": [],
                      "approved_emails": [],
                      "approved_phones": [],
                      "features": {},
                      "features_list": [],
                      "last_session_at": "2025-06-15T10:30:00Z",
                      "last_activity_at": "2025-06-15T10:30:00Z",
                      "first_session_at": "2025-06-15T10:30:00Z",
                      "tags": [],
                      "comments": [],
                      "created_at": "2025-06-15T10:30:00Z",
                      "updated_at": "2025-06-15T10:30:00Z",
                      "verification_link": {
                        "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa7",
                        "session_number": 43762,
                        "status": "Not Started",
                        "url": "https://verify.didit.me/en/session/3FaJ9wLqX2Mz",
                        "workflow_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                        "email": "julia.martin@example.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効です。エラーはフィールドごとに返されます。主な原因は、`vendor_data`の重複、必須フィールドの欠落、不正な形式の値です。`send_verification_link: true`の場合は、`email`または`workflow_id`の欠落、不明なワークフローまたは法人確認 (KYB) のワークフロー、サポートされていない`language` (キーは`contact_details.email_lang`)、ブロックリストに登録された`vendor_data`、セッションを開始するためのクレジット不足も原因となります。何も書き込まれません。",
            "content": {
              "application/json": {
                "examples": {
                  "Duplicate": {
                    "value": {
                      "vendor_data": [
                        "A user with this vendor_data already exists."
                      ]
                    }
                  },
                  "Missing vendor_data": {
                    "value": {
                      "vendor_data": [
                        "This field is required."
                      ]
                    }
                  },
                  "Bad metadata": {
                    "value": {
                      "metadata": [
                        "Metadata must be a JSON object."
                      ]
                    }
                  },
                  "Bad status": {
                    "value": {
                      "status": [
                        "Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED"
                      ]
                    }
                  },
                  "Bad country": {
                    "value": {
                      "country": [
                        "Use an ISO 3166 country code, like ES or ESP."
                      ]
                    }
                  },
                  "Contact not an object": {
                    "value": {
                      "email": [
                        "metadata.contact must be a JSON object to store this value."
                      ]
                    }
                  },
                  "Address not an object": {
                    "value": {
                      "country": [
                        "metadata.address must be a JSON object to store this value."
                      ]
                    }
                  },
                  "Link without email or workflow": {
                    "value": {
                      "email": [
                        "An email address is required to send a verification link."
                      ],
                      "workflow_id": [
                        "Pick the workflow to send a verification link for."
                      ]
                    }
                  },
                  "Unknown workflow": {
                    "value": {
                      "workflow_id": [
                        "Invalid workflow_id."
                      ]
                    }
                  },
                  "Business workflow": {
                    "value": {
                      "workflow_id": [
                        "This workflow verifies a business. Pick a workflow that verifies a person to send them a verification link."
                      ]
                    }
                  },
                  "Blocklisted vendor_data": {
                    "value": {
                      "vendor_data": "This user or business has been blocked and cannot create new verification sessions."
                    }
                  },
                  "Insufficient credits": {
                    "value": {
                      "detail": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報が指定されていません。`x-api-key`ヘッダー（または`Authorization: Bearer`トークン）なしの`/v3/users/*`パスへのリクエストは、APIに到達する前に認証ミドルウェアによって拒否されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing credentials": {
                    "value": {
                      "detail": "You must be authenticated with a valid access token to access this endpoint."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが無効であるか取り消されている、またはこのキーではこのアプリケーションのユーザーを作成できません。スコープ付きAPIキーには`users`の書き込み権限が必要で、`send_verification_link`が`true`の場合は`sessions`の書き込み権限も必要です。何も書き込まれません。キーがない場合は`403`、誤ったキー、取り消されたキー、期限切れのキーの場合は`401`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "No sessions write": {
                    "summary": "スコープ付きキーがsessionsの書き込み権限なしで認証リンクを要求",
                    "value": {
                      "detail": "This API key has no write access to sessions."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/": {
      "post": {
        "summary": "ユーザーの顔をアップロード",
        "description": "信頼できるインポート済みの顔画像を既存のUserプロファイルに添付します。`vendor_data`でUserを作成または取得し、その`didit_internal_id`を読み取った後に使用してください。アップロードされた顔はUserプロファイルに保存され、重複検出と顔検索のためにインデックス化されます。顔のブロックリストには追加されません。",
        "operationId": "upload_user_face",
        "x-didit-sdk": {
          "resource": "users",
          "method": "upload_face",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションを所有する組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ユーザープロファイルを所有するアプリケーションのUUID。"
          },
          {
            "name": "didit_internal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Diditの内部ユーザーUUIDです。`GET /v3/users/{vendor_data}/`および`POST /v3/users/create/`が`didit_internal_id`として返します。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "image"
                ],
                "properties": {
                  "image": {
                    "type": "string",
                    "format": "byte",
                    "description": "Base64エンコードされたJPGまたはPNGの生の顔画像。`data:image/...;base64,`プレフィックスは含めないでください。デコード後の最大サイズは2MBです。"
                  },
                  "comment": {
                    "type": "string",
                    "description": "アップロードした顔に対する、オペレーターに表示される任意のメモです。",
                    "default": ""
                  }
                }
              },
              "examples": {
                "Imported face": {
                  "summary": "以前のプロバイダーからインポートした顔を添付",
                  "value": {
                    "image": "/9j/4AAQSkZJRgABAQEA...",
                    "comment": "Imported from previous KYC provider"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/vendor-users/by-id/f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418/faces/upload/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"image\": \"/9j/4AAQSkZJRgABAQEA...\", \"comment\": \"Imported from previous KYC provider\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.users.upload_face(\n    \"11111111-2222-3333-4444-555555555555\",\n    image=\"/9j/4AAQSkZJRgABAQEA...\",\n    comment=\"Imported from previous KYC provider\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.users.uploadFace(\"11111111-2222-3333-4444-555555555555\", {\n  image: \"/9j/4AAQSkZJRgABAQEA...\",\n  comment: \"Imported from previous KYC provider\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Users.UploadFace(ctx, \"11111111-2222-3333-4444-555555555555\", didit.UsersUploadFaceParams{\n\tImage:   \"/9j/4AAQSkZJRgABAQEA...\",\n\tComment: didit.String(\"Imported from previous KYC provider\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.UsersUploadFaceParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.users().uploadFace(\"11111111-2222-3333-4444-555555555555\", UsersUploadFaceParams.builder()\n        .image(\"/9j/4AAQSkZJRgABAQEA...\")\n        .comment(\"Imported from previous KYC provider\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->users->uploadFace('11111111-2222-3333-4444-555555555555', [\n    'image' => '/9j/4AAQSkZJRgABAQEA...',\n    'comment' => 'Imported from previous KYC provider',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.users.upload_face(\n  \"11111111-2222-3333-4444-555555555555\",\n  image: \"/9j/4AAQSkZJRgABAQEA...\",\n  comment: \"Imported from previous KYC provider\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Users.UploadFaceAsync(\"11111111-2222-3333-4444-555555555555\", new UsersUploadFaceParams\n{\n    Image = \"/9j/4AAQSkZJRgABAQEA...\",\n    Comment = \"Imported from previous KYC provider\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "顔がアップロードされ、ユーザープロファイルに紐付けられました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "uuid",
                    "image_url",
                    "comment",
                    "uploaded_by",
                    "created_at"
                  ],
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "アップロードされたユーザー顔レコードのUUID。"
                    },
                    "image_url": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "アップロードされた顔画像の署名付きURL。"
                    },
                    "comment": {
                      "type": "string",
                      "nullable": true,
                      "description": "顔のアップロード時に指定されたコメント。"
                    },
                    "uploaded_by": {
                      "type": "string",
                      "nullable": true,
                      "description": "利用可能な場合、アップロードしたユーザーのメールアドレスまたはアクター識別子。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "アップロードのタイムスタンプ。"
                    }
                  }
                },
                "examples": {
                  "Uploaded": {
                    "value": {
                      "uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                      "image_url": "https://signed-url.example/face.jpg",
                      "comment": "Imported from previous KYC provider",
                      "uploaded_by": "api",
                      "created_at": "2026-05-18T12:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディまたは画像が無効です。主な原因: 無効なbase64、無効な画像、検出可能な顔がない、画像が2MBを超えている、エンベディングが欠落している、またはユーザーにすでに5件の顔がアップロードされている。",
            "content": {
              "application/json": {
                "examples": {
                  "No face": {
                    "value": {
                      "image": "No face detected in the image. Please upload a clear photo with a visible face."
                    }
                  },
                  "Too many faces": {
                    "value": {
                      "detail": "Maximum of 5 faces per user reached."
                    }
                  },
                  "Too large": {
                    "value": {
                      "image": "Image exceeds maximum size of 2 MB."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing key": {
                    "value": {
                      "detail": "Authentication credentials were not provided."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報は有効ですが、このアプリケーションのユーザープロファイルに書き込むことはできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "アプリケーション内に、その`didit_internal_id`に対応するユーザーが存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。間隔を空けてから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "Request was throttled. Expected available in 30 seconds."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/update-data/": {
      "patch": {
        "summary": "認証セッションで本人確認書類から抽出されたKYCデータを更新",
        "description": "検証の完了後に、ユーザーの本人確認書類から抽出（OCR/NFC）された本人情報フィールド（誤読された氏名、日付、書類番号など）を修正します。主な呼び出し元は、自社のバックオフィスで作業するコンプライアンスアナリストや、自動照合ジョブです。ボディ内のフィールドはすべて任意です。送信したキーのみが書き込まれ、それ以外はそのまま保持されます（`PATCH`のセマンティクス）。\n\nセッションはお客様のアプリケーションに属し、ステータスが`Approved`、`Declined`、`In Review`、`Kyc Expired`のいずれかである必要があります。それ以外の状態のセッション（例: まだ`In Progress`のもの）では、`404`と`\"No Session matches the given query.\"`が返されます。これは、存在しない、または削除済みの`sessionId`に対して返される`\"Not found.\"`とは異なります。また、セッションには本人確認（KYC）レコードが必要です。ワークフローで本人確認ステップが一度も実行されていないセッションでは`404`（`\"The session does not have a KYC.\"`）が返されます。複数の本人確認ステップを持つグラフワークフローでは、`node_id`（クエリパラメーターまたはボディフィールド）で特定のステップを指定してください。省略した場合は、最新のKYCレコードが更新されます。\n\n呼び出しのたびに、2つの派生フィールドが再計算されます。`full_name`（`first_name`と`last_name`から算出）と`issuing_state_name`（`issuing_state`から算出）です。自由記述の`address`が変更された場合、サーバーがジオコーディングをやり直し、`parsed_address`を更新することもあります（サンドボックスのセッションではスキップされます）。`extra_fields`と`parsed_address`は、置き換えではなくキー単位でマージされます。`null`による削除のセマンティクスについては、各フィールドの説明を参照してください。\n\n有効なフィールドを1つ以上送信すると、`data.updated`[Webhook](/ja/integration/webhooks)（トリガーは`manual_review`）が発火します。送信した値が保存済みの値と同じ場合も同様です。値が実際に変更された場合は、変更されたフィールドの変更前と変更後の値を記録した`KYC_DATA_UPDATED`アクティビティエントリがセッションの`reviews`に追加され、[Get Decision](#get-/v3/session/-sessionId-/decision/)とコンソールのアクティビティタイムラインで確認できます。セッションのステータスと判定は再評価**されません**。結果を変更するには[Update Status](#patch-/v3/session/-sessionId-/update-status/)を使用してください。空のJSONボディ（`{}`）も受け付けられ、Webhookを発火せずに現在のKYCデータをそのまま返します。\n\nAPIキーまたはコンソールユーザートークンを受け付けます。いずれの場合も、認証情報には`write:sessions`権限が必要です。認証の失敗と権限の失敗はどちらも`403`を返します。このAPIが`401`を返すことはありません。なお、セッションの検索は認証情報のチェックより先に実行されるため、存在しない`sessionId`に対しては、認証情報がなくても`404`が返されます。このエンドポイントには、APIキーごとに毎分10リクエストという専用のレート制限があります（無効なリクエストもカウントされます）。さらに、毎分300リクエストの共通書き込み枠も適用されます。",
        "operationId": "patch_v3_session_update_data",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_data",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "抽出された書類データを修正する対象のユーザー認証 (KYC) セッションのUUIDです。法人 (KYB) セッションのIDはここでは無効です。企業データには[KYB企業データの更新](#patch-/v3/session/-sessionId-/kyb/-companyUuid-/update-data/)を使用してください。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYCレコードをパッチするワークフローグラフのノード。複数の本人確認ステップを持つグラフワークフロー向けです（ボディの`node_id`フィールドとしても指定できます）。省略した場合は、セッション上の最新のKYCレコードがパッチされます。指定したノードにKYCが存在しない場合、呼び出しは`404`（`\"The session does not have a KYC for node '<node_id>'.\"`）を返します。",
            "schema": {
              "type": "string",
              "example": "feature_ocr"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "すべてのフィールドは任意です。変更したい項目のみを送信してください。",
                "properties": {
                  "document_type": {
                    "type": "string",
                    "description": "書類種別コード。enumに記載された短縮コードに加え、検証前にサーバー側で正規化される6つの長い形式のエイリアスを受け付けます: `Passport` → `P`、`Identity Card` → `ID`、`Driver's License` → `DL`、`Residence Permit` → `RP`、`Health Insurance Card` → `HIC`、`Tax Card` → `TC`。それ以外の値(大文字の`PASSPORT`を含む)は`400`を返します。",
                    "enum": [
                      "P",
                      "DL",
                      "ID",
                      "RP",
                      "SSC",
                      "HIC",
                      "WP",
                      "TC",
                      "VISA",
                      "PSC",
                      "BC",
                      "OTHER"
                    ],
                    "nullable": true,
                    "example": "P"
                  },
                  "document_subtype": {
                    "type": "string",
                    "maxLength": 128,
                    "nullable": true,
                    "description": "書類レジストリ上の書類サブタイプ。レジストリが地域別のバリエーションを区別する場合は地域プレフィックスを含みます。"
                  },
                  "document_number": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "身分証明書に印字されている書類番号。",
                    "example": "PAB123456"
                  },
                  "personal_number": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "書類に記載がある場合の個人番号/国民識別番号(例: パスポート上のスペインのDNI)。",
                    "example": "99999999R"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "`YYYY-MM-DD`形式の生年月日。それ以外の形式では`400`が返されます。",
                    "example": "1980-01-01"
                  },
                  "date_of_issue": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "書類の発行日 (`YYYY-MM-DD`形式)。"
                  },
                  "expiration_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "書類の有効期限（`YYYY-MM-DD`形式）です。"
                  },
                  "issuing_state": {
                    "type": "string",
                    "nullable": true,
                    "description": "ISO 3166-1 alpha-3コードで表した発行国です。大文字と小文字は区別されません（`esp`は`ESP`として保存されます）。[Get Decision](#get-/v3/session/-sessionId-/decision/)に表示される人が読める形式の`issuing_state_name`は、この値から再計算されます。無効なコードの場合は`400`が返されます。",
                    "example": "ESP"
                  },
                  "first_name": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "名(複数可)。保存される`full_name`は、このエンドポイントを呼び出すたびに`first_name + ' ' + last_name`として再計算されます。",
                    "example": "Carmen"
                  },
                  "last_name": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "姓（複数可）。再計算される`full_name`にも使用されます。",
                    "example": "Espanola Espanola"
                  },
                  "gender": {
                    "type": "string",
                    "enum": [
                      "M",
                      "F",
                      "U"
                    ],
                    "nullable": true,
                    "description": "書類に記載されている性別：`M`（男性）、`F`（女性）、または`U`（不明）。`X`を含むそれ以外の値を指定すると`400`が返されます。"
                  },
                  "address": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "書類に印字されているとおりの自由記述の住所。この値が変更され（サンドボックス以外のセッションのみ）、構造化された住所がまだ存在しないか不完全な場合、サーバーはレスポンスを返す前に同期的に再ジオコーディングを行います。200のボディには、更新済みの`parsed_address`がすでに反映されています。再ジオコーディングには、KYCレコードに`issuing_state`が存在することも必要です。"
                  },
                  "place_of_birth": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "書類に印字された出生地。"
                  },
                  "nationality": {
                    "type": "string",
                    "maxLength": 32,
                    "nullable": true,
                    "description": "書類に記載されている国籍。最大32文字の自由テキストです。通常はISO 3166-1 alpha-3コード（例: `ESP`）ですが、その形式であるかどうかは検証されません。"
                  },
                  "marital_status": {
                    "type": "string",
                    "enum": [
                      "SINGLE",
                      "MARRIED",
                      "DIVORCED",
                      "WIDOWED",
                      "UNKNOWN"
                    ],
                    "description": "書類に記載されている場合の婚姻状況です。それ以外の値を指定すると`400`が返されます。"
                  },
                  "extra_fields": {
                    "type": "object",
                    "additionalProperties": true,
                    "nullable": true,
                    "description": "書類固有の追加フィールド（例: `blood_group`、`dl_categories`、`mrz_string`）に対するキーごとの上書き値です。キーは既存の上書きマップにマージされます。値を指定してキーを送信するとその値が設定され、`null` / `\"\"`を指定して送信するとマージ後のビューからそのキーが削除されます。フィールド全体を`null`として送信すると、これまでに適用されたすべての上書きがクリアされます。JSONオブジェクトである必要があり、そうでない場合は`400`が返されます。レスポンスは常にマージ後のビュー（OCRで抽出された値に上書きを適用したもの）を返します。"
                  },
                  "parsed_address": {
                    "type": "object",
                    "nullable": true,
                    "description": "構造化された住所。受け付けるネストされたキーは`address_type`、`city`、`region`、`street_1`、`street_2`、`postal_code`、`country`のみで、それ以外のキーを指定すると`400`が返されます。キーごとの動作: 値を指定するとそのキーが設定され、`null`を指定するとそのキーが削除されます。`formatted_address`は、`street_1`、`street_2`、`city`、`region`、`postal_code`、`country`を連結してサーバー側で再計算され、レスポンスで返されます。直接設定することはできません。",
                    "properties": {
                      "address_type": {
                        "type": "string",
                        "nullable": true,
                        "description": "自由形式の住所分類（例：`home`）。"
                      },
                      "city": {
                        "type": "string",
                        "nullable": true,
                        "example": "Madrid"
                      },
                      "region": {
                        "type": "string",
                        "nullable": true,
                        "description": "州、県、自治州。"
                      },
                      "street_1": {
                        "type": "string",
                        "nullable": true,
                        "example": "Avda de Madrid 34"
                      },
                      "street_2": {
                        "type": "string",
                        "nullable": true
                      },
                      "postal_code": {
                        "type": "string",
                        "nullable": true,
                        "example": "28013"
                      },
                      "country": {
                        "type": "string",
                        "nullable": true,
                        "description": "ISO 3166-1 alpha-2国コード。小文字の入力は大文字に正規化され、alpha-3コードは`400`で拒否されます。",
                        "example": "ES"
                      }
                    }
                  }
                }
              },
              "examples": {
                "Correct name and DOB": {
                  "summary": "OCRで誤読された氏名、生年月日、構造化住所を修正",
                  "value": {
                    "first_name": "Carmen",
                    "last_name": "Espanola Espanola",
                    "date_of_birth": "1980-01-01",
                    "issuing_state": "ESP",
                    "marital_status": "MARRIED",
                    "extra_fields": {
                      "blood_group": "O+"
                    },
                    "parsed_address": {
                      "street_1": "Avda de Madrid 34",
                      "city": "Madrid",
                      "postal_code": "28013",
                      "country": "ES"
                    }
                  }
                },
                "Remove an extra field": {
                  "summary": "追加フィールドのキーを1つ削除し、残りは保持",
                  "value": {
                    "extra_fields": {
                      "blood_group": null
                    }
                  }
                },
                "Long-form document type": {
                  "summary": "長い形式のエイリアスは短いコード（ここではP）に正規化されます",
                  "value": {
                    "document_type": "Passport"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "KYCデータが更新されました。送信したフィールドだけでなく、**現在のKYCレコード全体**（更新可能なすべてのフィールドとその保存値、およびマージされた`extra_fields`と現在の`parsed_address`）を返します。ペイロードに有効なフィールドが1つ以上含まれていた場合、`data.updated`のWebhookが発火します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "document_type": {
                      "type": "string",
                      "description": "書類種別コード。enumに記載された短縮コードに加え、検証前にサーバー側で正規化される6つの長い形式のエイリアスを受け付けます: `Passport` → `P`、`Identity Card` → `ID`、`Driver's License` → `DL`、`Residence Permit` → `RP`、`Health Insurance Card` → `HIC`、`Tax Card` → `TC`。それ以外の値(大文字の`PASSPORT`を含む)は`400`を返します。",
                      "enum": [
                        "P",
                        "DL",
                        "ID",
                        "RP",
                        "SSC",
                        "HIC",
                        "WP",
                        "TC",
                        "VISA",
                        "PSC",
                        "BC",
                        "OTHER"
                      ],
                      "nullable": true,
                      "example": "P"
                    },
                    "document_subtype": {
                      "type": "string",
                      "maxLength": 128,
                      "nullable": true,
                      "description": "書類レジストリ上の書類サブタイプ。レジストリが地域別のバリエーションを区別する場合は地域プレフィックスを含みます。"
                    },
                    "document_number": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "身分証明書に印字されている書類番号。",
                      "example": "PAB123456"
                    },
                    "personal_number": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "書類に記載がある場合の個人番号/国民識別番号(例: パスポート上のスペインのDNI)。",
                      "example": "99999999R"
                    },
                    "date_of_birth": {
                      "type": "string",
                      "format": "date",
                      "nullable": true,
                      "description": "`YYYY-MM-DD`形式の生年月日。それ以外の形式では`400`が返されます。",
                      "example": "1980-01-01"
                    },
                    "date_of_issue": {
                      "type": "string",
                      "format": "date",
                      "nullable": true,
                      "description": "書類の発行日 (`YYYY-MM-DD`形式)。"
                    },
                    "expiration_date": {
                      "type": "string",
                      "format": "date",
                      "nullable": true,
                      "description": "書類の有効期限（`YYYY-MM-DD`形式）です。"
                    },
                    "issuing_state": {
                      "type": "string",
                      "nullable": true,
                      "description": "ISO 3166-1 alpha-3コードで表した発行国です。大文字と小文字は区別されません（`esp`は`ESP`として保存されます）。[Get Decision](#get-/v3/session/-sessionId-/decision/)に表示される人が読める形式の`issuing_state_name`は、この値から再計算されます。無効なコードの場合は`400`が返されます。",
                      "example": "ESP"
                    },
                    "first_name": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "名(複数可)。保存される`full_name`は、このエンドポイントを呼び出すたびに`first_name + ' ' + last_name`として再計算されます。",
                      "example": "Carmen"
                    },
                    "last_name": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "姓（複数可）。再計算される`full_name`にも使用されます。",
                      "example": "Espanola Espanola"
                    },
                    "gender": {
                      "type": "string",
                      "enum": [
                        "M",
                        "F",
                        "U"
                      ],
                      "nullable": true,
                      "description": "書類に記載されている性別：`M`（男性）、`F`（女性）、または`U`（不明）。`X`を含むそれ以外の値を指定すると`400`が返されます。"
                    },
                    "address": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "書類に印字されているとおりの自由記述の住所。この値が変更され（サンドボックス以外のセッションのみ）、構造化された住所がまだ存在しないか不完全な場合、サーバーは同じリクエストのバックグラウンドで再ジオコーディングを行い、`parsed_address`をジオコーダーの結果で上書きすることがあります。"
                    },
                    "place_of_birth": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "書類に印字された出生地。"
                    },
                    "nationality": {
                      "type": "string",
                      "maxLength": 32,
                      "nullable": true,
                      "description": "書類に記載されている国籍。最大32文字の自由テキストです。通常はISO 3166-1 alpha-3コード（例: `ESP`）ですが、その形式であるかどうかは検証されません。"
                    },
                    "marital_status": {
                      "type": "string",
                      "enum": [
                        "SINGLE",
                        "MARRIED",
                        "DIVORCED",
                        "WIDOWED",
                        "UNKNOWN"
                      ],
                      "description": "書類に記載されている場合の婚姻状況です。それ以外の値を指定すると`400`が返されます。"
                    },
                    "extra_fields": {
                      "type": "object",
                      "additionalProperties": true,
                      "nullable": true,
                      "description": "書類の追加フィールドをマージしたビューです。OCRで抽出された値に、オペレーターによるすべての上書きを適用したものです。`null`の上書きで削除されたキーは、このマップに含まれません。"
                    },
                    "parsed_address": {
                      "type": "object",
                      "nullable": true,
                      "description": "現在の構造化住所（内部管理用のキーを除去したもの）。存在しない場合は`null`です。編集可能な7つのキーに加え、再計算された`formatted_address`を含みます。",
                      "properties": {
                        "address_type": {
                          "type": "string",
                          "nullable": true,
                          "description": "自由形式の住所分類（例：`home`）。"
                        },
                        "city": {
                          "type": "string",
                          "nullable": true,
                          "example": "Madrid"
                        },
                        "region": {
                          "type": "string",
                          "nullable": true,
                          "description": "州、県、自治州。"
                        },
                        "street_1": {
                          "type": "string",
                          "nullable": true,
                          "example": "Avda de Madrid 34"
                        },
                        "street_2": {
                          "type": "string",
                          "nullable": true
                        },
                        "postal_code": {
                          "type": "string",
                          "nullable": true,
                          "example": "28013"
                        },
                        "country": {
                          "type": "string",
                          "nullable": true,
                          "description": "ISO 3166-1 alpha-2国コード。小文字の入力は大文字に正規化され、alpha-3コードは`400`で拒否されます。",
                          "example": "ES"
                        },
                        "formatted_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "構造化された住所を連結した、人が読める形式。`parsed_address`を編集するたびにサーバー側で再計算されます。",
                          "example": "Avda de Madrid 34, Madrid, 28013, ES"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Updated KYC": {
                    "summary": "修正後のKYCの完全なレコード",
                    "value": {
                      "document_type": "P",
                      "document_subtype": null,
                      "document_number": "PAB123456",
                      "personal_number": "99999999R",
                      "date_of_birth": "1980-01-01",
                      "date_of_issue": "2021-02-09",
                      "expiration_date": "2031-02-08",
                      "issuing_state": "ESP",
                      "first_name": "Carmen",
                      "last_name": "Espanola Espanola",
                      "gender": "F",
                      "address": "AVDA DE MADRID 34, MADRID, MADRID 28013",
                      "place_of_birth": "MADRID",
                      "nationality": "ESP",
                      "marital_status": "MARRIED",
                      "extra_fields": {
                        "mrz_string": "P<ESPESPANOLA<<CARMEN<<<<<",
                        "blood_group": "O+"
                      },
                      "parsed_address": {
                        "city": "Madrid",
                        "street_1": "Avda de Madrid 34",
                        "postal_code": "28013",
                        "country": "ES",
                        "formatted_address": "Avda de Madrid 34, Madrid, 28013, ES"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドエラーは`{\"<field>\": [\"<message>\"]}`の形式で返されます。ネストされた`parsed_address` / `extra_fields`のキーに関するエラーはオブジェクト値を使用します：`{\"parsed_address\": {\"<key>\": \"<message>\"}}`。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid gender": {
                    "summary": "genderはM、F、Uのいずれかである必要があります",
                    "value": {
                      "gender": [
                        "\"X\" is not a valid choice."
                      ]
                    }
                  },
                  "Invalid document type": {
                    "summary": "短縮コードでも長形式のエイリアスでもありません",
                    "value": {
                      "document_type": [
                        "\"PASSPORT\" is not a valid choice."
                      ]
                    }
                  },
                  "Invalid issuing state": {
                    "summary": "issuing_stateがISO 3166-1 alpha-3ではない",
                    "value": {
                      "issuing_state": [
                        "Invalid ISO 3166-1 alpha-3 country code for issuing_state."
                      ]
                    }
                  },
                  "Invalid marital status": {
                    "summary": "marital_statusが列挙値に含まれていない",
                    "value": {
                      "marital_status": [
                        "\"ENGAGED\" is not a valid choice."
                      ]
                    }
                  },
                  "Bad date format": {
                    "summary": "日付はYYYY-MM-DD形式である必要があります",
                    "value": {
                      "date_of_birth": [
                        "Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
                      ]
                    }
                  },
                  "Unsupported parsed_address key": {
                    "summary": "ドキュメントに記載された7つのキーのみ使用できます",
                    "value": {
                      "parsed_address": {
                        "zipcode": "Unsupported key. Allowed keys: address_type, city, region, street_1, street_2, postal_code, country"
                      }
                    }
                  },
                  "Invalid parsed_address country": {
                    "summary": "ネストされたcountryはalpha-3ではなくalpha-2である必要があります",
                    "value": {
                      "parsed_address": {
                        "country": "Invalid ISO 3166-1 alpha-2 country code."
                      }
                    }
                  },
                  "extra_fields not an object": {
                    "summary": "extra_fieldsはJSONオブジェクトである必要があります",
                    "value": {
                      "extra_fields": [
                        "This field must be a JSON object."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "認証情報にwrite:sessionsがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なセッション、編集できない状態のセッション、またはパッチを適用するKYCレコードがありません。各ケースには個別の`detail`メッセージがあります(例を参照)。不明なセッションの照会は認証情報のチェックより前に実行されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションがアプリケーション内に存在しません(または削除されています)",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Wrong session state": {
                    "summary": "セッションは存在しますが、Approved / Declined / In Review / Kyc Expiredのいずれでもありません",
                    "value": {
                      "detail": "No Session matches the given query."
                    }
                  },
                  "No KYC record": {
                    "summary": "ワークフローで本人確認のステップが実行されませんでした",
                    "value": {
                      "detail": "The session does not have a KYC."
                    }
                  },
                  "No KYC for node": {
                    "summary": "node_idが指定されたが、対応するKYCが存在しない",
                    "value": {
                      "detail": "The session does not have a KYC for node 'feature_missing'."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "専用のレート制限を超過しました。上限はAPIキーごとに1分あたり10件のKYCデータ更新です（拒否されたリクエストも上限にカウントされます）。共有の300/minの書き込み上限も、独自のメッセージでトリガーされる場合があります。再試行する前に、`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "KYCの更新可能回数の上限に達しました",
                    "value": {
                      "detail": "Session KYC data update rate limit exceeded. You can make up to 10 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-data/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"first_name\": \"Carmen\",\n    \"last_name\": \"Espanola Espanola\",\n    \"date_of_birth\": \"1980-01-01\",\n    \"issuing_state\": \"ESP\",\n    \"parsed_address\": {\n      \"street_1\": \"Avda de Madrid 34\",\n      \"city\": \"Madrid\",\n      \"postal_code\": \"28013\",\n      \"country\": \"ES\"\n    }\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_data(\n    \"11111111-2222-3333-4444-555555555555\",\n    date_of_birth=\"1980-01-01\",\n    issuing_state=\"ESP\",\n    first_name=\"Carmen\",\n    last_name=\"Espanola Espanola\",\n    marital_status=\"MARRIED\",\n    extra_fields={\"blood_group\": \"O+\"},\n    parsed_address={\n        \"city\": \"Madrid\",\n        \"street_1\": \"Avda de Madrid 34\",\n        \"postal_code\": \"28013\",\n        \"country\": \"ES\",\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateData(\"11111111-2222-3333-4444-555555555555\", {\n  date_of_birth: \"1980-01-01\",\n  issuing_state: \"ESP\",\n  first_name: \"Carmen\",\n  last_name: \"Espanola Espanola\",\n  marital_status: \"MARRIED\",\n  extra_fields: { blood_group: \"O+\" },\n  parsed_address: {\n    city: \"Madrid\",\n    street_1: \"Avda de Madrid 34\",\n    postal_code: \"28013\",\n    country: \"ES\",\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateData(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdateDataParams{\n\tDateOfBirth:   didit.String(\"1980-01-01\"),\n\tIssuingState:  didit.String(\"ESP\"),\n\tFirstName:     didit.String(\"Carmen\"),\n\tLastName:      didit.String(\"Espanola Espanola\"),\n\tMaritalStatus: didit.Some(didit.SessionsUpdateDataParamsMaritalStatus(\"MARRIED\")),\n\tExtraFields:   didit.Some(map[string]any{\"blood_group\": \"O+\"}),\n\tParsedAddress: didit.Some(didit.SessionsUpdateDataParamsParsedAddress{\n\t\tCity:       didit.String(\"Madrid\"),\n\t\tStreet1:    didit.String(\"Avda de Madrid 34\"),\n\t\tPostalCode: didit.String(\"28013\"),\n\t\tCountry:    didit.String(\"ES\"),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SessionsUpdateDataParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateData(\"11111111-2222-3333-4444-555555555555\", SessionsUpdateDataParams.builder()\n        .dateOfBirth(LocalDate.parse(\"1980-01-01\"))\n        .issuingState(\"ESP\")\n        .firstName(\"Carmen\")\n        .lastName(\"Espanola Espanola\")\n        .maritalStatus(SessionsUpdateDataParams.MaritalStatus.of(\"MARRIED\"))\n        .extraFields(Map.of(\"blood_group\", \"O+\"))\n        .parsedAddress(SessionsUpdateDataParams.ParsedAddress.builder()\n                .city(\"Madrid\")\n                .street1(\"Avda de Madrid 34\")\n                .postalCode(\"28013\")\n                .country(\"ES\")\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateData('11111111-2222-3333-4444-555555555555', [\n    'date_of_birth' => '1980-01-01',\n    'issuing_state' => 'ESP',\n    'first_name' => 'Carmen',\n    'last_name' => 'Espanola Espanola',\n    'marital_status' => 'MARRIED',\n    'extra_fields' => ['blood_group' => 'O+'],\n    'parsed_address' => [\n        'city' => 'Madrid',\n        'street_1' => 'Avda de Madrid 34',\n        'postal_code' => '28013',\n        'country' => 'ES',\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_data(\n  \"11111111-2222-3333-4444-555555555555\",\n  date_of_birth: \"1980-01-01\",\n  issuing_state: \"ESP\",\n  first_name: \"Carmen\",\n  last_name: \"Espanola Espanola\",\n  marital_status: \"MARRIED\",\n  extra_fields: { blood_group: \"O+\" },\n  parsed_address: {\n    city: \"Madrid\",\n    street_1: \"Avda de Madrid 34\",\n    postal_code: \"28013\",\n    country: \"ES\",\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateDataAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsUpdateDataParams\n{\n    DateOfBirth = \"1980-01-01\",\n    IssuingState = \"ESP\",\n    FirstName = \"Carmen\",\n    LastName = \"Espanola Espanola\",\n    MaritalStatus = new SessionsUpdateDataParamsMaritalStatus(\"MARRIED\"),\n    ExtraFields = new Dictionary<string, object> { [\"blood_group\"] = \"O+\" },\n    ParsedAddress = new SessionsUpdateDataParamsParsedAddress\n    {\n        City = \"Madrid\",\n        Street1 = \"Avda de Madrid 34\",\n        PostalCode = \"28013\",\n        Country = \"ES\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/features/{nodeId}/update-status/": {
      "patch": {
        "summary": "個別の機能（ステップ）のステータスを更新",
        "description": "セッション内の単一の認証機能（ステップ）のステータスを設定します。対象の機能はワークフローグラフの`nodeId`で指定します。ステップにノードがないグラフ形式以外のワークフローでは、`default`を使用し、あわせて`feature_type`を渡して対象のステップを指定します。\n\nユーザー認証（KYC）と法人確認（KYB）の両方のセッション、およびすべてのステップタイプで利用できます。対象はID/OCR、ライブネス検知、顔照合、NFC、AML、住所証明、電話番号、メールアドレス、データベース検証、アンケート、およびKYBの登記・書類・主要人物のチェックです。このエンドポイントは、スタンドアロンのAPIセッション（`session_type = API`）では**利用できません**。\n\n`new_status`は`Approved`、`Declined`、`In Review`のいずれかである必要があり、かつ機能の現在のステータスと異なる必要があります。\n\n**オーバーライドが適用されるタイミング。** `defer_until_flow_finishes`を指定しない場合（または`false`の場合）、オーバーライドは従来どおり即座に適用されます。本人がまだフロー内にいる場合は`forced`として記録されます。本人がまだフロー内にいる間（セッションが`Not Started`、`In Progress`、`Resubmitted`のいずれかで、まだ完了していない状態）に`defer_until_flow_finishes: true`を指定すると、オーバーライドは`pending_until_flow_finishes`として保存され、フローが独自の判定に達した後、フローの完了時に適用されます。フローがすでに終了しているセッションでは、どちらの場合も即座に適用されます。待機中のオーバーライドは、本人が完了前に該当ステップをやり直した場合、同じチェックに対する新しいオーバーライドで置き換えられた場合、セッションが未完了のままフローを離れた場合（放棄、期限切れ、またはフロー途中での判定）、または`POST /v3/session/{sessionId}/features/overrides/{overrideId}/cancel/`でキャンセルした場合に、適用されずにキャンセルされます。セッションのオーバーライド一覧は`GET /v3/session/{sessionId}/features/overrides/`で取得できます。\n\n**セッションへの影響。** すでに判定があるセッションでは判定はそのまま維持され、変更されるのはチェックのみです。セッションにまだ判定がなく、ワークフローがまさにこのステップを待機している場合、オーバーライドを適用するとそのステップが完了します。ワークフローが先に進み、後続のステップが実行され、ステータスノードがセッションの判定を設定して`status.updated`を発火させることがあります。\n\n**Webhookとアクティビティ。** `data.updated`のWebhookは、オーバーライドが適用されたとき（即座に、またはフローの完了時）に発火し、待機中やキャンセル時には決して発火しません。すべてのオーバーライドは、実行者の情報とともに、セッションのアクティビティに`FEATURE_OVERRIDE_PENDING`、`FEATURE_OVERRIDE_APPLIED`、`FEATURE_OVERRIDE_CANCELLED`のいずれかとして記録されます。リクエストのエントリには指定した`comment`が含まれます。\n\nAPIキー（`x-api-key`）、または`write:sessions`権限を持つユーザー認可ヘッダーで認証します。スコープ付きAPIキーには、判定への書き込みアクセスが必要です。",
        "operationId": "patch_v3_session_update_feature_status",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_feature_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。サービスは両方のセッションタイプにわたってIDを解決します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "in": "path",
            "name": "nodeId",
            "required": true,
            "description": "更新する機能のワークフローグラフのノードID（例: `feature_ocr_1`）。機能にノードIDがない非グラフ（単一ステップ）のワークフローでは、リテラル値`default`を使用してください。",
            "schema": {
              "type": "string",
              "example": "feature_ocr_1"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "new_status"
                ],
                "properties": {
                  "new_status": {
                    "type": "string",
                    "description": "この機能の変更後のステータス。現在の値と異なる必要があります。",
                    "enum": [
                      "Approved",
                      "Declined",
                      "In Review"
                    ],
                    "example": "Approved"
                  },
                  "comment": {
                    "type": "string",
                    "description": "この機能変更について、セッションのレビュー履歴に記録される任意の自由記述のメモです。",
                    "example": "Document manually verified by compliance."
                  },
                  "feature_type": {
                    "type": "string",
                    "enum": [
                      "ID_VERIFICATION",
                      "OCR",
                      "OCR_BACK",
                      "NFC",
                      "LIVENESS",
                      "FACE",
                      "AGE_ESTIMATION",
                      "AGE_VERIFICATION",
                      "FACE_SEARCH",
                      "FACE_MATCH",
                      "IP_ANALYSIS",
                      "AML",
                      "PHONE",
                      "PHONE_VERIFICATION",
                      "EMAIL",
                      "EMAIL_VERIFICATION",
                      "POA",
                      "PROOF_OF_ADDRESS",
                      "DATABASE_VALIDATION",
                      "DATA_VALIDATION",
                      "QUESTIONNAIRE",
                      "DOCUMENT_AI",
                      "KYB_REGISTRY",
                      "KYB_DOCUMENTS",
                      "KYB_KEY_PEOPLE",
                      "BANK_VERIFICATION",
                      "GEOLOCATION"
                    ],
                    "description": "対象とするステップの種類。グラフ以外のワークフロー（`nodeId` = `default`）では、すべてのステップに個別のノードがないため必須です。それ以外の場合は任意です。不明な値を指定すると`400`が返されます。",
                    "example": "LIVENESS"
                  },
                  "defer_until_flow_finishes": {
                    "type": "boolean",
                    "default": false,
                    "description": "本人がまだフロー内にいる間は、オーバーライドを即座に適用せず`pending_until_flow_finishes`として保存し、フローの終了時に適用します。省略した場合または`false`の場合、オーバーライドは即座に適用されます。フローがすでに終了しているセッションでは、どちらの場合も即座に適用されます。",
                    "example": false
                  }
                }
              },
              "examples": {
                "Apply Now": {
                  "summary": "IDステップを即座に承認する",
                  "value": {
                    "new_status": "Approved",
                    "comment": "Document manually verified by compliance."
                  }
                },
                "Wait For The Flow": {
                  "summary": "本人がフローを完了した時点でライブネスステップを承認する",
                  "value": {
                    "new_status": "Approved",
                    "comment": "Liveness retried with a reviewer present.",
                    "defer_until_flow_finishes": true
                  }
                },
                "Non-graph Workflow": {
                  "summary": "ノードのないワークフローのライブネスステップを対象にする(nodeId = default)",
                  "value": {
                    "new_status": "In Review",
                    "feature_type": "LIVENESS"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "オーバーライドが記録されました。`new_status`は保存されているチェックのステータスです。オーバーライドが適用された場合はリクエストされたステータス、フローの完了を待っている間は変更前のステータスになります。どちらになったかは`override`で示されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "node_id": {
                      "type": "string",
                      "nullable": true,
                      "description": "更新されたステップのワークフローノード。ノードのないステップ（グラフ形式でないワークフローにおける`default`パス）の場合は`null`。",
                      "example": "feature_ocr_1"
                    },
                    "feature_type": {
                      "type": "string",
                      "description": "更新された機能のモデル名（例: `KYC`、`Face`、`FaceMatch`、`AML`、`POA`）。",
                      "example": "KYC"
                    },
                    "new_status": {
                      "type": "string",
                      "description": "保存されているチェックのステータス。オーバーライドが適用された後はリクエストされたステータス、オーバーライドがフローの完了を待っている間は変更前のステータスです。",
                      "example": "Approved"
                    },
                    "override": {
                      "$ref": "#/components/schemas/FeatureStatusOverride"
                    }
                  },
                  "required": [
                    "session_id",
                    "node_id",
                    "feature_type",
                    "new_status",
                    "override"
                  ]
                },
                "examples": {
                  "Applied": {
                    "summary": "オーバーライドが即時に適用されました",
                    "value": {
                      "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                      "node_id": "feature_ocr_1",
                      "feature_type": "KYC",
                      "new_status": "Approved",
                      "override": {
                        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
                        "node_id": "feature_ocr_1",
                        "feature_type": "",
                        "feature_model": "KYC",
                        "previous_status": "In Review",
                        "new_status": "Approved",
                        "state": "applied",
                        "forced": false,
                        "reason": "Document manually verified by compliance.",
                        "requested_by": {
                          "email": "reviewer@example.com",
                          "name": "Alex Reviewer",
                          "type": "CONSOLE_USER"
                        },
                        "requested_at": "2026-10-13T09:15:00Z",
                        "applied_at": "2026-10-13T09:15:00Z",
                        "cancelled_at": null,
                        "cancel_reason": null
                      }
                    }
                  },
                  "Waiting For The Flow": {
                    "summary": "本人がまだフロー内にいる間のdefer_until_flow_finishes",
                    "value": {
                      "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                      "node_id": "feature_liveness_1",
                      "feature_type": "Face",
                      "new_status": "Declined",
                      "override": {
                        "id": "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
                        "node_id": "feature_liveness_1",
                        "feature_type": "",
                        "feature_model": "Face",
                        "previous_status": "Declined",
                        "new_status": "Approved",
                        "state": "pending_until_flow_finishes",
                        "forced": false,
                        "reason": "Liveness retried with a reviewer present.",
                        "requested_by": {
                          "email": "reviewer@example.com",
                          "name": "Alex Reviewer",
                          "type": "CONSOLE_USER"
                        },
                        "requested_at": "2026-10-13T09:15:00Z",
                        "applied_at": null,
                        "cancelled_at": null,
                        "cancel_reason": null
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。`new_status`が無効または変更されていない場合、`feature_type`が不明な場合、またはセッションがスタンドアロンのAPIセッションである場合に返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Same Status": {
                    "summary": "new_statusが現在のステータスと同じ",
                    "value": {
                      "new_status": [
                        "The new status is the same as the current status."
                      ]
                    }
                  },
                  "API Session": {
                    "summary": "スタンドアロンAPIセッションでは機能のステータスを変更できません",
                    "value": [
                      "Cannot change feature status for API sessions."
                    ]
                  },
                  "Unknown feature_type": {
                    "summary": "feature_typeが既知のステップタイプではありません",
                    "value": {
                      "feature_type": [
                        "Unknown feature_type 'SELFIE'."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "APIキーにwrite:sessionsがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped Key Without Access": {
                    "summary": "判定への書き込みアクセス権を持たないスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが見つからないか、指定された`nodeId`の機能がセッションにありません。",
            "content": {
              "application/json": {
                "examples": {
                  "Session Not Found": {
                    "summary": "不明なsession_id",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "Feature Not Found": {
                    "summary": "このnode_idの機能はありません",
                    "value": {
                      "detail": "No feature found with node_id 'feature_ocr_1' in this session."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/features/feature_ocr_1/update-status/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"new_status\": \"Approved\",\n    \"comment\": \"Document manually verified by compliance.\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_feature_status(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"feature_ocr_1\",\n    new_status=\"Approved\",\n    comment=\"Document manually verified by compliance.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateFeatureStatus(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_ocr_1\",\n  {\n    new_status: \"Approved\",\n    comment: \"Document manually verified by compliance.\",\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateFeatureStatus(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_ocr_1\", didit.SessionsUpdateFeatureStatusParams{\n\tNewStatus: \"Approved\",\n\tComment:   didit.String(\"Document manually verified by compliance.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsUpdateFeatureStatusParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateFeatureStatus(\"11111111-2222-3333-4444-555555555555\", \"feature_ocr_1\", SessionsUpdateFeatureStatusParams.builder()\n        .newStatus(SessionsUpdateFeatureStatusParams.NewStatus.of(\"Approved\"))\n        .comment(\"Document manually verified by compliance.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateFeatureStatus('11111111-2222-3333-4444-555555555555', 'feature_ocr_1', [\n    'new_status' => 'Approved',\n    'comment' => 'Document manually verified by compliance.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_feature_status(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_ocr_1\",\n  new_status: \"Approved\",\n  comment: \"Document manually verified by compliance.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateFeatureStatusAsync(\"11111111-2222-3333-4444-555555555555\", \"feature_ocr_1\", new SessionsUpdateFeatureStatusParams\n{\n    NewStatus = \"Approved\",\n    Comment = \"Document manually verified by compliance.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/update-aml-hit-status/": {
      "patch": {
        "summary": "AMLヒットのレビューステータスを更新",
        "description": "AMLスクリーニングで返された**単一のAMLヒット**(制裁、PEP、ウォッチリスト、ネガティブメディアとの一致の可能性)のレビューステータスを、セッション全体の判定を変更せずに設定します。ヒットは`hit_id`(AMLチェックの`hits`配列内のエントリの`id`。セッションの判定を参照)で指定します。以前の形式で返されたヒットIDも引き続き受け付けられます。レスポンスでは常に現在の`id`でヒットが示されます。\n\n`review_status`は`Unreviewed`、`Confirmed Match`、`False Positive`、`Inconclusive`のいずれかです。レビュアーの判定は継続的なモニタリングによる更新後も保持されるため、`False Positive`とマークしたヒットは、プロバイダーが再スクリーニングしてもそのまま維持されます。\n\n呼び出しが成功すると、`data.updated` Webhookが送信され、セッションのレビュー履歴にアクティビティエントリ(実行者の記録付き)が追加されます。複数のAMLチェックを含むグラフワークフローでは、`node_id`を渡して特定のチェックを指定します。\n\nAPIキー(`x-api-key`)またはユーザー認可ヘッダーで認証します。いずれも`write:sessions`権限を持っている必要があります。",
        "operationId": "patch_v3_session_update_aml_hit_status",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_aml_hit_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。サービスは両方のセッションタイプにわたってIDを解決します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "in": "query",
            "name": "node_id",
            "required": false,
            "description": "ワークフローグラフのノードID。セッションに複数のAMLチェック（ノードごとに1つ）がある場合にのみ必須です。AMLチェックが1つだけのセッションでは省略してください。",
            "schema": {
              "type": "string",
              "example": "feature_aml_1"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "hit_id",
                  "review_status"
                ],
                "properties": {
                  "hit_id": {
                    "type": "string",
                    "description": "AMLチェックの`hits`配列に含まれるヒットの`id`（`hit_...`）です。以前の形式で返されたヒットIDも引き続き受け付けます。",
                    "example": "hit_7c1e9a40b2d35f86e0a4c912"
                  },
                  "review_status": {
                    "type": "string",
                    "description": "ヒットの新しいレビューステータス。",
                    "enum": [
                      "Unreviewed",
                      "Confirmed Match",
                      "False Positive",
                      "Inconclusive"
                    ],
                    "example": "False Positive"
                  },
                  "node_id": {
                    "type": "string",
                    "description": "任意のグラフノードIDです。セッションに複数のAMLチェックがある場合に、ここまたはクエリパラメーターとして指定します。",
                    "example": "feature_aml_1"
                  }
                }
              },
              "example": {
                "hit_id": "hit_7c1e9a40b2d35f86e0a4c912",
                "review_status": "False Positive"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ヒットのレビューステータスが更新されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message",
                    "hit_id",
                    "review_status"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "常に`Hit status updated successfully`です。"
                    },
                    "hit_id": {
                      "type": "string",
                      "description": "更新されたヒットの`id`で、セッションの判定が返す形式です。リクエストが以前の形式のIDでヒットを指定した場合も同様です。"
                    },
                    "review_status": {
                      "type": "string",
                      "enum": [
                        "Unreviewed",
                        "Confirmed Match",
                        "False Positive",
                        "Inconclusive"
                      ],
                      "description": "ヒットに現在保存されているレビューステータスです。"
                    }
                  }
                },
                "example": {
                  "message": "Hit status updated successfully",
                  "hit_id": "hit_7c1e9a40b2d35f86e0a4c912",
                  "review_status": "False Positive"
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：`hit_id`が空、または`review_status`が許可された値のいずれでもありません。",
            "content": {
              "application/json": {
                "example": {
                  "review_status": [
                    "\"Maybe\" is not a valid choice."
                  ]
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "APIキーにwrite:sessionsがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが見つからない、セッションにAMLチェックがない（任意で指定した`node_id`について）、または`hit_id`に一致するヒットがありません。",
            "content": {
              "application/json": {
                "examples": {
                  "No AML Check": {
                    "summary": "セッションにAMLチェックがありません",
                    "value": {
                      "detail": "The session does not have an AML check."
                    }
                  },
                  "Hit Not Found": {
                    "summary": "不明なhit_id",
                    "value": {
                      "detail": "Hit with ID 'hit_9d2e7f41c0a8b3e65d1f0c47' not found in the AML check."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-aml-hit-status/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"hit_id\": \"abc123\",\n    \"review_status\": \"False Positive\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_aml_hit_status(\n    \"11111111-2222-3333-4444-555555555555\",\n    hit_id=\"hit_7c1e9a40b2d35f86e0a4c912\",\n    review_status=\"False Positive\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateAmlHitStatus(\"11111111-2222-3333-4444-555555555555\", {\n  hit_id: \"hit_7c1e9a40b2d35f86e0a4c912\",\n  review_status: \"False Positive\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateAMLHitStatus(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdateAMLHitStatusParams{\n\tHitID:        \"hit_7c1e9a40b2d35f86e0a4c912\",\n\tReviewStatus: \"False Positive\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsUpdateAmlHitStatusParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateAmlHitStatus(\"11111111-2222-3333-4444-555555555555\", SessionsUpdateAmlHitStatusParams.builder()\n        .hitId(\"hit_7c1e9a40b2d35f86e0a4c912\")\n        .reviewStatus(SessionsUpdateAmlHitStatusParams.ReviewStatus.of(\"False Positive\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateAmlHitStatus('11111111-2222-3333-4444-555555555555', [\n    'hit_id' => 'hit_7c1e9a40b2d35f86e0a4c912',\n    'review_status' => 'False Positive',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_aml_hit_status(\n  \"11111111-2222-3333-4444-555555555555\",\n  hit_id: \"hit_7c1e9a40b2d35f86e0a4c912\",\n  review_status: \"False Positive\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateAmlHitStatusAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsUpdateAmlHitStatusParams\n{\n    HitId = \"hit_7c1e9a40b2d35f86e0a4c912\",\n    ReviewStatus = \"False Positive\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/bulk-update-aml-hit-status/": {
      "patch": {
        "summary": "AMLヒットのレビューステータスを一括更新",
        "description": "**複数のAMLヒット**のレビューステータスを1回の呼び出しで更新します。`{ hit_id, review_status }`のペアのリストである`hit_updates`を指定してください。`review_status`は`Unreviewed`、`Confirmed Match`、`False Positive`、`Inconclusive`のいずれかです。\n\n更新はオールオアナッシングで行われます。いずれかの`hit_id`がAMLチェック内に見つからない場合、リクエストは`404`を返し、どのヒットも変更されません。呼び出しが成功すると、`data.updated` Webhookが1回だけ送信され、すべての変更をまとめた1件のアクティビティが記録されます。複数のAMLチェックを含むグラフワークフローでは、`node_id`を指定して特定のチェックを対象にします。\n\nAPIキー(`x-api-key`)またはユーザー認可ヘッダーで認証してください。いずれの場合も`write:sessions`権限が必要です。",
        "operationId": "patch_v3_session_bulk_update_aml_hit_status",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "bulk_update_aml_hit_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。サービスは両方のセッションタイプにわたってIDを解決します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "in": "query",
            "name": "node_id",
            "required": false,
            "description": "ワークフローグラフのノードID。セッションに複数のAMLチェック（ノードごとに1つ）がある場合にのみ必須です。AMLチェックが1つだけのセッションでは省略してください。",
            "schema": {
              "type": "string",
              "example": "feature_aml_1"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "hit_updates"
                ],
                "properties": {
                  "hit_updates": {
                    "type": "array",
                    "description": "空でないヒット更新のリスト。",
                    "items": {
                      "type": "object",
                      "required": [
                        "hit_id",
                        "review_status"
                      ],
                      "properties": {
                        "hit_id": {
                          "type": "string",
                          "example": "hit_7c1e9a40b2d35f86e0a4c912",
                          "description": "AMLチェックの`hits`配列に含まれるヒットの`id`（`hit_...`）です。以前の形式で返されたヒットIDも引き続き受け付けます。"
                        },
                        "review_status": {
                          "type": "string",
                          "enum": [
                            "Unreviewed",
                            "Confirmed Match",
                            "False Positive",
                            "Inconclusive"
                          ],
                          "example": "Confirmed Match"
                        }
                      }
                    }
                  },
                  "node_id": {
                    "type": "string",
                    "description": "任意のグラフノードIDです。セッションに複数のAMLチェックがある場合に、ここまたはクエリパラメーターとして指定します。",
                    "example": "feature_aml_1"
                  }
                }
              },
              "example": {
                "hit_updates": [
                  {
                    "hit_id": "hit_7c1e9a40b2d35f86e0a4c912",
                    "review_status": "Confirmed Match"
                  },
                  {
                    "hit_id": "hit_3b8f20d6a91c4e75f0b2d6a8",
                    "review_status": "False Positive"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "すべてのヒットが更新されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message",
                    "updated_hits"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "`Updated {n} hit(s) successfully`。`n`は`hit_updates`内のエントリ数です。"
                    },
                    "updated_hits": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "`hit_updates`の各エントリが指定するヒットの`id`です。セッションの判定が返す形式で、リクエストの順に並び、ステータスが変わらなかったヒットも含まれます。"
                    }
                  }
                },
                "example": {
                  "message": "Updated 2 hit(s) successfully",
                  "updated_hits": [
                    "hit_7c1e9a40b2d35f86e0a4c912",
                    "hit_3b8f20d6a91c4e75f0b2d6a8"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：`hit_updates`が空、またはエントリに`hit_id` / `review_status`がないか、無効な値が含まれています。",
            "content": {
              "application/json": {
                "example": {
                  "hit_updates": [
                    "hit_updates cannot be empty"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "APIキーにwrite:sessionsがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが見つからない、セッションにAMLチェックがない、または1つ以上の`hit_id`が存在しません（その場合、どのヒットも変更されません）。",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Hits not found: hit_9d2e7f41c0a8b3e65d1f0c47"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/bulk-update-aml-hit-status/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"hit_updates\": [\n      { \"hit_id\": \"abc123\", \"review_status\": \"Confirmed Match\" },\n      { \"hit_id\": \"def456\", \"review_status\": \"False Positive\" }\n    ]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.bulk_update_aml_hit_status(\n    \"11111111-2222-3333-4444-555555555555\",\n    hit_updates=[{\n        \"hit_id\": \"hit_7c1e9a40b2d35f86e0a4c912\",\n        \"review_status\": \"Confirmed Match\",\n    }, {\n        \"hit_id\": \"hit_3b8f20d6a91c4e75f0b2d6a8\",\n        \"review_status\": \"False Positive\",\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.bulkUpdateAmlHitStatus(\"11111111-2222-3333-4444-555555555555\", {\n  hit_updates: [{\n    hit_id: \"hit_7c1e9a40b2d35f86e0a4c912\",\n    review_status: \"Confirmed Match\",\n  }, {\n    hit_id: \"hit_3b8f20d6a91c4e75f0b2d6a8\",\n    review_status: \"False Positive\",\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.BulkUpdateAMLHitStatus(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsBulkUpdateAMLHitStatusParams{\n\tHitUpdates: []didit.SessionsBulkUpdateAMLHitStatusParamsHitUpdates{{\n\t\tHitID:        \"hit_7c1e9a40b2d35f86e0a4c912\",\n\t\tReviewStatus: \"Confirmed Match\",\n\t}, {\n\t\tHitID:        \"hit_3b8f20d6a91c4e75f0b2d6a8\",\n\t\tReviewStatus: \"False Positive\",\n\t}},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.SessionsBulkUpdateAmlHitStatusParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().bulkUpdateAmlHitStatus(\"11111111-2222-3333-4444-555555555555\", SessionsBulkUpdateAmlHitStatusParams.builder()\n        .hitUpdates(List.of(\n                SessionsBulkUpdateAmlHitStatusParams.HitUpdates.builder()\n                        .hitId(\"hit_7c1e9a40b2d35f86e0a4c912\")\n                        .reviewStatus(SessionsBulkUpdateAmlHitStatusParams.HitUpdates.ReviewStatus.of(\"Confirmed Match\"))\n                        .build(),\n                SessionsBulkUpdateAmlHitStatusParams.HitUpdates.builder()\n                        .hitId(\"hit_3b8f20d6a91c4e75f0b2d6a8\")\n                        .reviewStatus(SessionsBulkUpdateAmlHitStatusParams.HitUpdates.ReviewStatus.of(\"False Positive\"))\n                        .build()))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->bulkUpdateAmlHitStatus('11111111-2222-3333-4444-555555555555', [\n    'hit_updates' => [[\n        'hit_id' => 'hit_7c1e9a40b2d35f86e0a4c912',\n        'review_status' => 'Confirmed Match',\n    ], [\n        'hit_id' => 'hit_3b8f20d6a91c4e75f0b2d6a8',\n        'review_status' => 'False Positive',\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.bulk_update_aml_hit_status(\n  \"11111111-2222-3333-4444-555555555555\",\n  hit_updates: [{\n    hit_id: \"hit_7c1e9a40b2d35f86e0a4c912\",\n    review_status: \"Confirmed Match\",\n  }, {\n    hit_id: \"hit_3b8f20d6a91c4e75f0b2d6a8\",\n    review_status: \"False Positive\",\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.BulkUpdateAmlHitStatusAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsBulkUpdateAmlHitStatusParams\n{\n    HitUpdates = new SessionsBulkUpdateAmlHitStatusParamsHitUpdates[]\n    {\n        new()\n        {\n            HitId = \"hit_7c1e9a40b2d35f86e0a4c912\",\n            ReviewStatus = \"Confirmed Match\",\n        },\n        new()\n        {\n            HitId = \"hit_3b8f20d6a91c4e75f0b2d6a8\",\n            ReviewStatus = \"False Positive\",\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/update-poa-data/": {
      "patch": {
        "summary": "認証セッションでPOA書類から抽出された住所証明データを更新",
        "description": "検証完了後に、ユーザーの住所証明書類（公共料金の請求書、銀行取引明細書、その他の住所を証明する書類）から抽出されたフィールドを修正します。対象は発行者、日付、記載された氏名、住所そのもの、銀行口座情報です。ボディのフィールドはすべて任意です。送信したキーのみが書き込まれ、それ以外はすべて変更されません（`PATCH`セマンティクス）。\n\nセッションはお客様のアプリケーションに属し、ステータスが`Approved`、`Declined`、`In Review`、`Kyc Expired`のいずれかである必要があります。それ以外の状態（例: まだ`In Progress`）のセッションは、`\"No Session matches the given query.\"`とともに`404`を返します。これは、存在しない、または削除された`sessionId`に対して返される`\"Not found.\"`とは異なります。また、セッションにはPOAレコードが存在する必要があります。ワークフローで住所証明ステップが一度も実行されていないセッションは`404`（`\"The session does not have a POA.\"`）を返します。複数のPOAステップを持つグラフワークフローでは、`node_id`（クエリパラメーターまたはボディのフィールド）で特定のステップを指定します。省略した場合は、最新のPOAレコードが更新されます。\n\n`extra_fields`はキー単位でマージされます。9つの既知のキー（`bank_iban`、`additional_names`など）は専用のPOAカラムに書き込まれ、その他のキーはカスタムの追加項目として保持されます。`null` / `\"\"`を指定するとキーが削除されます。`poa_parsed_address`はドキュメントに記載された7つのキーのみを受け付け、編集のたびに`formatted_address` / `poa_formatted_address`を再計算します。自由記述の`poa_address`が変更された場合、サーバーがジオコーディングをやり直し、構造化された住所を更新することもあります（サンドボックスのセッションではスキップされます）。\n\nこのエンドポイントのKYC版とは異なり、`data.updated`[Webhook](/ja/integration/webhooks)（トリガー`manual_review`）は、保存されている値の少なくとも1つが**実際に変更された**場合にのみ送信されます。同一の値を再送信しても、通知なしで何も処理されません。値が変更されると、変更されたフィールドの変更前と変更後の値を記録した`POA_DATA_UPDATED`アクティビティエントリがセッションの`reviews`に追加され、[Get Decision](#get-/v3/session/-sessionId-/decision/)とコンソールのアクティビティタイムラインで確認できます。セッションのステータスと判定は**再評価されません**。結果を変更するには[Update Status](#patch-/v3/session/-sessionId-/update-status/)を使用してください。\n\nAPIキーまたはコンソールユーザートークンを受け付けます。いずれの場合も、認証情報には`write:sessions`権限が必要です。認証の失敗と権限の失敗はどちらも`403`を返します。このAPIが`401`を返すことはありません。なお、セッションの検索は認証情報のチェックより先に実行されるため、認証情報がなくても、存在しない`sessionId`に対しては`404`が返されます。このエンドポイントには、APIキーごとに1分あたり10リクエストという専用のレート制限があります（無効なリクエストもカウントされます）。さらに、1分あたり300リクエストという共有の書き込み上限も適用されます。\n\n空のJSONボディ`{}`は何も処理しません。現在のPOAレコードをそのまま含めて`200`を返し、Webhookは送信されません（`has_changes`はfalseのままです）。",
        "operationId": "patch_v3_session_update_poa_data",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_poa_data",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "添付された住所証明 (POA) レコードを修正する対象のユーザー認証 (KYC) セッションのUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "POAレコードをパッチするワークフローグラフのノード。複数の住所証明ステップを持つグラフワークフロー向けです（ボディの`node_id`フィールドとしても指定できます）。省略した場合は、セッション上の最新のPOAレコードがパッチされます。指定したノードにPOAが存在しない場合、呼び出しは`404`（`\"The session does not have a POA for node '<node_id>'.\"`）を返します。",
            "schema": {
              "type": "string",
              "example": "feature_poa"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "すべてのフィールドは任意です。変更したい項目のみを送信してください。",
                "properties": {
                  "issuing_state": {
                    "type": "string",
                    "nullable": true,
                    "description": "POA書類を発行した国（ISO 3166-1 alpha-3）。大文字と小文字は区別されず（大文字に正規化されます）、無効なコードは`400`を返します。",
                    "example": "ESP"
                  },
                  "document_type": {
                    "type": "string",
                    "enum": [
                      "UTILITY_BILL",
                      "BANK_STATEMENT",
                      "GOVERNMENT_ISSUED_DOCUMENT",
                      "OTHER_POA_DOCUMENT",
                      "UNKNOWN"
                    ],
                    "description": "POA書類のカテゴリー。値は大文字です。`utility_bill`のような小文字の表記は`400`を返します。",
                    "example": "UTILITY_BILL"
                  },
                  "document_language": {
                    "type": "string",
                    "maxLength": 50,
                    "nullable": true,
                    "description": "書類の言語。通常はISO 639-1コードです(例: `es`)。自由記述のテキストであり、言語コードとしての検証は行われません。",
                    "example": "es"
                  },
                  "issuer": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "書類を発行した組織（公益事業会社、銀行、政府機関）です。",
                    "example": "Energy Provider S.A."
                  },
                  "issue_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "住所証明書類の発行日 (`YYYY-MM-DD`形式)。その他の形式の場合は`400`が返されます。",
                    "example": "2026-04-12"
                  },
                  "poa_address": {
                    "type": "string",
                    "nullable": true,
                    "description": "書類に印字されているとおりの自由記述の住所。この値が変更され（サンドボックス以外のセッションのみ）、構造化された住所がまだ存在しないか不完全な場合、サーバーは同じリクエストのバックグラウンドで再ジオコーディングを行い、`poa_parsed_address` / `poa_formatted_address`をジオコーダーの結果で上書きすることがあります。再ジオコーディングには、POAレコードに`issuing_state`が存在することも必要です。",
                    "example": "Avda de Madrid 34, 28013 Madrid"
                  },
                  "name_on_document": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "書類に印字されている受取人の氏名。",
                    "example": "Carmen Espanola"
                  },
                  "extra_fields": {
                    "type": "object",
                    "additionalProperties": true,
                    "nullable": true,
                    "description": "書類固有の追加情報で、キーごとにマージされます。次の9つのキーは住所証明の専用列に対応します：`bank_account_number`、`bank_iban`、`bank_sort_code`、`bank_routing_number`、`bank_swift_bic`、`bank_branch_name`、`bank_branch_address`、`document_phone_number`、`additional_names`（文字列のリストまたは`null`である必要があり、それ以外は`400`になります）。その他のキーはカスタムの追加フィールドとして保存されます。キーごとの動作：値を指定するとそのキーが設定され、`null`または`\"\"`を指定するとそのキーが削除されます。JSONオブジェクトである必要があり、それ以外の場合は`400`になります。"
                  },
                  "poa_parsed_address": {
                    "type": "object",
                    "nullable": true,
                    "description": "構造化された住所。受け付けるネストされたキーは`address_type`、`city`、`region`、`street_1`、`street_2`、`postal_code`、`country`のみで、それ以外のキーを指定すると`400`が返されます。キーごとの動作: 値を指定するとそのキーが設定され、`null`を指定するとそのキーが削除されます。`formatted_address`（およびトップレベルの`poa_formatted_address`）は、`street_1`、`street_2`、`city`、`region`、`postal_code`、`country`を連結してサーバー側で再計算されるため、直接設定することはできません。",
                    "properties": {
                      "address_type": {
                        "type": "string",
                        "nullable": true,
                        "description": "自由形式の住所分類（例：`home`）。"
                      },
                      "city": {
                        "type": "string",
                        "nullable": true,
                        "example": "Madrid"
                      },
                      "region": {
                        "type": "string",
                        "nullable": true,
                        "description": "州、県、自治州。"
                      },
                      "street_1": {
                        "type": "string",
                        "nullable": true,
                        "example": "Avda de Madrid 34"
                      },
                      "street_2": {
                        "type": "string",
                        "nullable": true
                      },
                      "postal_code": {
                        "type": "string",
                        "nullable": true,
                        "example": "28013"
                      },
                      "country": {
                        "type": "string",
                        "nullable": true,
                        "description": "ISO 3166-1 alpha-2国コード。小文字の入力は大文字に正規化され、alpha-3コードは`400`で拒否されます。",
                        "example": "ES"
                      }
                    }
                  }
                }
              },
              "examples": {
                "Correct issuer and address": {
                  "summary": "書類の分類、発行者、構造化住所を修正",
                  "value": {
                    "issuing_state": "ESP",
                    "document_type": "BANK_STATEMENT",
                    "issuer": "Banco Example S.A.",
                    "issue_date": "2026-05-02",
                    "name_on_document": "Carmen Espanola",
                    "poa_address": "Avda de Madrid 34, 28013 Madrid",
                    "extra_fields": {
                      "bank_iban": "ES9121000418450200051332",
                      "additional_names": [
                        "Carmen E. Espanola"
                      ]
                    },
                    "poa_parsed_address": {
                      "street_1": "Avda de Madrid 34",
                      "city": "Madrid",
                      "postal_code": "28013",
                      "country": "ES"
                    }
                  }
                },
                "Remove a banking detail": {
                  "summary": "追加フィールドのキーを1つ削除し、残りは保持",
                  "value": {
                    "extra_fields": {
                      "bank_iban": null
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "POAデータが更新されました。送信したフィールドだけでなく、**現在のPOAレコード全体**（更新可能なすべてのフィールドとその保存値、完全な`extra_fields`マップ、`poa_parsed_address`、`poa_formatted_address`）を返します。`data.updated`のWebhookは、少なくとも1つの値が実際に変更された場合にのみ送信されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "issuing_state": {
                      "type": "string",
                      "nullable": true,
                      "description": "POA書類を発行した国（ISO 3166-1 alpha-3）。大文字と小文字は区別されず（大文字に正規化されます）、無効なコードは`400`を返します。",
                      "example": "ESP"
                    },
                    "document_type": {
                      "type": "string",
                      "enum": [
                        "UTILITY_BILL",
                        "BANK_STATEMENT",
                        "GOVERNMENT_ISSUED_DOCUMENT",
                        "OTHER_POA_DOCUMENT",
                        "UNKNOWN"
                      ],
                      "description": "POA書類のカテゴリー。値は大文字です。`utility_bill`のような小文字の表記は`400`を返します。",
                      "example": "UTILITY_BILL"
                    },
                    "document_language": {
                      "type": "string",
                      "maxLength": 50,
                      "nullable": true,
                      "description": "書類の言語。通常はISO 639-1コードです(例: `es`)。自由記述のテキストであり、言語コードとしての検証は行われません。",
                      "example": "es"
                    },
                    "issuer": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "書類を発行した組織（公益事業会社、銀行、政府機関）です。",
                      "example": "Energy Provider S.A."
                    },
                    "issue_date": {
                      "type": "string",
                      "format": "date",
                      "nullable": true,
                      "description": "住所証明書類の発行日 (`YYYY-MM-DD`形式)。その他の形式の場合は`400`が返されます。",
                      "example": "2026-04-12"
                    },
                    "poa_address": {
                      "type": "string",
                      "nullable": true,
                      "description": "書類に印字されているとおりの自由記述の住所。この値が変更され（サンドボックス以外のセッションのみ）、構造化された住所がまだ存在しないか不完全な場合、サーバーは同じリクエストのバックグラウンドで再ジオコーディングを行い、`poa_parsed_address` / `poa_formatted_address`をジオコーダーの結果で上書きすることがあります。",
                      "example": "Avda de Madrid 34, 28013 Madrid"
                    },
                    "name_on_document": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true,
                      "description": "書類に印字されている受取人の氏名。",
                      "example": "Carmen Espanola"
                    },
                    "extra_fields": {
                      "type": "object",
                      "additionalProperties": true,
                      "nullable": true,
                      "description": "レスポンスに常に含まれます。既知の9つのキー（未設定のものは`null`、`additional_names`のデフォルトは`[]`）に加え、以前に保存されたカスタムキーが含まれます。"
                    },
                    "poa_parsed_address": {
                      "type": "object",
                      "nullable": true,
                      "description": "現在の構造化住所。存在しない場合は`null`です。編集可能な7つのキーに加え、再計算された`formatted_address`を含みます。保存されたとおりに返されるため、サーバー側でジオコーディングが行われた後は、編集可能なキーに加えて管理用のキー（例：`raw_results`）が含まれる場合があります。",
                      "properties": {
                        "address_type": {
                          "type": "string",
                          "nullable": true,
                          "description": "自由形式の住所分類（例：`home`）。"
                        },
                        "city": {
                          "type": "string",
                          "nullable": true,
                          "example": "Madrid"
                        },
                        "region": {
                          "type": "string",
                          "nullable": true,
                          "description": "州、県、自治州。"
                        },
                        "street_1": {
                          "type": "string",
                          "nullable": true,
                          "example": "Avda de Madrid 34"
                        },
                        "street_2": {
                          "type": "string",
                          "nullable": true
                        },
                        "postal_code": {
                          "type": "string",
                          "nullable": true,
                          "example": "28013"
                        },
                        "country": {
                          "type": "string",
                          "nullable": true,
                          "description": "ISO 3166-1 alpha-2国コード。小文字の入力は大文字に正規化され、alpha-3コードは`400`で拒否されます。",
                          "example": "ES"
                        },
                        "formatted_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "構造化された住所を連結した、人が読める形式。`poa_parsed_address`を編集するたびにサーバー側で再計算されます。",
                          "example": "Avda de Madrid 34, Madrid, 28013, ES"
                        }
                      }
                    },
                    "poa_formatted_address": {
                      "type": "string",
                      "nullable": true,
                      "description": "再計算された`formatted_address`の最上位のコピーです。構造化された住所が変更されると同期されます。",
                      "example": "Avda de Madrid 34, Madrid, 28013, ES"
                    }
                  }
                },
                "examples": {
                  "Updated POA": {
                    "summary": "修正後のPOAの完全なレコード",
                    "value": {
                      "issuing_state": "ESP",
                      "document_type": "BANK_STATEMENT",
                      "document_language": "es",
                      "issuer": "Banco Example S.A.",
                      "issue_date": "2026-05-02",
                      "poa_address": "Avda de Madrid 34, 28013 Madrid",
                      "name_on_document": "Carmen Espanola",
                      "extra_fields": {
                        "bank_account_number": null,
                        "bank_iban": "ES9121000418450200051332",
                        "bank_sort_code": null,
                        "bank_routing_number": null,
                        "bank_swift_bic": null,
                        "bank_branch_name": null,
                        "bank_branch_address": null,
                        "document_phone_number": null,
                        "additional_names": [
                          "Carmen E. Espanola"
                        ]
                      },
                      "poa_parsed_address": {
                        "city": "Madrid",
                        "street_1": "Avda de Madrid 34",
                        "postal_code": "28013",
                        "country": "ES",
                        "formatted_address": "Avda de Madrid 34, Madrid, 28013, ES"
                      },
                      "poa_formatted_address": "Avda de Madrid 34, Madrid, 28013, ES"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドエラーは`{\"<field>\": [\"<message>\"]}`の形式で返されます。ネストされた`poa_parsed_address` / `extra_fields`のキーに関するエラーはオブジェクト値を使用します：`{\"extra_fields\": {\"<key>\": \"<message>\"}}`。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid document type": {
                    "summary": "Enumは大文字です。小文字の値は拒否されます",
                    "value": {
                      "document_type": [
                        "\"utility_bill\" is not a valid choice."
                      ]
                    }
                  },
                  "Invalid issuing state": {
                    "summary": "issuing_stateがISO 3166-1 alpha-3ではない",
                    "value": {
                      "issuing_state": [
                        "Invalid ISO 3166-1 alpha-3 country code for issuing_state."
                      ]
                    }
                  },
                  "additional_names not a list": {
                    "summary": "additional_namesには文字列のリストまたはnullを指定できます",
                    "value": {
                      "extra_fields": {
                        "additional_names": "Must be a list or null."
                      }
                    }
                  },
                  "Unsupported poa_parsed_address key": {
                    "summary": "ドキュメントに記載された7つのキーのみ使用できます",
                    "value": {
                      "poa_parsed_address": {
                        "zipcode": "Unsupported key. Allowed keys: address_type, city, region, street_1, street_2, postal_code, country"
                      }
                    }
                  },
                  "Bad date format": {
                    "summary": "日付はYYYY-MM-DD形式である必要があります",
                    "value": {
                      "issue_date": [
                        "Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "認証情報にwrite:sessionsがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なセッション、編集できない状態のセッション、またはパッチを適用するPOAレコードがありません。各ケースには個別の`detail`メッセージがあります(例を参照)。不明なセッションの照会は認証情報のチェックより前に実行されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションがアプリケーション内に存在しません(または削除されています)",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Wrong session state": {
                    "summary": "セッションは存在しますが、Approved / Declined / In Review / Kyc Expiredのいずれでもありません",
                    "value": {
                      "detail": "No Session matches the given query."
                    }
                  },
                  "No POA record": {
                    "summary": "ワークフローで住所証明のステップが実行されませんでした",
                    "value": {
                      "detail": "The session does not have a POA."
                    }
                  },
                  "No POA for node": {
                    "summary": "node_idが指定されたが、対応するPOAが存在しない",
                    "value": {
                      "detail": "The session does not have a POA for node 'feature_missing'."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "専用のレート制限を超過しました。上限はAPIキーごとに1分あたり10件のPOAデータ更新です（拒否されたリクエストも上限にカウントされます）。共有の300/minの書き込み上限も、独自のメッセージでトリガーされる場合があります。再試行する前に、`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "POAの更新上限に達しました",
                    "value": {
                      "detail": "Session POA data update rate limit exceeded. You can make up to 10 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-poa-data/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"issuing_state\": \"ESP\",\n    \"document_type\": \"BANK_STATEMENT\",\n    \"issuer\": \"Banco Example S.A.\",\n    \"issue_date\": \"2026-05-02\",\n    \"name_on_document\": \"Carmen Espanola\",\n    \"poa_address\": \"Avda de Madrid 34, 28013 Madrid\",\n    \"extra_fields\": {\n      \"bank_iban\": \"ES9121000418450200051332\"\n    },\n    \"poa_parsed_address\": {\n      \"city\": \"Madrid\",\n      \"postal_code\": \"28013\",\n      \"country\": \"ES\"\n    }\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_poa_data(\n    \"11111111-2222-3333-4444-555555555555\",\n    issuing_state=\"ESP\",\n    document_type=\"BANK_STATEMENT\",\n    issuer=\"Banco Example S.A.\",\n    issue_date=\"2026-05-02\",\n    poa_address=\"Avda de Madrid 34, 28013 Madrid\",\n    name_on_document=\"Carmen Espanola\",\n    extra_fields={\"bank_iban\": \"ES9121000418450200051332\", \"additional_names\": [\"Carmen E. Espanola\"]},\n    poa_parsed_address={\n        \"city\": \"Madrid\",\n        \"street_1\": \"Avda de Madrid 34\",\n        \"postal_code\": \"28013\",\n        \"country\": \"ES\",\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updatePoaData(\"11111111-2222-3333-4444-555555555555\", {\n  issuing_state: \"ESP\",\n  document_type: \"BANK_STATEMENT\",\n  issuer: \"Banco Example S.A.\",\n  issue_date: \"2026-05-02\",\n  poa_address: \"Avda de Madrid 34, 28013 Madrid\",\n  name_on_document: \"Carmen Espanola\",\n  extra_fields: { bank_iban: \"ES9121000418450200051332\", additional_names: [\"Carmen E. Espanola\"] },\n  poa_parsed_address: {\n    city: \"Madrid\",\n    street_1: \"Avda de Madrid 34\",\n    postal_code: \"28013\",\n    country: \"ES\",\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdatePOAData(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdatePOADataParams{\n\tIssuingState:   didit.String(\"ESP\"),\n\tDocumentType:   didit.Some(didit.SessionsUpdatePOADataParamsDocumentType(\"BANK_STATEMENT\")),\n\tIssuer:         didit.String(\"Banco Example S.A.\"),\n\tIssueDate:      didit.String(\"2026-05-02\"),\n\tPOAAddress:     didit.String(\"Avda de Madrid 34, 28013 Madrid\"),\n\tNameOnDocument: didit.String(\"Carmen Espanola\"),\n\tExtraFields:    didit.Some(map[string]any{\"bank_iban\": \"ES9121000418450200051332\", \"additional_names\": []any{\"Carmen E. Espanola\"}}),\n\tPOAParsedAddress: didit.Some(didit.SessionsUpdatePOADataParamsPOAParsedAddress{\n\t\tCity:       didit.String(\"Madrid\"),\n\t\tStreet1:    didit.String(\"Avda de Madrid 34\"),\n\t\tPostalCode: didit.String(\"28013\"),\n\t\tCountry:    didit.String(\"ES\"),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SessionsUpdatePoaDataParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updatePoaData(\"11111111-2222-3333-4444-555555555555\", SessionsUpdatePoaDataParams.builder()\n        .issuingState(\"ESP\")\n        .documentType(SessionsUpdatePoaDataParams.DocumentType.of(\"BANK_STATEMENT\"))\n        .issuer(\"Banco Example S.A.\")\n        .issueDate(LocalDate.parse(\"2026-05-02\"))\n        .poaAddress(\"Avda de Madrid 34, 28013 Madrid\")\n        .nameOnDocument(\"Carmen Espanola\")\n        .extraFields(Map.of(\"bank_iban\", \"ES9121000418450200051332\", \"additional_names\", List.of(\"Carmen E. Espanola\")))\n        .poaParsedAddress(SessionsUpdatePoaDataParams.PoaParsedAddress.builder()\n                .city(\"Madrid\")\n                .street1(\"Avda de Madrid 34\")\n                .postalCode(\"28013\")\n                .country(\"ES\")\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updatePoaData('11111111-2222-3333-4444-555555555555', [\n    'issuing_state' => 'ESP',\n    'document_type' => 'BANK_STATEMENT',\n    'issuer' => 'Banco Example S.A.',\n    'issue_date' => '2026-05-02',\n    'poa_address' => 'Avda de Madrid 34, 28013 Madrid',\n    'name_on_document' => 'Carmen Espanola',\n    'extra_fields' => ['bank_iban' => 'ES9121000418450200051332', 'additional_names' => ['Carmen E. Espanola']],\n    'poa_parsed_address' => [\n        'city' => 'Madrid',\n        'street_1' => 'Avda de Madrid 34',\n        'postal_code' => '28013',\n        'country' => 'ES',\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_poa_data(\n  \"11111111-2222-3333-4444-555555555555\",\n  issuing_state: \"ESP\",\n  document_type: \"BANK_STATEMENT\",\n  issuer: \"Banco Example S.A.\",\n  issue_date: \"2026-05-02\",\n  poa_address: \"Avda de Madrid 34, 28013 Madrid\",\n  name_on_document: \"Carmen Espanola\",\n  extra_fields: { bank_iban: \"ES9121000418450200051332\", additional_names: [\"Carmen E. Espanola\"] },\n  poa_parsed_address: {\n    city: \"Madrid\",\n    street_1: \"Avda de Madrid 34\",\n    postal_code: \"28013\",\n    country: \"ES\",\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdatePoaDataAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsUpdatePoaDataParams\n{\n    IssuingState = \"ESP\",\n    DocumentType = new SessionsUpdatePoaDataParamsDocumentType(\"BANK_STATEMENT\"),\n    Issuer = \"Banco Example S.A.\",\n    IssueDate = \"2026-05-02\",\n    PoaAddress = \"Avda de Madrid 34, 28013 Madrid\",\n    NameOnDocument = \"Carmen Espanola\",\n    ExtraFields = new Dictionary<string, object> { [\"bank_iban\"] = \"ES9121000418450200051332\", [\"additional_names\"] = new object[] { \"Carmen E. Espanola\" } },\n    PoaParsedAddress = new SessionsUpdatePoaDataParamsPoaParsedAddress\n    {\n        City = \"Madrid\",\n        Street1 = \"Avda de Madrid 34\",\n        PostalCode = \"28013\",\n        Country = \"ES\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/{companyUuid}/update-data/": {
      "patch": {
        "summary": "法人確認(KYB)セッションで法人登記から抽出された企業データを更新",
        "description": "`companyUuid`で指定した法人確認 (KYB) セッションについて、登記情報から抽出された企業データ(会社名、登記番号、住所、ステータス、連絡先)を修正します。主な呼び出し元は、登記情報の読み取り誤りを修正するコンプライアンスアナリストや、修正済みの企業データを同期するお客様のバックオフィスです。ボディのフィールドはすべて任意です(`PATCH`のセマンティクス)。空のJSONボディ(`{}`)は何も変更せず、現在の企業レコードをそのまま返します。\n\n編集内容は2か所に同時に書き込まれます。正規の企業カラムを持つフィールド(名称、登記番号、国、設立日、納税者番号、種別、ステータス、資本金フィールド(`registered_capital`、`registered_capital_amount`、`registered_capital_currency`)、別名、事業内容、ウェブサイト、メールアドレス、電話番号、LEI、所在地、および`legal_address` → `registered_address`)はそのカラムを更新します。さらに、送信された**すべての**キーが`registry_data`スナップショットにもマージされ(日付はISO文字列)、「登記情報から抽出」ビューに修正内容が反映されます。カラムを持たないフィールド(`region`、`registration_date`、`dissolution_date`、`control_scheme`)は`registry_data`にのみ保存されます。`user_provided_data`(エンドユーザーがホスト型フローで確認した内容)は一切変更されず、空でないPATCHのたびに`last_console_edit_at`が記録されます。\n\nKYC/POAの更新エンドポイントとは異なり、**セッションステータスによる制限はありません**。ビジネスセッションのライフサイクルのどの時点でも企業を編集できます。企業はパスで指定したセッションに属し(属さない場合は`\"KYB company does not belong to the given session.\"`とともに`404`を返します)、かつお客様のアプリケーションに属している必要があります。空でないPATCHはすべて、ビジネスセッションで`data.updated`[Webhook](/ja/integration/webhooks)を発火します(トリガーは`console_registry_edit`)。送信した値が保存済みの値と同じ場合も同様です。セッションのステータスと判定は**再評価されず**、レビューや監査のエントリも記録されません。\n\nAPIキーまたはコンソールユーザートークンを使用できます。いずれの場合も、認証情報には`write:businesses`権限が必要です。認証の失敗と権限の失敗はどちらも`403`を返し、このAPIが`401`を返すことはありません。セッションの検索は認証情報のチェックより先に実行されるため、認証情報がない場合でも、不明な`sessionId`には`404`が返される点に注意してください。APIキーごとに1分あたり300リクエストという共有の書き込み上限が適用されます。\n\nユーザー認証セッションの場合、KYC側の対応エンドポイントは`PATCH /v3/session/{sessionId}/update-data/`です。セッションの判定自体を変更するには`PATCH /v3/session/{sessionId}/update-status/`を使用してください。",
        "operationId": "patch_v3_session_kyb_company_update_data",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_kyb_company_data",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "親となる法人確認 (KYB) セッションのUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "companyUuid",
            "in": "path",
            "required": true,
            "description": "更新する企業レコードのUUID (法人セッションの判定内の`registry_checks[].company.uuid`) です。`sessionId`で参照されるセッションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "88888888-9999-aaaa-bbbb-cccccccccccc"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "すべてのフィールドは任意です。変更したい項目のみを送信してください。指定したフィールドは、企業の正規カラム（存在する場合）を更新し、`registry_data`スナップショットにマージされます。",
                "properties": {
                  "company_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "企業の法的名称。正規のカラムと法人登記のスナップショットに書き込まれます。",
                    "example": "Docs Probe Corp"
                  },
                  "registration_number": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "法人登記における正式な登記番号。",
                    "example": "DPC-001"
                  },
                  "country_code": {
                    "type": "string",
                    "maxLength": 2,
                    "description": "設立国（ISO 3166-1 alpha-2）。大文字と小文字は区別されません（`us`は`US`として保存されます）。alpha-3コードは2文字の制限を満たさないため`400`で失敗します。",
                    "example": "US"
                  },
                  "region": {
                    "type": "string",
                    "maxLength": 10,
                    "nullable": true,
                    "description": "登記機関に地域区分がある場合の地域区分タグ（例: 米国の州）。登記スナップショットにのみ保存され、正規の列はありません。"
                  },
                  "incorporation_date": {
                    "type": "string",
                    "format": "date",
                    "description": "設立日（`YYYY-MM-DD`形式）。他のすべてのフィールドと同様に任意です。`PATCH`は部分更新です。それ以外の日付形式では`400`が返されます。",
                    "example": "2015-04-12"
                  },
                  "registration_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "登記所が設立日と区別している場合の登録日。登記スナップショットにのみ保存されます。"
                  },
                  "dissolution_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "活動を停止した企業の解散日。登記スナップショットにのみ保存されます。"
                  },
                  "tax_number": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "納税者番号。"
                  },
                  "legal_address": {
                    "type": "string",
                    "description": "法定住所/登記住所。サーバー側で正規の`registered_address`カラムのエイリアスとして扱われます。レスポンスでは`registered_address`として返されますが、法人登記のスナップショットには送信した`legal_address`キーがそのまま保持されます。",
                    "example": "1 Example Plaza, Wilmington, DE 19801"
                  },
                  "company_type": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "法人形態(例: `Limited Liability Company`、`PLC`、`GmbH`)。",
                    "example": "Limited Liability Company"
                  },
                  "registry_status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "dissolved",
                      "deregistered",
                      "see full details",
                      "authorised",
                      "appointed representative",
                      "unauthorised",
                      "inactive",
                      "no longer authorised",
                      "closed",
                      "struck off"
                    ],
                    "nullable": true,
                    "description": "登記所が報告した企業ステータス。小文字で、一部の値にはスペースが含まれます（例: `struck off`、`no longer authorised`）。それ以外の値を指定すると`400`が返されます。",
                    "example": "active"
                  },
                  "verification_status": {
                    "type": "string",
                    "enum": [
                      "verified",
                      "failed",
                      "unknown"
                    ],
                    "nullable": true,
                    "description": "登記検証の結果。その他の値の場合は`400`が返されます。",
                    "example": "verified"
                  },
                  "alternative_names": {
                    "type": "string",
                    "description": "商号、旧正式名称、DBA名（自由記述）。"
                  },
                  "nature_of_business": {
                    "type": "string",
                    "description": "会社の事業内容の簡潔な説明。",
                    "example": "Software development"
                  },
                  "registered_capital": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "人が読める形式の登録資本金（例: `USD 50000`）。構造化された値には`registered_capital_amount`と`registered_capital_currency`を使用し、自由形式のテキストにはこのフィールドを使用します。",
                    "example": "USD 50000"
                  },
                  "registered_capital_amount": {
                    "type": "number",
                    "format": "double",
                    "nullable": true,
                    "description": "資本金の数値です（最大20桁、小数点以下2桁）。`registered_capital_amount`列に設定され、`registry_data`には10進数の文字列として反映されます。レスポンスでは10進数の文字列（例：`\"1500000.50\"`）として返されます。"
                  },
                  "registered_capital_currency": {
                    "type": "string",
                    "maxLength": 3,
                    "nullable": true,
                    "description": "`registered_capital_amount`のISO 4217通貨コード。大文字と小文字は区別されません（`usd`は`USD`として保存されます）。ちょうど3文字でない値は、ISO 4217に関するメッセージとともに`400`を返します。正規の`registered_capital_currency`列を設定し、`registry_data`にも反映されます。",
                    "example": "USD"
                  },
                  "website": {
                    "type": "string",
                    "maxLength": 500,
                    "description": "企業のWebサイト。ドメインのみの値も受け付け、`https://`プレフィックスを付けて正規化します(`docsprobe.example.com`は`https://docsprobe.example.com`として保存されます)。それでもURL検証に失敗する値は`400`を返します。",
                    "example": "https://docsprobe.example.com"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "登記機関に登録されている連絡先メールアドレス。",
                    "example": "legal@docsprobe.example.com"
                  },
                  "phone": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "連絡先電話番号。`+`、数字、スペース、ハイフン、ピリオド、括弧のみで構成され、数字が合計7〜15桁である必要があります。そうでない場合は`400`が返されます。",
                    "example": "+1 302 555 0143"
                  },
                  "legal_entity_identifier": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "LEI（企業が保有している場合）。"
                  },
                  "location_of_registration": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "記録上の登記所の都市/行政区画。"
                  },
                  "vat_number": {
                    "type": "string",
                    "maxLength": 64,
                    "description": "EUのVAT番号。`registry_data`スナップショットにのみマージされます。ここで編集してもVATおよび納税者番号の検証は再実行されないため、`vat_validation_status`およびその他の`vat_*`結果フィールドは変更されません。"
                  },
                  "control_scheme": {
                    "type": "string",
                    "description": "登記機関が公開している場合の支配・ガバナンス体制。登記情報のスナップショットにのみ保存されます。"
                  }
                }
              },
              "examples": {
                "Correct registry data": {
                  "summary": "法人登記から抽出された企業のフィールドを修正する",
                  "value": {
                    "company_name": "Docs Probe Corp",
                    "registration_number": "DPC-001",
                    "country_code": "US",
                    "incorporation_date": "2015-04-12",
                    "company_type": "Limited Liability Company",
                    "legal_address": "1 Example Plaza, Wilmington, DE 19801",
                    "registry_status": "active",
                    "verification_status": "verified",
                    "website": "docsprobe.example.com",
                    "email": "legal@docsprobe.example.com",
                    "phone": "+1 302 555 0143",
                    "registered_capital": "USD 50000",
                    "nature_of_business": "Software development"
                  }
                },
                "Single field": {
                  "summary": "送信したキーのみが書き込まれます",
                  "value": {
                    "registry_status": "dissolved"
                  }
                },
                "No-op": {
                  "summary": "空のボディを送ると、Webhookをトリガーせずに現在のレコードをそのまま返します",
                  "value": {}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "企業データが更新されました（ボディが空の場合は、変更されないまま返されます）。KYB企業レコード全体を返します。形式は企業セッションの判定に含まれる`registry_checks[].company`と同じです。`legal_address`は`registered_address`として返される点に注意してください。`registered_capital_amount`/`registered_capital_currency`はそれぞれの正規のカラムに格納され、`registry_data`にも反映されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "KYB企業の完全なレコード。企業セッションの判定における`registry_checks[]`内の`company`オブジェクトと同じ形式です。",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "企業レコードの識別子（`companyUuid`パスパラメーター）。"
                    },
                    "node_id": {
                      "type": "string",
                      "nullable": true,
                      "description": "ワークフローがグラフベースの場合に、この企業レコードが属するワークフローグラフのノード。"
                    },
                    "status": {
                      "type": "string",
                      "description": "登記簿チェックの機能ライフサイクルステータス（例: `Not Finished`、`Approved`、`Declined`、`In Review`）。"
                    },
                    "registry_status": {
                      "type": "string",
                      "nullable": true,
                      "description": "登記所が報告した企業ステータス（例: `active`、`dissolved`、`struck off`）。"
                    },
                    "data_resolved": {
                      "type": "boolean",
                      "description": "企業データが揃っている場合は`true`です。手動入力の企業では常に`true`、法人登記から取得した企業では登記情報の取得が完了した時点で`true`になります。"
                    },
                    "company_name": {
                      "type": "string",
                      "nullable": true
                    },
                    "registration_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "country_code": {
                      "type": "string",
                      "nullable": true,
                      "description": "設立国を示すISO 3166-1 alpha-2コード。"
                    },
                    "region": {
                      "type": "string",
                      "nullable": true
                    },
                    "company_type": {
                      "type": "string",
                      "nullable": true
                    },
                    "incorporation_date": {
                      "type": "string",
                      "format": "date",
                      "nullable": true
                    },
                    "registered_address": {
                      "type": "string",
                      "nullable": true,
                      "description": "正規の登録住所。`legal_address`を送信すると更新されます。"
                    },
                    "tax_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "risk_level": {
                      "type": "string",
                      "nullable": true
                    },
                    "verification_status": {
                      "type": "string",
                      "nullable": true,
                      "description": "`verified`、`failed`、または`unknown`。"
                    },
                    "is_from_registry": {
                      "type": "boolean",
                      "description": "企業が手動入力ではなく法人登記の検索結果から事前入力された場合は`true`です。"
                    },
                    "fetch_status": {
                      "type": "string",
                      "nullable": true,
                      "description": "登記所を情報源とする企業の登記取得ライフサイクル（`pending` / `resolved`）。手動入力の場合は`null`です。"
                    },
                    "alternative_names": {
                      "type": "string",
                      "nullable": true,
                      "description": "報告されている場合の、別名、商号、旧社名、または原語表記の企業名（テキスト）です。"
                    },
                    "nature_of_business": {
                      "type": "string",
                      "nullable": true
                    },
                    "registered_capital": {
                      "type": "string",
                      "nullable": true
                    },
                    "registered_capital_amount": {
                      "type": "string",
                      "nullable": true,
                      "description": "正規カラム。10進数の文字列として返されます(例:`\"2750000.00\"`)。"
                    },
                    "registered_capital_currency": {
                      "type": "string",
                      "nullable": true,
                      "description": "正規カラム。レジストリフロー、またはこのエンドポイントを介したコンソールやAPIでの編集によって設定されます。"
                    },
                    "website": {
                      "type": "string",
                      "nullable": true
                    },
                    "email": {
                      "type": "string",
                      "nullable": true
                    },
                    "phone": {
                      "type": "string",
                      "nullable": true
                    },
                    "legal_entity_identifier": {
                      "type": "string",
                      "nullable": true
                    },
                    "location_of_registration": {
                      "type": "string",
                      "nullable": true
                    },
                    "vat_number": {
                      "type": "string",
                      "nullable": true,
                      "description": "EUのVAT番号。ホスト型の登記ステップで収集された場合、またはその後に編集された場合に設定されます。"
                    },
                    "vat_validation_status": {
                      "type": "string",
                      "enum": [
                        "valid",
                        "invalid",
                        "format_valid",
                        "invalid_format",
                        "could_not_validate",
                        "not_applicable"
                      ],
                      "description": "登記の送信時に、VAT番号（ない場合は`tax_number`）を検証した結果。`valid` / `invalid`：その国の公式登記（EU VIES、ノルウェー、スイス、ブラジル、コロンビア、コスタリカ、エクアドル、パラグアイ。ポーランドは国内のVAT登録簿でも判定）によって判定されます。`format_valid` / `invalid_format`：照会できる登記がない場合に、その国の形式およびチェックディジットのルールによって判定されます。`could_not_validate`：登記を利用できませんでした。`not_applicable`：番号がない、登記もルールもない国である、またはサンドボックスのセッションです。"
                    },
                    "vat_validated_number": {
                      "type": "string",
                      "nullable": true,
                      "description": "確認された番号で、ソース側で認識されている形式のもの（例: フランスのSIRENやオランダのRSINから導出されたVAT番号）。確認が実行されなかった場合は`null`です。"
                    },
                    "vat_validation_source": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "eu_vies",
                        "pl_vat_white_list",
                        "no_brreg",
                        "ch_uid_register",
                        "br_receita_federal",
                        "co_rues",
                        "cr_hacienda",
                        "ec_sri",
                        "py_dnit",
                        "format_rules",
                        null
                      ],
                      "description": "`vat_validation_status`を決定したソース。公式の登記簿、または`format_rules`です。チェックが実行されなかった場合は`null`です。"
                    },
                    "vat_validated_name": {
                      "type": "string",
                      "nullable": true,
                      "description": "番号を検証したソースに登録されている名義（ソースが開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                    },
                    "vat_validated_address": {
                      "type": "string",
                      "nullable": true,
                      "description": "番号を検証した情報源に登録されている住所（情報源が開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                    },
                    "vat_checked_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "チェックの日時。チェックが実行されなかった場合は`null`です。"
                    },
                    "financial_summary": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true
                    },
                    "officers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "企業に紐づく取締役・役員で、各人のKYCの進捗状況を含みます。"
                    },
                    "beneficial_owners": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "企業に紐づく実質的支配者です。各人のKYCの進捗状況を含みます。"
                    },
                    "addresses": {
                      "type": "array",
                      "nullable": true,
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "登記所から返された住所の詳細（返された場合）。"
                    },
                    "industries": {
                      "type": "array",
                      "nullable": true,
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "登記上の業種分類（取得できる場合）。"
                    },
                    "accounts": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "登記申告の日付（取得できる場合）。年次報告書と株主総会にはlast_annual_return_dateとlast_agm_dateを使用し、これらは財務諸表とは区別されます。"
                    },
                    "registry_data": {
                      "$ref": "#/components/schemas/KYBRegistryData"
                    },
                    "user_provided_data": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "ホスト型の登記確認ステップでエンドユーザーが入力した内容です。このエンドポイントによって変更されることはありません。"
                    },
                    "confirmed_by_user_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "エンドユーザーがホスト型フローで企業データを確認した日時。"
                    },
                    "last_console_edit_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "空でないPATCHが成功するたびに記録されるため、UIで「オペレーターによる編集」の情報を表示できます。"
                    },
                    "is_editable": {
                      "type": "boolean",
                      "description": "エンドユーザーがホスト型フローで法人登記由来のデータをまだ編集できる間は`true`です（法人登記由来で、まだ確認されていない状態）。"
                    }
                  }
                },
                "examples": {
                  "Updated company": {
                    "summary": "修正後の企業の完全なレコード",
                    "value": {
                      "uuid": "6b9479f5-6769-46c8-baf1-df63bbbc5f8c",
                      "node_id": null,
                      "status": "Not Finished",
                      "registry_status": "active",
                      "data_resolved": true,
                      "company_name": "Docs Probe Corp",
                      "registration_number": "DPC-001",
                      "country_code": "US",
                      "region": null,
                      "company_type": "Limited Liability Company",
                      "incorporation_date": "2015-04-12",
                      "registered_address": "1 Example Plaza, Wilmington, DE 19801",
                      "tax_number": null,
                      "risk_level": null,
                      "verification_status": "verified",
                      "is_from_registry": false,
                      "fetch_status": null,
                      "alternative_names": null,
                      "nature_of_business": "Software development",
                      "registered_capital": "USD 50000",
                      "registered_capital_amount": null,
                      "registered_capital_currency": "USD",
                      "website": "https://docsprobe.example.com",
                      "email": "legal@docsprobe.example.com",
                      "phone": "+1 302 555 0143",
                      "legal_entity_identifier": null,
                      "location_of_registration": null,
                      "financial_summary": null,
                      "officers": [],
                      "beneficial_owners": [],
                      "addresses": null,
                      "industries": null,
                      "accounts": null,
                      "registry_data": {
                        "company_name": "Docs Probe Corp",
                        "registration_number": "DPC-001",
                        "country_code": "US",
                        "incorporation_date": "2015-04-12",
                        "legal_address": "1 Example Plaza, Wilmington, DE 19801",
                        "company_type": "Limited Liability Company",
                        "registry_status": "active",
                        "verification_status": "verified",
                        "nature_of_business": "Software development",
                        "registered_capital": "USD 50000",
                        "registered_capital_currency": "USD",
                        "website": "https://docsprobe.example.com",
                        "email": "legal@docsprobe.example.com",
                        "phone": "+1 302 555 0143"
                      },
                      "user_provided_data": null,
                      "confirmed_by_user_at": null,
                      "last_console_edit_at": "2026-06-12T00:02:34.276061Z",
                      "is_editable": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドエラーは`{\"<field>\": [\"<message>\"]}`の形式で返されます。最大長のチェックは形式のチェックより先に実行されるため、`country_code: \"USA\"`ではISOに関するメッセージではなく2文字の制限が報告されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Alpha-3 country code": {
                    "summary": "country_codeはalpha-2である必要があります。長さのチェックが最初に実行されます",
                    "value": {
                      "country_code": [
                        "Ensure this field has no more than 2 characters."
                      ]
                    }
                  },
                  "Non-alphabetic country code": {
                    "summary": "2文字だが英字ではない",
                    "value": {
                      "country_code": [
                        "country_code must be a 2-letter ISO 3166-1 alpha-2 code."
                      ]
                    }
                  },
                  "Invalid currency": {
                    "summary": "3文字だがISO 4217コードではない",
                    "value": {
                      "registered_capital_currency": [
                        "Currency must be a 3-letter ISO 4217 code (e.g. USD, EUR, GBP)."
                      ]
                    }
                  },
                  "Invalid phone": {
                    "summary": "電話番号が形式/桁数のチェックに失敗",
                    "value": {
                      "phone": [
                        "Invalid phone number format."
                      ]
                    }
                  },
                  "Invalid registry status": {
                    "summary": "registry_statusが列挙値に含まれていない",
                    "value": {
                      "registry_status": [
                        "\"liquidated\" is not a valid choice."
                      ]
                    }
                  },
                  "Invalid email": {
                    "summary": "メールアドレスの形式が不正です",
                    "value": {
                      "email": [
                        "Enter a valid email address."
                      ]
                    }
                  },
                  "Invalid website": {
                    "summary": "https://での正規化後もURLバリデーションに失敗する値",
                    "value": {
                      "website": [
                        "Enter a valid URL."
                      ]
                    }
                  },
                  "Bad date format": {
                    "summary": "日付はYYYY-MM-DD形式である必要があります",
                    "value": {
                      "incorporation_date": [
                        "Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "認証情報にwrite:businessesがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なセッション、不明な企業、または別のセッションに属する企業です。各ケースには個別の`detail`メッセージがあります(例を参照)。不明なセッションの照会は認証情報のチェックより前に実行されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションがアプリケーション内に存在しません(または削除されています)",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Unknown company": {
                    "summary": "このUUIDの企業はアプリケーション内に存在しません",
                    "value": {
                      "detail": "No KYBCompany matches the given query."
                    }
                  },
                  "Company / session mismatch": {
                    "summary": "companyUuidは存在しますが、別のセッションに属しています",
                    "value": {
                      "detail": "KYB company does not belong to the given session."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "共有の書き込みレート制限を超えました（APIキーごとに1分あたりPOST/PATCH/DELETEリクエスト300件）。再試行する前に、`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "書き込みの上限に達しました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH \\\n  https://verification.didit.me/v3/session/33333333-4444-5555-6666-777777777777/kyb/88888888-9999-aaaa-bbbb-cccccccccccc/update-data/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"company_name\": \"Docs Probe Corp\",\n    \"registration_number\": \"DPC-001\",\n    \"country_code\": \"US\",\n    \"incorporation_date\": \"2015-04-12\",\n    \"company_type\": \"Limited Liability Company\",\n    \"legal_address\": \"1 Example Plaza, Wilmington, DE 19801\",\n    \"registry_status\": \"active\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_kyb_company_data(\n    \"33333333-4444-5555-6666-777777777777\",\n    \"88888888-9999-aaaa-bbbb-cccccccccccc\",\n    company_name=\"Docs Probe Corp\",\n    registration_number=\"DPC-001\",\n    country_code=\"US\",\n    incorporation_date=\"2015-04-12\",\n    legal_address=\"1 Example Plaza, Wilmington, DE 19801\",\n    company_type=\"Limited Liability Company\",\n    registry_status=\"active\",\n    verification_status=\"verified\",\n    nature_of_business=\"Software development\",\n    registered_capital=\"USD 50000\",\n    website=\"docsprobe.example.com\",\n    email=\"legal@docsprobe.example.com\",\n    phone=\"+1 302 555 0143\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateKybCompanyData(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"88888888-9999-aaaa-bbbb-cccccccccccc\",\n  {\n    company_name: \"Docs Probe Corp\",\n    registration_number: \"DPC-001\",\n    country_code: \"US\",\n    incorporation_date: \"2015-04-12\",\n    legal_address: \"1 Example Plaza, Wilmington, DE 19801\",\n    company_type: \"Limited Liability Company\",\n    registry_status: \"active\",\n    verification_status: \"verified\",\n    nature_of_business: \"Software development\",\n    registered_capital: \"USD 50000\",\n    website: \"docsprobe.example.com\",\n    email: \"legal@docsprobe.example.com\",\n    phone: \"+1 302 555 0143\",\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateKYBCompanyData(ctx, \"33333333-4444-5555-6666-777777777777\", \"88888888-9999-aaaa-bbbb-cccccccccccc\", didit.SessionsUpdateKYBCompanyDataParams{\n\tCompanyName:        didit.String(\"Docs Probe Corp\"),\n\tRegistrationNumber: didit.String(\"DPC-001\"),\n\tCountryCode:        didit.String(\"US\"),\n\tIncorporationDate:  didit.String(\"2015-04-12\"),\n\tLegalAddress:       didit.String(\"1 Example Plaza, Wilmington, DE 19801\"),\n\tCompanyType:        didit.String(\"Limited Liability Company\"),\n\tRegistryStatus:     didit.Some(didit.SessionsUpdateKYBCompanyDataParamsRegistryStatus(\"active\")),\n\tVerificationStatus: didit.Some(didit.SessionsUpdateKYBCompanyDataParamsVerificationStatus(\"verified\")),\n\tNatureOfBusiness:   didit.String(\"Software development\"),\n\tRegisteredCapital:  didit.String(\"USD 50000\"),\n\tWebsite:            didit.String(\"docsprobe.example.com\"),\n\tEmail:              didit.String(\"legal@docsprobe.example.com\"),\n\tPhone:              didit.String(\"+1 302 555 0143\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport me.didit.Didit;\nimport me.didit.types.SessionsUpdateKybCompanyDataParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateKybCompanyData(\"33333333-4444-5555-6666-777777777777\", \"88888888-9999-aaaa-bbbb-cccccccccccc\", SessionsUpdateKybCompanyDataParams.builder()\n        .companyName(\"Docs Probe Corp\")\n        .registrationNumber(\"DPC-001\")\n        .countryCode(\"US\")\n        .incorporationDate(LocalDate.parse(\"2015-04-12\"))\n        .legalAddress(\"1 Example Plaza, Wilmington, DE 19801\")\n        .companyType(\"Limited Liability Company\")\n        .registryStatus(SessionsUpdateKybCompanyDataParams.RegistryStatus.of(\"active\"))\n        .verificationStatus(SessionsUpdateKybCompanyDataParams.VerificationStatus.of(\"verified\"))\n        .natureOfBusiness(\"Software development\")\n        .registeredCapital(\"USD 50000\")\n        .website(\"docsprobe.example.com\")\n        .email(\"legal@docsprobe.example.com\")\n        .phone(\"+1 302 555 0143\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateKybCompanyData('33333333-4444-5555-6666-777777777777', '88888888-9999-aaaa-bbbb-cccccccccccc', [\n    'company_name' => 'Docs Probe Corp',\n    'registration_number' => 'DPC-001',\n    'country_code' => 'US',\n    'incorporation_date' => '2015-04-12',\n    'legal_address' => '1 Example Plaza, Wilmington, DE 19801',\n    'company_type' => 'Limited Liability Company',\n    'registry_status' => 'active',\n    'verification_status' => 'verified',\n    'nature_of_business' => 'Software development',\n    'registered_capital' => 'USD 50000',\n    'website' => 'docsprobe.example.com',\n    'email' => 'legal@docsprobe.example.com',\n    'phone' => '+1 302 555 0143',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_kyb_company_data(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"88888888-9999-aaaa-bbbb-cccccccccccc\",\n  company_name: \"Docs Probe Corp\",\n  registration_number: \"DPC-001\",\n  country_code: \"US\",\n  incorporation_date: \"2015-04-12\",\n  legal_address: \"1 Example Plaza, Wilmington, DE 19801\",\n  company_type: \"Limited Liability Company\",\n  registry_status: \"active\",\n  verification_status: \"verified\",\n  nature_of_business: \"Software development\",\n  registered_capital: \"USD 50000\",\n  website: \"docsprobe.example.com\",\n  email: \"legal@docsprobe.example.com\",\n  phone: \"+1 302 555 0143\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateKybCompanyDataAsync(\"33333333-4444-5555-6666-777777777777\", \"88888888-9999-aaaa-bbbb-cccccccccccc\", new SessionsUpdateKybCompanyDataParams\n{\n    CompanyName = \"Docs Probe Corp\",\n    RegistrationNumber = \"DPC-001\",\n    CountryCode = \"US\",\n    IncorporationDate = \"2015-04-12\",\n    LegalAddress = \"1 Example Plaza, Wilmington, DE 19801\",\n    CompanyType = \"Limited Liability Company\",\n    RegistryStatus = new SessionsUpdateKybCompanyDataParamsRegistryStatus(\"active\"),\n    VerificationStatus = new SessionsUpdateKybCompanyDataParamsVerificationStatus(\"verified\"),\n    NatureOfBusiness = \"Software development\",\n    RegisteredCapital = \"USD 50000\",\n    Website = \"docsprobe.example.com\",\n    Email = \"legal@docsprobe.example.com\",\n    Phone = \"+1 302 555 0143\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/parties/{partyUuid}/": {
      "patch": {
        "summary": "法人確認 (KYB)セッションで主要人物の当事者をスキップする(または再度必須にする)",
        "description": "主要人物の当事者を検証の対象外にするか、対象に戻します。これは、自身のチェックを完了できない当事者に対するオペレーター向けの回避手段です。最も多いのは、UBOまたは取締役に渡された個人KYCセッションが削除された場合です。この場合、その子セッションのステータスが固定され、KYBは`Awaiting User`のまま、状態を進められるものが何も残らなくなります。\n\n`is_skipped: true`を設定すると、その当事者は主要人物の集計から外れ、`KYBKeyPeopleCheck`と親セッションのステータスが直ちに再計算されます。これにより企業セッションが確定し、承認または却下できるようになります。`is_skipped: false`を送信すると当事者は対象に戻り、チェックは再びその当事者を待つ状態になります。\n\nホスト型の主要人物画面で申請者が行うスキップとは異なり、このエンドポイントは役割の`allow_skip`設定による制限を**受けません**。このフラグは申請者が決定できる内容を制限するもので、アナリストが上書きできる内容を制限するものではありません。`requires_verification`は意図的に変更されないため、上書きされた当事者は`requires_verification: true`**かつ**`is_skipped: true`となり、ルールが何を求めていたかが記録に残ります。\n\n当事者はパスで指定したセッションに属している必要があり(属していない場合は`404`と`\"Party does not belong to the given session.\"`が返されます)、さらにお客様のアプリケーションに属している必要があります。実際にフラグを変更するPATCHは、企業セッションでトリガー`console_key_people_skip`の`data.updated` [Webhook](/ja/integration/webhooks)を発火させます。フラグを現在と同じ値に設定するPATCHは何も行わず、当事者をそのまま返します。\n\nAPIキーまたはコンソールユーザートークンを受け付けます。いずれの場合も、認証情報には`write:businesses`権限が必要です。",
        "operationId": "patch_v3_session_kyb_party_update",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_kyb_party",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "親となる法人確認 (KYB) セッションのUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "partyUuid",
            "in": "path",
            "required": true,
            "description": "更新する主要人物の当事者のUUID (法人セッションの判定内の`key_people_checks[].submitted.parties[].uuid`) です。`sessionId`で参照されるセッションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "is_skipped"
                ],
                "properties": {
                  "is_skipped": {
                    "type": "boolean",
                    "description": "`true`を指定すると、当該当事者を検証の対象から除外し、主要人物チェックがその当事者の検証なしで確定できるようにします。`false`を指定すると、再び対象に戻します。",
                    "example": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "関係者が更新されました（フラグが既にこの値だった場合は、変更されずにそのまま返されます）。関係者を返します。形式は、企業セッションの判定における`key_people_checks[].submitted.parties[]`のエントリと同じです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "主要人物の当事者レコード。企業セッションの判定における`key_people_checks[].submitted.parties[]`のエントリと同じ形式です。",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "関係者の識別子。"
                    },
                    "entity_type": {
                      "type": "string",
                      "enum": [
                        "person",
                        "company"
                      ],
                      "description": "当事者が個人か企業か。"
                    },
                    "name": {
                      "type": "string",
                      "description": "当事者の表示名です。"
                    },
                    "is_skipped": {
                      "type": "boolean",
                      "description": "当事者が検証を免除されているかどうか。"
                    },
                    "requires_verification": {
                      "type": "boolean",
                      "description": "役割としきい値のルールが要求した内容です。このエンドポイントでは変更されません。"
                    },
                    "kyc_session_status": {
                      "type": "string",
                      "nullable": true,
                      "description": "紐付けられた個人KYCセッションのステータスです。セッションが削除された場合は削除時点のステータスで固定されます。"
                    },
                    "kyc_session_url": {
                      "type": "string",
                      "nullable": true,
                      "description": "リンクされた個人KYCセッションへのリンク。存在しない場合、または削除された場合は`null`。"
                    },
                    "kyc_session_deleted": {
                      "type": "boolean",
                      "description": "紐づく個人KYCセッションが削除されたため、確定することはありません。"
                    },
                    "kyb_sub_session_deleted": {
                      "type": "boolean",
                      "description": "`kyc_session_deleted`の法人当事者版。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディの検証エラー。このエンドポイントが読み取るフィールドは`is_skipped`のみで、必須です。フィールドエラーは`{\"<field>\": [\"<message>\"]}`の形式で返されます。ボディの検証は関係者の検索の*後*に実行されるため、存在しない関係者に不正な形式の`is_skipped`を送信すると、`400`ではなく`404`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing is_skipped": {
                    "summary": "空のボディ、または`is_skipped`を含まないボディ",
                    "value": {
                      "is_skipped": [
                        "This field is required."
                      ]
                    }
                  },
                  "Non-boolean is_skipped": {
                    "summary": "値がブール値ではありません(`\"maybe\"`、`2`、`[]`など)。ブール値に加え、`\"true\"`/`\"false\"`、`1`/`0`、`\"yes\"`/`\"no\"`はすべて受け付けられます",
                    "value": {
                      "is_skipped": [
                        "Must be a valid boolean."
                      ]
                    }
                  },
                  "Null is_skipped": {
                    "summary": "`is_skipped`は存在しますが`null`です",
                    "value": {
                      "is_skipped": [
                        "This field may not be null."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか権限が不足しています。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "認証情報にwrite:businessesがありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明な当事者、または別のセッションに属する当事者です。各ケースには個別の`detail`メッセージがあります(例を参照)。認証情報と権限のチェックは当事者の照会より前に実行されるため、権限のない呼び出しでは`404`ではなく`403`が返されます。セッションの照会は別途行われないため、不明な`sessionId`と自身の当事者を組み合わせた場合は、不一致のメッセージが返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown party": {
                    "summary": "このUUIDの当事者はアプリケーション内に存在しません",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Party / session mismatch": {
                    "summary": "partyUuidは存在するが、別のセッションに紐づいている",
                    "value": {
                      "detail": "Party does not belong to the given session."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "共有の書き込みレート制限を超えました（APIキーごとに1分あたりPOST/PATCH/DELETEリクエスト300件）。再試行する前に、`Retry-After`および`X-RateLimit-*`レスポンスヘッダーを確認してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "書き込みの上限に達しました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_kyb_party(\n    \"33333333-4444-5555-6666-777777777777\",\n    \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\",\n    is_skipped=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateKybParty(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\",\n  {\n    is_skipped: true,\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateKYBParty(ctx, \"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\", didit.SessionsUpdateKYBPartyParams{\n\tIsSkipped: true,\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsUpdateKybPartyParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateKybParty(\"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\", SessionsUpdateKybPartyParams.builder()\n        .isSkipped(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateKybParty('33333333-4444-5555-6666-777777777777', '0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41', [\n    'is_skipped' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_kyb_party(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\",\n  is_skipped: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateKybPartyAsync(\"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\", new SessionsUpdateKybPartyParams\n{\n    IsSkipped = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/travel-rule/settings/": {
      "get": {
        "summary": "トラベルルールの設定を取得",
        "description": "アプリケーションのトラベルルール設定とVASPプロファイルを取得します。初回の読み取り時に、デフォルト（無効）の設定行と空のプロファイルが自動作成されます。",
        "operationId": "getTravelRuleSettings",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "retrieve_settings",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/settings/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.retrieve_settings()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.retrieveSettings();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RetrieveSettings(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().retrieveSettings();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->retrieveSettings();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.retrieve_settings\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.RetrieveSettingsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "現在のトラベルルール設定とVASPプロファイル。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleSettingsDetail"
                },
                "examples": {
                  "Disabled (default)": {
                    "value": {
                      "is_enabled": false,
                      "jurisdiction": "EU",
                      "name_matching_strictness": "DEFAULT",
                      "confirmation_timeout_hours": 48,
                      "timeout_outcome": "HOLD",
                      "threshold_amount": "0.00",
                      "inbound_auto_accept": true,
                      "allow_self_declaration": true,
                      "allow_screenshot_proof": true,
                      "auto_wallet_verification": true,
                      "vasp_attribution_enabled": true,
                      "legal_name": "",
                      "lei": "",
                      "compliance_email": "",
                      "is_discoverable": true,
                      "counterparty_screening_enabled": false,
                      "sunrise_policy": "",
                      "sunrise_jurisdictions": [
                        "CO",
                        "KH",
                        "VN"
                      ],
                      "non_responsive_policy": "",
                      "travel_address": "",
                      "disabled_networks": [],
                      "networks": {
                        "gtr": {
                          "rail": "GTR",
                          "mode": "unavailable",
                          "state": "didit_onboarding",
                          "reason": "didit_membership_not_live",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        },
                        "trust": {
                          "rail": "TRUST",
                          "mode": "unavailable",
                          "state": "unavailable",
                          "reason": "own_membership_only",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        },
                        "verifyvasp": {
                          "rail": "VERIFYVASP",
                          "mode": "unavailable",
                          "state": "didit_onboarding",
                          "reason": "didit_membership_not_live",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        },
                        "sygna": {
                          "rail": "SYGNA",
                          "mode": "unavailable",
                          "state": "didit_onboarding",
                          "reason": "didit_membership_not_live",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        }
                      },
                      "didit_network": {
                        "listed": false,
                        "missing": [
                          "travel_rule_off",
                          "legal_name_missing",
                          "compliance_email_missing"
                        ],
                        "compliance_email_confirmed": false
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "トラベルルールの設定を更新",
        "description": "アプリケーションのトラベルルール設定とVASPプロファイルを作成または更新します。部分更新のため、変更したいフィールドのみを送信してください。`is_enabled: true`を設定するには、空でない`legal_name`（保存済みのもの、または同じリクエストに含めたもの）が必要です。ない場合は400を返します。",
        "operationId": "updateTravelRuleSettings",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "update_settings",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleSettingsUpdate"
              },
              "example": {
                "is_enabled": true,
                "legal_name": "Origin CASP SL",
                "jurisdiction": "EU",
                "name_matching_strictness": "DEFAULT",
                "confirmation_timeout_hours": 48,
                "timeout_outcome": "HOLD",
                "is_discoverable": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"is_enabled\": true, \"legal_name\": \"Origin CASP SL\", \"jurisdiction\": \"EU\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.update_settings(\n    is_enabled=True,\n    legal_name=\"Origin CASP SL\",\n    jurisdiction=\"EU\",\n    name_matching_strictness=\"DEFAULT\",\n    confirmation_timeout_hours=48,\n    timeout_outcome=\"HOLD\",\n    is_discoverable=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.updateSettings({\n  is_enabled: true,\n  legal_name: \"Origin CASP SL\",\n  jurisdiction: \"EU\",\n  name_matching_strictness: \"DEFAULT\",\n  confirmation_timeout_hours: 48,\n  timeout_outcome: \"HOLD\",\n  is_discoverable: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.UpdateSettings(ctx, didit.TravelRuleSettingsUpdate{\n\tIsEnabled:                didit.Bool(true),\n\tLegalName:                didit.String(\"Origin CASP SL\"),\n\tJurisdiction:             didit.String(\"EU\"),\n\tNameMatchingStrictness:   didit.Some(didit.TravelRuleSettingsUpdateNameMatchingStrictness(\"DEFAULT\")),\n\tConfirmationTimeoutHours: didit.Int(48),\n\tTimeoutOutcome:           didit.Some(didit.TravelRuleSettingsUpdateTimeoutOutcome(\"HOLD\")),\n\tIsDiscoverable:           didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleSettingsUpdate;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().updateSettings(TravelRuleSettingsUpdate.builder()\n        .isEnabled(true)\n        .legalName(\"Origin CASP SL\")\n        .jurisdiction(\"EU\")\n        .nameMatchingStrictness(TravelRuleSettingsUpdate.NameMatchingStrictness.of(\"DEFAULT\"))\n        .confirmationTimeoutHours(48L)\n        .timeoutOutcome(TravelRuleSettingsUpdate.TimeoutOutcome.of(\"HOLD\"))\n        .isDiscoverable(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->updateSettings([\n    'is_enabled' => true,\n    'legal_name' => 'Origin CASP SL',\n    'jurisdiction' => 'EU',\n    'name_matching_strictness' => 'DEFAULT',\n    'confirmation_timeout_hours' => 48,\n    'timeout_outcome' => 'HOLD',\n    'is_discoverable' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.update_settings(\n  is_enabled: true,\n  legal_name: \"Origin CASP SL\",\n  jurisdiction: \"EU\",\n  name_matching_strictness: \"DEFAULT\",\n  confirmation_timeout_hours: 48,\n  timeout_outcome: \"HOLD\",\n  is_discoverable: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.UpdateSettingsAsync(new TravelRuleSettingsUpdate\n{\n    IsEnabled = true,\n    LegalName = \"Origin CASP SL\",\n    Jurisdiction = \"EU\",\n    NameMatchingStrictness = new TravelRuleSettingsUpdateNameMatchingStrictness(\"DEFAULT\"),\n    ConfirmationTimeoutHours = 48,\n    TimeoutOutcome = new TravelRuleSettingsUpdateTimeoutOutcome(\"HOLD\"),\n    IsDiscoverable = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後の設定とプロフィール。GETと同じ形式です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleSettingsDetail"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。例：legal_nameを指定せずに有効化した場合、sunrise_policyまたはnon_responsive_policyがHOLD、REJECT、PROCEED、空のいずれでもない場合、`matching_rules`に不明なフィールドがある場合、または`data_sharing_fields`の選択内容が管轄地域の制度における送金人の義務を満たせない場合（エラーは`data_sharing_fields`の下にエンティティタイプごとのキーで返されます）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "legal_name": [
                    "legal_name is required to enable travel rule."
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/settings/compliance-email/confirmation/": {
      "post": {
        "summary": "コンプライアンスメールの確認を送信する",
        "description": "VASPプロフィールのcompliance_emailに、1回限り有効な確認リンクをメールで送信します。リンクを開いて確認ボタンを押すとアドレスが確認されます。Diditネットワークがプロフィールを掲載するには、この確認が必要です。新しいリクエストを送ると以前のリンクは置き換えられ、コンプライアンス用メールアドレスが変更されるとリンクは無効になります。送信はアドレスごとに1分あたり1通です。",
        "operationId": "sendTravelRuleComplianceEmailConfirmation",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "send_compliance_email_confirmation",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/settings/compliance-email/confirmation/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.send_compliance_email_confirmation()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.sendComplianceEmailConfirmation();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.SendComplianceEmailConfirmation(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().sendComplianceEmailConfirmation();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->sendComplianceEmailConfirmation();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.send_compliance_email_confirmation\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.SendComplianceEmailConfirmationAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "202": {
            "description": "確認メールが送信されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "sent_to": {
                      "type": "string",
                      "format": "email"
                    }
                  }
                },
                "example": {
                  "sent_to": "compliance@your-vasp.example"
                }
              }
            }
          },
          "400": {
            "description": "コンプライアンス用のメールアドレスが設定されていないか、すでに確認済みです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "No compliance email": {
                    "value": {
                      "compliance_email": [
                        "Set a compliance email before confirming it."
                      ]
                    }
                  },
                  "Already confirmed": {
                    "value": {
                      "compliance_email": [
                        "This compliance email is already confirmed."
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "1分以内に、このアドレスへ確認が送信されています。"
          },
          "503": {
            "description": "メールを送信できませんでした。変更は行われていません。しばらくしてから再度お試しください。"
          }
        }
      }
    },
    "/v3/travel-rule/wallet-addresses/": {
      "get": {
        "summary": "ウォレットアドレス帳のエントリを一覧表示",
        "description": "アプリケーションのトラベルルール用ウォレットアドレス帳のページネーションされた一覧（新しい順）。",
        "operationId": "listTravelRuleWalletAddresses",
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_addresses",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/wallet-addresses/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.travel_rule.wallet_addresses.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.travelRule.walletAddresses.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.TravelRule.WalletAddresses.ListAutoPaging(ctx, didit.TravelRuleWalletAddressesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.travelRule().walletAddresses().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->travelRule->walletAddresses->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.wallet_addresses.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.TravelRule.WalletAddresses.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたウォレットアドレス帳のエントリー一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WalletAddressEntry"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "ウォレットアドレスを登録する",
        "description": "トラベルルールのウォレットアドレス帳にエントリを追加し、INTERNALレール経由の受信送金をアドレス帳と照合できるようにします。",
        "operationId": "createTravelRuleWalletAddress",
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_addresses",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletAddressEntryCreate"
              },
              "example": {
                "address": "0xBeneficiaryWallet01",
                "chain": "ETH",
                "holder_name": "Ana Diaz",
                "holder_vendor_data": "user-042",
                "self_declared": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/wallet-addresses/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"address\": \"0xBeneficiaryWallet01\", \"chain\": \"ETH\", \"holder_name\": \"Ana Diaz\", \"self_declared\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.wallet_addresses.create(\n    address=\"0xBeneficiaryWallet01\",\n    chain=\"ETH\",\n    holder_vendor_data=\"user-042\",\n    holder_name=\"Ana Diaz\",\n    self_declared=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.walletAddresses.create({\n  address: \"0xBeneficiaryWallet01\",\n  chain: \"ETH\",\n  holder_vendor_data: \"user-042\",\n  holder_name: \"Ana Diaz\",\n  self_declared: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.WalletAddresses.Create(ctx, didit.WalletAddressEntryCreate{\n\tAddress:          \"0xBeneficiaryWallet01\",\n\tChain:            didit.String(\"ETH\"),\n\tHolderVendorData: didit.String(\"user-042\"),\n\tHolderName:       didit.String(\"Ana Diaz\"),\n\tSelfDeclared:     didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.WalletAddressEntryCreate;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().walletAddresses().create(WalletAddressEntryCreate.builder()\n        .address(\"0xBeneficiaryWallet01\")\n        .chain(\"ETH\")\n        .holderVendorData(\"user-042\")\n        .holderName(\"Ana Diaz\")\n        .selfDeclared(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->walletAddresses->create([\n    'address' => '0xBeneficiaryWallet01',\n    'chain' => 'ETH',\n    'holder_vendor_data' => 'user-042',\n    'holder_name' => 'Ana Diaz',\n    'self_declared' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.wallet_addresses.create(\n  address: \"0xBeneficiaryWallet01\",\n  chain: \"ETH\",\n  holder_vendor_data: \"user-042\",\n  holder_name: \"Ana Diaz\",\n  self_declared: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.WalletAddresses.CreateAsync(new WalletAddressEntryCreate\n{\n    Address = \"0xBeneficiaryWallet01\",\n    Chain = \"ETH\",\n    HolderVendorData = \"user-042\",\n    HolderName = \"Ana Diaz\",\n    SelfDeclared = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "作成されたエントリ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletAddressEntry"
                }
              }
            }
          },
          "400": {
            "description": "このアプリケーションで重複するウォレット（アドレス、チェーン、メモ）、チェーンが扱えないメモまたはXアドレス、`address`の欠落、無効な`travel_address`、`allow_self_declaration`がオフの状態での`self_declared: true`、または`ownership_validation_mode`が`FULL`の状態での`self_declared: true`。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "examples": {
                  "Duplicate entry": {
                    "value": {
                      "address": [
                        "A wallet address entry with this address and chain already exists."
                      ]
                    }
                  },
                  "Invalid travel address": {
                    "value": {
                      "travel_address": [
                        "Invalid travel address."
                      ]
                    }
                  },
                  "Self-declaration disabled": {
                    "value": {
                      "self_declared": [
                        "Self-declared ownership is disabled for this application."
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/wallet-addresses/{entry_uuid}/": {
      "patch": {
        "summary": "ウォレットアドレス保有者のメタデータを更新",
        "description": "holder_name、holder_vendor_data、entity_type、travel_addressを部分更新します。travel_addressを設定すると、エントリーにTRPのルーティングアドレスが紐付けられます。無効な値は400で拒否されます。レスポンスにはこの4つのフィールドのみが返されます。",
        "operationId": "updateTravelRuleWalletAddress",
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_addresses",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "entry_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletAddressEntryUpdate"
              },
              "example": {
                "holder_name": "Ana Updated",
                "travel_address": "ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH https://verification.didit.me/v3/travel-rule/wallet-addresses/{entry_uuid}/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"holder_name\": \"Ana Updated\", \"travel_address\": \"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.wallet_addresses.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    holder_name=\"Ana Updated\",\n    travel_address=\"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.walletAddresses.update(\"11111111-2222-3333-4444-555555555555\", {\n  holder_name: \"Ana Updated\",\n  travel_address: \"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.WalletAddresses.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WalletAddressEntryUpdateParam{\n\tHolderName:    didit.String(\"Ana Updated\"),\n\tTravelAddress: didit.String(\"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.WalletAddressEntryUpdate;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().walletAddresses().update(\"11111111-2222-3333-4444-555555555555\", WalletAddressEntryUpdate.builder()\n        .holderName(\"Ana Updated\")\n        .travelAddress(\"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->walletAddresses->update('11111111-2222-3333-4444-555555555555', [\n    'holder_name' => 'Ana Updated',\n    'travel_address' => 'ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.wallet_addresses.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  holder_name: \"Ana Updated\",\n  travel_address: \"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.WalletAddresses.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new WalletAddressEntryUpdate\n{\n    HolderName = \"Ana Updated\",\n    TravelAddress = \"ta2ih1MicegQ3JqiKz9xT89KsSuwaDJYw8DgzmeSEp1h9tduJcNDZ5SgKLEHeyGMcS1s2HgbM6undFrMQknhM5aTXw3G9KBzi16hx\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新されたフィールド。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletAddressEntryUpdate"
                }
              }
            }
          },
          "400": {
            "description": "`travel_address`は有効なトラベルアドレスではありません。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid travel address": {
                    "value": {
                      "travel_address": [
                        "Invalid travel address."
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なエントリ、または削除されたエントリです。"
          }
        }
      },
      "delete": {
        "summary": "ウォレットアドレスを削除",
        "description": "エントリを、その所有権証明と、それらが保存したスクリーンショットとともに削除します。エントリは直ちに新しい送金と一致しなくなり、そのアドレスは再登録できるようになります。すでにそのウォレットを使用した送金は独自の記録を保持し、内容は変わりません。削除は元に戻せません。",
        "operationId": "deleteTravelRuleWalletAddress",
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_addresses",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "entry_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE https://verification.didit.me/v3/travel-rule/wallet-addresses/{entry_uuid}/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.travel_rule.wallet_addresses.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.travelRule.walletAddresses.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.TravelRule.WalletAddresses.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.travelRule().walletAddresses().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->travelRule->walletAddresses->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.wallet_addresses.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.TravelRule.WalletAddresses.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ],
        "responses": {
          "204": {
            "description": "削除しました。"
          },
          "404": {
            "description": "不明なエントリ、またはすでに削除されたエントリです。"
          },
          "503": {
            "description": "`wallet_address_deletion_incomplete`：保存済みのファイルを削除できなかったため、削除が完了前に停止しました。アドレス帳のエントリは残っています。同じリクエストを再試行して削除を完了してください。",
            "content": {
              "application/json": {
                "example": {
                  "detail": "A stored file could not be deleted, so the deletion stopped before it finished. Try again.",
                  "code": "wallet_address_deletion_incomplete"
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/vasps/": {
      "get": {
        "summary": "VASPディレクトリを検索",
        "description": "VASPディレクトリを名前順にページ分割して検索します。対象は、DiditがESMAの暫定MiCA登録簿、公開TRISAディレクトリ、グローバルLEI登録簿、および独自のキュレーションをもとに構築した共有ディレクトリのエントリーと、Diditネットワークのメンバーです。各行には、現時点でアプリケーションからその相手へのルートが含まれます。自身のアプリケーションのプロファイルが一覧に表示されることはありません。各行には、共有のデューデリジェンス評価と、アプリケーション独自の判定、エンティティスクリーニング、アンケートも含まれます。",
        "operationId": "listTravelRuleVasps",
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "名前またはエイリアスの一部（大文字と小文字を区別しない）、完全一致のLEI、またはドメイン（example.comまたはそのドメイン上のURL）。Diditネットワークのメンバーは、法人名、LEI、またはコンプライアンス用メールアドレスのドメインで一致します。"
          },
          {
            "name": "network",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "GTR",
                "TRUST",
                "VERIFYVASP",
                "SYGNA",
                "TRISA"
              ]
            },
            "description": "ネットワークのメンバーディレクトリに現在掲載されているディレクトリエントリのみ。"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "ISO 3166のalpha-2またはalpha-3の国コード。それ以外は400になります。"
          },
          {
            "name": "reachable",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "true: お客様のアプリケーションが利用可能なルートを持つVASPのみ(Diditネットワークのメンバーを含む)。false: 現時点で到達できないディレクトリエントリのみ。"
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "directory",
                "didit"
              ]
            },
            "description": "ディレクトリエントリのみ、またはDiditネットワークのメンバーのみ。"
          },
          {
            "name": "risk",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "LOW",
                "MEDIUM",
                "HIGH"
              ]
            },
            "description": "risk_levelがこの区分のディレクトリエントリのみ。スコアリングされないDiditネットワークのメンバーは一致しません。"
          },
          {
            "name": "responsiveness",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "RESPONSIVE",
                "UNRESPONSIVE",
                "UNKNOWN"
              ]
            },
            "description": "responsiveness.statusがこの値のディレクトリエントリのみ。Diditネットワークのメンバーは一致しません。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/travel-rule/vasps/?search=counterparty&reachable=true' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.travel_rule.list_vasps():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.travelRule.listVasps()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.TravelRule.ListVASPsAutoPaging(ctx, didit.TravelRuleListVASPsParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.travelRule().listVasps()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->travelRule->listVasps() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.list_vasps.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.TravelRule.ListVaspsAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "名前順に並べた、ページ分割されたVASPディレクトリの検索結果。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/VaspDirectoryEntry"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "フィルターが無効です。本文には各フィールドが示されます。例: 不明なネットワーク、国コード、リスク帯、応答状況ステータス。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "jurisdiction": [
                    "Use an ISO 3166 alpha-2 or alpha-3 country code."
                  ],
                  "network": [
                    "\"SWIFT\" is not a valid choice."
                  ]
                }
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "list_vasps",
          "auth": "api_key",
          "server": true
        }
      }
    },
    "/v3/travel-rule/vasps/{vasp_id}/": {
      "get": {
        "summary": "VASPディレクトリのエントリを取得",
        "description": "検索で返されたIDで指定したディレクトリエントリーまたはDiditネットワークメンバー1件。同じフィールドに加え、お客様のアプリケーションからそのメンバーへのルートを含みます。",
        "operationId": "getTravelRuleVasp",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "retrieve_vasp",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.retrieve_vasp(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.retrieveVasp(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RetrieveVASP(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().retrieveVasp(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->retrieveVasp('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.retrieve_vasp(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.RetrieveVaspAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "エントリです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaspDirectoryEntry"
                }
              }
            }
          },
          "404": {
            "description": "このidのエントリまたは掲載されているDiditネットワークメンバーはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry has this id."
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/vasps/{vasp_id}/decision/": {
      "get": {
        "summary": "VASPに対する判定を取得",
        "description": "取引相手（ディレクトリのエントリまたはDiditネットワークのメンバー）に対するお客様のアプリケーションの判定です。approved、restricted、blockedのいずれかです。独自の判定を持たないブランドのエンティティはブランドの判定に従い、そのブランドはinherited_fromで示されます。お客様のアプリケーション専用です。",
        "operationId": "getTravelRuleVaspDecision",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "retrieve_vasp_decision",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/decision/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.retrieve_vasp_decision(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.retrieveVaspDecision(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RetrieveVASPDecision(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().retrieveVaspDecision(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->retrieveVaspDecision('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.retrieve_vasp_decision(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.RetrieveVaspDecisionAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "適用される判定、またはnullです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyDecisionResponse"
                },
                "examples": {
                  "Own decision": {
                    "value": {
                      "decision": {
                        "decision": "APPROVED",
                        "reason": "Licensed in DE, questionnaire reviewed",
                        "decided_by": "",
                        "updated_at": "2026-10-14T10:05:00Z",
                        "inherited_from": null
                      }
                    }
                  },
                  "Inherited from the brand": {
                    "value": {
                      "decision": {
                        "decision": "BLOCKED",
                        "reason": "Group refused after review",
                        "decided_by": "",
                        "updated_at": "2026-10-14T10:05:00Z",
                        "inherited_from": {
                          "id": "5e4d3c2b-1a0f-4e9d-8c7b-6a5f4e3d2c1b",
                          "name": "Example Group"
                        }
                      }
                    }
                  },
                  "No decision": {
                    "value": {
                      "decision": null
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このidのディレクトリエントリまたは掲載されているDiditネットワークメンバーはありません。自社のVASPプロファイルが自社の取引相手になることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry or Didit network member has this id."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "VASPに対する判定を設定する",
        "description": "取引相手に対するアプリケーションの判定を作成または変更します。判定はAPPROVED、RESTRICTED、BLOCKEDのいずれかで、任意で理由を付けられます。共有ディレクトリのエントリが変更されることはなく、取引ルール（counterparty_dd_status）を通じてのみ作用します。ブランドに対する判定は、そのブランドのエンティティのうち独自の判定を持たない各エンティティにも適用されます。",
        "operationId": "updateTravelRuleVaspDecision",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "update_vasp_decision",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleCounterpartyDecisionRequest"
              },
              "example": {
                "decision": "BLOCKED",
                "reason": "Unlicensed in its home jurisdiction"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PUT https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/decision/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"decision\": \"BLOCKED\", \"reason\": \"Unlicensed in its home jurisdiction\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.update_vasp_decision(\n    \"11111111-2222-3333-4444-555555555555\",\n    decision=\"BLOCKED\",\n    reason=\"Unlicensed in its home jurisdiction\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.updateVaspDecision(\"11111111-2222-3333-4444-555555555555\", {\n  decision: \"BLOCKED\",\n  reason: \"Unlicensed in its home jurisdiction\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.UpdateVASPDecision(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleCounterpartyDecisionRequest{\n\tDecision: \"BLOCKED\",\n\tReason:   didit.String(\"Unlicensed in its home jurisdiction\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleCounterpartyDecisionRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().updateVaspDecision(\"11111111-2222-3333-4444-555555555555\", TravelRuleCounterpartyDecisionRequest.builder()\n        .decision(TravelRuleCounterpartyDecisionRequest.Decision.of(\"BLOCKED\"))\n        .reason(\"Unlicensed in its home jurisdiction\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->updateVaspDecision('11111111-2222-3333-4444-555555555555', [\n    'decision' => 'BLOCKED',\n    'reason' => 'Unlicensed in its home jurisdiction',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.update_vasp_decision(\n  \"11111111-2222-3333-4444-555555555555\",\n  decision: \"BLOCKED\",\n  reason: \"Unlicensed in its home jurisdiction\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.UpdateVaspDecisionAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleCounterpartyDecisionRequest\n{\n    Decision = \"BLOCKED\",\n    Reason = \"Unlicensed in its home jurisdiction\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "現在適用されている判定です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyDecisionResponse"
                },
                "example": {
                  "decision": {
                    "decision": "BLOCKED",
                    "reason": "Unlicensed in its home jurisdiction",
                    "decided_by": "",
                    "updated_at": "2026-10-14T10:05:00Z",
                    "inherited_from": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "判定が指定されていないか、APPROVED、RESTRICTED、BLOCKEDのいずれでもありません。または、理由が255文字を超えています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "decision": [
                    "\"MAYBE\" is not a valid choice."
                  ]
                }
              }
            }
          },
          "404": {
            "description": "このidのディレクトリエントリまたは掲載されているDiditネットワークメンバーはありません。自社のVASPプロファイルが自社の取引相手になることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry or Didit network member has this id."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "VASPに対する判定をクリアする",
        "description": "取引相手に対するアプリケーション独自の判定をクリアします。レスポンスには、クリア後に適用される判定が示されます。nullか、ブランドに属するエンティティの場合はブランドの判定で、エンティティは再びその判定に従います。",
        "operationId": "clearTravelRuleVaspDecision",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "clear_vasp_decision",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/decision/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.clear_vasp_decision(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.clearVaspDecision(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.ClearVASPDecision(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().clearVaspDecision(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->clearVaspDecision('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.clear_vasp_decision(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.ClearVaspDecisionAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "判定が解除されました。ボディには現在適用されている判定が含まれます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyDecisionResponse"
                },
                "example": {
                  "decision": null
                }
              }
            }
          },
          "404": {
            "description": "このidの取引相手が存在しないか、アプリケーション自身がその取引相手に対する判定を持っていません（ブランドから継承しているだけの判定はここではクリアできません。ブランドの判定をクリアしてください）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Unknown id": {
                    "value": {
                      "detail": "No directory entry or Didit network member has this id."
                    }
                  },
                  "No decision of its own": {
                    "value": {
                      "detail": "This application has no decision of its own on this counterparty."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/vasps/{vasp_id}/screening/": {
      "get": {
        "summary": "VASPのエンティティスクリーニングを取得",
        "description": "アプリケーションで取引相手スクリーニングが有効かどうか、1回のスクリーニングで組織にかかる費用、結果が最新とみなされる期間、および取引相手に対する最新の制裁・ネガティブメディアスクリーニングです。読み取りは無料です。",
        "operationId": "getTravelRuleVaspScreening",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "retrieve_vasp_screening",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/screening/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.retrieve_vasp_screening(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.retrieveVaspScreening(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RetrieveVASPScreening(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().retrieveVaspScreening(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->retrieveVaspScreening('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.retrieve_vasp_screening(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.RetrieveVaspScreeningAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "スクリーニング設定、その料金、および最新のスクリーニングです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyScreeningStatus"
                },
                "example": {
                  "enabled": true,
                  "price": "0.20",
                  "fresh_days": 30,
                  "screening": {
                    "id": "7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "Approved",
                    "total_hits": 0,
                    "score": null,
                    "screened_at": "2026-10-14T09:58:00Z",
                    "fresh": true,
                    "flagged": false
                  }
                }
              }
            }
          },
          "403": {
            "description": "組織の契約に取引相手スクリーニングの料金が設定されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No contract rate is configured for this usage type."
                }
              }
            }
          },
          "404": {
            "description": "このidのディレクトリエントリまたは掲載されているDiditネットワークメンバーはありません。自社のVASPプロファイルが自社の取引相手になることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry or Didit network member has this id."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "VASPをスクリーニング",
        "description": "アプリケーションに対して、取引相手のエンティティを制裁およびネガティブメディアでスクリーニングします。オプトイン方式のため、トラベルルールの設定でcounterparty_screening_enabledを有効にする必要があります。新しいスクリーニングは、それぞれ組織の企業AMLスクリーニングの料金で課金されます。実施から30日未満のスクリーニングがある場合は、refresh: trueを送信しない限り、代わりにそのスクリーニングが返されます(200、課金なし)。1つの取引相手に対するスクリーニングは、アプリケーションごとに同時に1件のみ実行されます。結果はお使いのアプリケーションのみが参照できます。サンドボックスアプリケーションでは、スクリーニングは一切行われません。",
        "operationId": "screenTravelRuleVasp",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "screen_vasp",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleCounterpartyScreeningRequest"
              },
              "example": {
                "refresh": false
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/screening/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"refresh\": false}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.screen_vasp(\n    \"11111111-2222-3333-4444-555555555555\",\n    refresh=False,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.screenVasp(\"11111111-2222-3333-4444-555555555555\", {\n  refresh: false,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.ScreenVASP(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleCounterpartyScreeningRequest{\n\tRefresh: didit.Bool(false),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleCounterpartyScreeningRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().screenVasp(\"11111111-2222-3333-4444-555555555555\", TravelRuleCounterpartyScreeningRequest.builder()\n        .refresh(false)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->screenVasp('11111111-2222-3333-4444-555555555555', [\n    'refresh' => false,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.screen_vasp(\n  \"11111111-2222-3333-4444-555555555555\",\n  refresh: false\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.ScreenVaspAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleCounterpartyScreeningRequest\n{\n    Refresh = false,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "最新のスクリーニングがすでに存在していたため、それが返されました。請求は発生していません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyScreeningResult"
                },
                "example": {
                  "outcome": "reused",
                  "screening": {
                    "id": "7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "Approved",
                    "total_hits": 0,
                    "score": null,
                    "screened_at": "2026-10-14T09:58:00Z",
                    "fresh": true,
                    "flagged": false
                  }
                }
              }
            }
          },
          "201": {
            "description": "新しいスクリーニングが実行され、課金されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyScreeningResult"
                },
                "example": {
                  "outcome": "screened",
                  "screening": {
                    "id": "7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "In Review",
                    "total_hits": 2,
                    "score": 85.0,
                    "screened_at": "2026-10-14T09:58:00Z",
                    "fresh": true,
                    "flagged": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効か、取引相手にスクリーニング対象の名前がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": [
                    "This counterparty has no name to screen."
                  ]
                }
              }
            }
          },
          "403": {
            "description": "組織の残高がスクリーニング費用に足りない（コードinsufficient_credits。何も実行されず、請求も発生していません）か、契約にこのスクリーニングの料金が設定されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "You don't have enough credits to perform this request. Please top up at https://business.didit.me",
                  "code": "insufficient_credits"
                }
              }
            }
          },
          "404": {
            "description": "このidのディレクトリエントリまたは掲載されているDiditネットワークメンバーはありません。自社のVASPプロファイルが自社の取引相手になることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry or Didit network member has this id."
                }
              }
            }
          },
          "409": {
            "description": "何も実行されず、請求も発生していません。アプリケーションで取引相手のスクリーニングが無効になっている、アプリケーションがサンドボックスのものである、またはこの取引相手のスクリーニングがすでに実行中であることが原因です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Screening off": {
                    "value": {
                      "detail": "Counterparty screening is turned off. Enable it in the Travel Rule settings first."
                    }
                  },
                  "Sandbox application": {
                    "value": {
                      "detail": "Counterparty screening does not run for sandbox applications."
                    }
                  },
                  "Already running": {
                    "value": {
                      "detail": "A screening of this counterparty is already running. Try again in a moment."
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "スクリーニングを完了できませんでした。料金は請求されていません。しばらくしてから再度お試しください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "The screening provider did not answer. Try again in a moment."
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/vasps/{vasp_id}/questionnaires/": {
      "get": {
        "summary": "VASPとのデューデリジェンスアンケートの一覧を取得",
        "description": "お客様のアプリケーションが取引相手に送信したすべてのデューデリジェンスアンケートを、ステータスおよび回答済みの場合はその回答とともに新しい順に示します。お客様のアプリケーション以外には公開されません。",
        "operationId": "listTravelRuleVaspQuestionnaires",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "list_vasp_questionnaires",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/questionnaires/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.list_vasp_questionnaires(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.listVaspQuestionnaires(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.ListVASPQuestionnaires(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().listVaspQuestionnaires(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->listVaspQuestionnaires('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.list_vasp_questionnaires(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.ListVaspQuestionnairesAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "この取引相手とのアンケートです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyQuestionnaireList"
                },
                "example": {
                  "questionnaires": [
                    {
                      "id": "3f9e8d7c-6b5a-4c3d-9e2f-1a0b9c8d7e6f",
                      "status": "SENT",
                      "form_version": "1",
                      "sent_to": "travelrule@counterparty.example",
                      "sent_at": "2026-10-14T10:00:00Z",
                      "expires_at": "2026-11-13T10:00:00Z",
                      "answered_at": null,
                      "valid_until": null,
                      "current": false,
                      "answers": {}
                    },
                    {
                      "id": "8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
                      "status": "ANSWERED",
                      "form_version": "1",
                      "sent_to": "travelrule@counterparty.example",
                      "sent_at": "2026-09-02T08:00:00Z",
                      "expires_at": "2026-10-02T08:00:00Z",
                      "answered_at": "2026-09-04T15:20:00Z",
                      "valid_until": "2027-09-04T15:20:00Z",
                      "current": true,
                      "answers": {
                        "legal_name": "Example Counterparty VASP, incorporated in the example jurisdiction.",
                        "licensing": "Crypto-asset service provider authorised under MiCA by its national regulator, licence active.",
                        "jurisdictions": "EU and EEA. We do not serve the United States.",
                        "aml_program": "Written AML/CFT policy, annual independent review, last completed in March 2026.",
                        "compliance_officer": "Head of Compliance, reachable at compliance@counterparty.example.",
                        "sanctions_screening": "Customers at onboarding and daily; counterparties on every transfer.",
                        "transaction_monitoring": "Rule-based monitoring with analyst review; suspicious activity reports filed with the FIU.",
                        "travel_rule": "TRP and email; we answer requests within one business day.",
                        "custody": "Segregated customer wallets held with a qualified custodian, insured.",
                        "ownership": "No shareholder holds 25 percent or more; parent company Example Holding Group.",
                        "record_keeping": "Five-year record-keeping for Travel Rule and transaction data, as our regulator requires.",
                        "data_protection": "Encrypted at rest and in transit, stored in the EU."
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "このidのディレクトリエントリまたは掲載されているDiditネットワークメンバーはありません。自社のVASPプロファイルが自社の取引相手になることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry or Didit network member has this id."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "VASPにデューデリジェンスのアンケートを送信",
        "description": "Didit標準のデューデリジェンス・アンケートを、取引相手の登録済みコンプライアンス用アドレスに、1回限り使用可能な回答リンク付きでメール送信します。取引相手がすべての質問に回答できる期限は30日で、回答は365日間有効です。新たに送信すると、同じ取引相手に以前送った未回答のアンケートが置き換えられ、そのリンクは使用できなくなります。送信は1アドレスにつき1分あたり1通までです。",
        "operationId": "sendTravelRuleVaspQuestionnaire",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "send_vasp_questionnaire",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vasp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/の行のIDで、ディレクトリのエントリまたはDiditネットワークのメンバーです。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleCounterpartyQuestionnaireRequest"
              },
              "example": {
                "sent_to": "travelrule@counterparty.example"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/questionnaires/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"sent_to\": \"travelrule@counterparty.example\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.send_vasp_questionnaire(\n    \"11111111-2222-3333-4444-555555555555\",\n    sent_to=\"travelrule@counterparty.example\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.sendVaspQuestionnaire(\"11111111-2222-3333-4444-555555555555\", {\n  sent_to: \"travelrule@counterparty.example\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.SendVASPQuestionnaire(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleCounterpartyQuestionnaireRequest{\n\tSentTo: didit.String(\"travelrule@counterparty.example\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleCounterpartyQuestionnaireRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().sendVaspQuestionnaire(\"11111111-2222-3333-4444-555555555555\", TravelRuleCounterpartyQuestionnaireRequest.builder()\n        .sentTo(\"travelrule@counterparty.example\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->sendVaspQuestionnaire('11111111-2222-3333-4444-555555555555', [\n    'sent_to' => 'travelrule@counterparty.example',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.send_vasp_questionnaire(\n  \"11111111-2222-3333-4444-555555555555\",\n  sent_to: \"travelrule@counterparty.example\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.SendVaspQuestionnaireAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleCounterpartyQuestionnaireRequest\n{\n    SentTo = \"travelrule@counterparty.example\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "202": {
            "description": "アンケートがメールで送信されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyQuestionnaire"
                },
                "example": {
                  "id": "3f9e8d7c-6b5a-4c3d-9e2f-1a0b9c8d7e6f",
                  "status": "SENT",
                  "form_version": "1",
                  "sent_to": "travelrule@counterparty.example",
                  "sent_at": "2026-10-14T10:00:00Z",
                  "expires_at": "2026-11-13T10:00:00Z",
                  "answered_at": null,
                  "valid_until": null,
                  "current": false,
                  "answers": {}
                }
              }
            }
          },
          "400": {
            "description": "sent_toが有効なメールアドレスではないか、取引相手について登録されているコンプライアンス用アドレスではありません。または、取引相手にコンプライアンス用アドレスが登録されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not on record": {
                    "value": {
                      "sent_to": [
                        "Send the questionnaire to a compliance address on record for this counterparty."
                      ]
                    }
                  },
                  "No address": {
                    "value": {
                      "sent_to": [
                        "No compliance address is on record for this counterparty. Add a contact for it first."
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このidのディレクトリエントリまたは掲載されているDiditネットワークメンバーはありません。自社のVASPプロファイルが自社の取引相手になることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No directory entry or Didit network member has this id."
                }
              }
            }
          },
          "429": {
            "description": "1分以内にこのアドレスへアンケートが送信されています。"
          },
          "503": {
            "description": "メールを送信できなかったため、アンケートは作成されませんでした。しばらくしてから再度お試しください。"
          }
        }
      }
    },
    "/v3/transactions/{transaction_id}/travel-rule/": {
      "patch": {
        "summary": "トラベルルール送金の完了、キャンセル、再送、または送金人ウォレットの更新",
        "description": "`payment_txn_id`を指定すると、オンチェーンハッシュを報告し、送信側のCOMPLETEDの送金をFINISHEDに移行します(INTERNALレール側の対応する送金もFINISHEDに移行します)。`{\"action\": \"cancel\"}`を指定すると、終了状態でない送金をキャンセルします。`{\"action\": \"resend\"}`を指定すると、COUNTERPARTY_VASP_NOT_FOUND、COUNTERPARTY_VASP_NOT_REACHABLE、またはNOT_ENOUGH_COUNTERPARTY_DATAで止まっている送信側の送金を再度ルーティングします(先に取引相手のデータを改善してください。例:送金先ウォレットのエントリにtravel_addressを追加する)。resendは送信側の送金にのみ適用されます。`{\"action\": \"update_compliance_email\", \"compliance_email\": \"desk@example.com\"}`は、これら3つのステータスのいずれかにある送信側の送金のコンプライアンス用メールアドレスを置き換えます。これは`reason: email_undeliverable`への対処方法です。ステータスは変わらず、次の`resend`でリクエストがそのアドレスに送信されます。再送はキューに追加され、リクエスト内では実行されません。レスポンスでは、送金がAWAITING_COUNTERPARTYに戻り、`resend queued`のタイムラインエントリとキューに追加された`delivery`が表示されます。送信先がどこになったかは`travel_rule.status.updated`のWebhookで通知されます。送金がGTR、VerifyVASP、またはSygna Bridgeを経由した場合、ネットワークはレスポンスの後に、再試行を伴ってオンチェーンハッシュまたはキャンセルを受け取ります。`delivery`はそのメッセージの状況を示します。`{\"action\": \"update_originator_wallet\", \"wallet_address\": \"...\"}`は、送信側の送金について、資金が実際に送出されたウォレットを記録します。たとえば、申告したメインウォレットではなく、UTXOの出金がブロードキャストされたアドレスです。変更されるのは記録のみです。取引相手には何も再送されず、ステータスも変わりません。送金人は`source: updated`を伴う`chain_details.originator`となり、変更内容は以前のウォレットと新しいウォレットとともに`timeline`に追加されます。送金のINTERNALレール側の対応する送金も同様に更新されます。`{\"action\": \"beneficiary_vasp\", \"beneficiary_vasp\": \"<directory VASP id>\"}`は、COUNTERPARTY_VASP_NOT_FOUND、COUNTERPARTY_VASP_NOT_REACHABLE、またはNOT_ENOUGH_COUNTERPARTY_DATAにある送信側の送金について、ディスカバリーで特定できなかった取引相手をご自身で指定します。送金はそのVASPにルーティングされ、再送されます。",
        "operationId": "patchTravelRuleTransfer",
        "x-didit-sdk": {
          "resource": "transactions.travel_rule",
          "method": "update_transfer",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "この送金を所有する取引の、Diditの安定したUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleTransferPatchRequest"
              },
              "examples": {
                "Finish": {
                  "value": {
                    "payment_txn_id": "0xchainhash"
                  }
                },
                "Cancel": {
                  "value": {
                    "action": "cancel"
                  }
                },
                "Resend": {
                  "value": {
                    "action": "resend"
                  }
                },
                "Update compliance email": {
                  "value": {
                    "action": "update_compliance_email",
                    "compliance_email": "desk@example.com"
                  }
                },
                "Update originator wallet": {
                  "value": {
                    "action": "update_originator_wallet",
                    "wallet_address": "bc1qOriginatorInputAddress01"
                  }
                },
                "Name the counterparty": {
                  "value": {
                    "action": "beneficiary_vasp",
                    "beneficiary_vasp": "9f1c2b34-5d6e-4f70-8a91-b2c3d4e5f607"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"payment_txn_id\": \"0xchainhash\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.travel_rule.update_transfer(\n    \"11111111-2222-3333-4444-555555555555\",\n    payment_txn_id=\"0xchainhash\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.travelRule.updateTransfer(\"11111111-2222-3333-4444-555555555555\", {\n  payment_txn_id: \"0xchainhash\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.UpdateTransfer(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleTransferPatchRequest{\n\tPaymentTxnID: didit.String(\"0xchainhash\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleTransferPatchRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().travelRule().updateTransfer(\"11111111-2222-3333-4444-555555555555\", TravelRuleTransferPatchRequest.builder()\n        .paymentTxnId(\"0xchainhash\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->travelRule->updateTransfer('11111111-2222-3333-4444-555555555555', [\n    'payment_txn_id' => '0xchainhash',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.travel_rule.update_transfer(\n  \"11111111-2222-3333-4444-555555555555\",\n  payment_txn_id: \"0xchainhash\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.TravelRule.UpdateTransferAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleTransferPatchRequest\n{\n    PaymentTxnId = \"0xchainhash\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新された送金。`update_compliance_email`の後もステータスは変わらず、次の`resend`まで`reason: email_undeliverable`が保持されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleTransferDetail"
                }
              }
            }
          },
          "400": {
            "description": "payment_txn_idとサポートされているアクションのどちらも指定されていない、`update_compliance_email`で`compliance_email`がないかメールアドレスではない、または`update_originator_wallet`で、wallet_addressがない、送金のチェーンで扱えないウォレットまたはメモが指定された、送金のUTXO入力に含まれないウォレットが指定された、あるいは`beneficiary_vasp`がないか有効なディレクトリのVASP IDではない場合です。",
            "content": {
              "application/json": {
                "examples": {
                  "No action": {
                    "value": {
                      "detail": [
                        "Provide payment_txn_id, action=cancel, action=resend, action=beneficiary_vasp, action=update_originator_wallet or action=update_compliance_email."
                      ]
                    }
                  },
                  "Invalid compliance email": {
                    "value": {
                      "compliance_email": [
                        "Enter a valid email address."
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明な取引、取引にトラベルルールの送金がない、または（アクション`beneficiary_vasp`の場合）そのIDのディレクトリエントリがありません。"
          },
          "409": {
            "description": "送金がこの操作を許可する状態にありません（例: finishではCOMPLETEDまたはアウトバウンドでない、cancelではすでに終了状態にある、resendでは再送可能なステータスのアウトバウンド送金でない）。`update_compliance_email`は、インバウンド送金、およびCOUNTERPARTY_VASP_NOT_FOUND、COUNTERPARTY_VASP_NOT_REACHABLE、NOT_ENOUGH_COUNTERPARTY_DATA以外の状態にあるアウトバウンド送金に対して`409`を返します。`update_originator_wallet`は、インバウンド、キャンセル済み、または期限切れの送金に対して`409`を返します。`beneficiary_vasp`は、送金がアウトバウンドで、かつCOUNTERPARTY_VASP_NOT_FOUND、COUNTERPARTY_VASP_NOT_REACHABLE、NOT_ENOUGH_COUNTERPARTY_DATAのいずれかの状態にある場合を除き、`409`を返します。",
            "content": {
              "application/json": {
                "examples": {
                  "Cancel from a terminal status": {
                    "value": {
                      "detail": "Transfer is already in a terminal state."
                    }
                  },
                  "Resend not allowed": {
                    "value": {
                      "detail": "Transfer cannot be resent from its current state."
                    }
                  },
                  "Finish not allowed": {
                    "value": {
                      "detail": "Transfer must be an outbound transfer in COMPLETED status to finish."
                    }
                  },
                  "Compliance email cannot change": {
                    "value": {
                      "detail": "The compliance email of this transfer cannot change from its current state."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/transactions/{transaction_id}/travel-rule/ownership/": {
      "post": {
        "summary": "ウォレットの所有権を承認または否認する",
        "description": "ウォレットの所有権確認を待っている送金を解決します。送金の自社側がUNCONFIRMED_OWNERSHIPの場合、またはON_HOLDの受信送金の場合に呼び出します。確認すると、一致するウォレットアドレス帳のエントリが所有権確認済みとしてマークされ（エントリのないON_HOLDの受信送金の場合、Diditはbeneficiary_data.wallet_addressからエントリを作成します）、送金の両側で受取人の名義照合が実行されます。拒否すると両側が却下されます。入金がすでに決済済みの受信送金は、照合に成功するとFINISHEDに移行します。取引相手のウォレットがセルフホスト型と申告されている場合（counterparty.payment_method.method_type: unhosted_wallet）、確認すると、顧客がそのウォレットの管理者を確認したことが記録され、送金は双方向で完了（COMPLETED）します。オンチェーンハッシュがすでに判明している受信入金の場合はFINISHEDになります。確認対象のウォレットは取引相手のものです。つまり、送信出金の送金先、または受信入金の送金元（送金人のウォレット）です。そのウォレットがまだウォレットアドレス帳にない場合、Diditは取引相手の名義で所有権確認済みとして追加します。アドレス帳に別の保有者名ですでに登録されている場合、送金はCOUNTERPARTY_MISMATCHED_DATAに移行します。UNCONFIRMED_OWNERSHIP、ON_HOLD、またはCOUNTERPARTY_MISMATCHED_DATAの状態にある受信TRP送金の場合、Diditは代わりにあなたの判定を送金元のVASPに送信します。承認すると支払先アドレス（wallet_address、または一致したエントリのアドレス）が返されて送金はCOMPLETEDに移行し、拒否すると送金は却下されます。同じ呼び出しで、GTRまたはSygna Bridgeの取引相手から送られ、レビュー待ちになっている受信送金（`UNCONFIRMED_OWNERSHIP`、`ON_HOLD`、または`COUNTERPARTY_MISMATCHED_DATA`）も判定できます。`confirmed: true`で承認し（送金にウォレットアドレスの指定がない場合は`wallet_address`を渡します）、`confirmed: false`で却下します。ネットワークへの回答はレスポンスの後に行われ、再試行されます。VerifyVASPは問い合わせ時に回答を受け取るため、レビューが必要となるVerifyVASP送金は即座に却下され、後から判定することはできません。",
        "operationId": "confirmTravelRuleOwnership",
        "x-didit-sdk": {
          "resource": "transactions.travel_rule",
          "method": "confirm_ownership",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "この送金に対してアプリケーションが保持する取引の、Diditの安定したUUIDです。INTERNALレールの送金では受取人側の取引、取引相手のウォレットがセルフホスト型と申告された場合は作成した取引（アウトバウンドまたはインバウンド）となります。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleOwnershipConfirmRequest"
              },
              "example": {
                "confirmed": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/ownership/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"confirmed\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.travel_rule.confirm_ownership(\n    \"11111111-2222-3333-4444-555555555555\",\n    confirmed=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.travelRule.confirmOwnership(\"11111111-2222-3333-4444-555555555555\", {\n  confirmed: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.ConfirmOwnership(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleOwnershipConfirmRequest{\n\tConfirmed: true,\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleOwnershipConfirmRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().travelRule().confirmOwnership(\"11111111-2222-3333-4444-555555555555\", TravelRuleOwnershipConfirmRequest.builder()\n        .confirmed(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->travelRule->confirmOwnership('11111111-2222-3333-4444-555555555555', [\n    'confirmed' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.travel_rule.confirm_ownership(\n  \"11111111-2222-3333-4444-555555555555\",\n  confirmed: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.TravelRule.ConfirmOwnershipAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleOwnershipConfirmRequest\n{\n    Confirmed = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新された送金。受信送金の場合、所有権が確認されるまで取引相手のoriginator_data/beneficiary_dataはマスクされたまま（`data_masked: true`）となり、確認後は`data_unmasked`にその日時、理由、実施者が記録されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleTransferDetail"
                }
              }
            }
          },
          "409": {
            "description": "送金が所有確認待ちではない、取引相手のウォレットに一致するウォレットアドレス帳のエントリがない、他のDidit顧客からのINTERNAL送金で確認前に管理証明（署名済みメッセージまたはテスト入金）が必要である、またはネットワーク送金がそのネットワーク上ですでに応答済みである（VerifyVASP送金、またはお客様もしくはDiditがすでに判定したGTRまたはSygna Bridge送金）のいずれかです。",
            "content": {
              "application/json": {
                "examples": {
                  "Not awaiting confirmation": {
                    "value": {
                      "detail": "Transfer is not awaiting ownership confirmation."
                    }
                  },
                  "No matching address book entry": {
                    "value": {
                      "detail": "wallet address entry no longer available"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: confirmedがない、受信TRPの承認にwallet_addressがなく代替となる住所もない、または取引相手のウォレットが指定されていない申告済みのセルフホスト型ウォレット送金に対して`wallet_address`を送信せずに`confirmed: true`を指定しました。",
            "content": {
              "application/json": {
                "examples": {
                  "No payment address": {
                    "value": {
                      "wallet_address": [
                        "wallet_address is required to approve."
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明な取引、または取引にトラベルルールの送金がありません。"
          },
          "502": {
            "description": "受信TRP送金のみ: Diditが判定を送金元VASPに配信できなかったため、送金のステータスは変わりません。",
            "content": {
              "application/json": {
                "examples": {
                  "Callback not delivered": {
                    "value": {
                      "detail": "Counterparty inquiry-resolution callback could not be delivered."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/transactions/{transaction_id}/travel-rule/messages/": {
      "get": {
        "summary": "トラベルルールメッセージの一覧取得",
        "description": "この送金について取引相手のVASPとやり取りしたメッセージと書類リクエストです。",
        "operationId": "listTravelRuleMessages",
        "x-didit-sdk": {
          "resource": "transactions.travel_rule",
          "method": "list_messages",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "この送金を所有する取引の、Diditの安定したUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.travel_rule.list_messages(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.travelRule.listMessages(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.ListMessages(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().travelRule().listMessages(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->travelRule->listMessages('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.travel_rule.list_messages(\"11111111-2222-3333-4444-555555555555\").each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.TravelRule.ListMessagesAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "メッセージです。古い順に並びます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TravelRuleMessage"
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明な取引またはトークン、もしくは取引にトラベルルールの送金がありません。"
          }
        }
      },
      "post": {
        "summary": "トラベルルールのメッセージまたは書類リクエストを送信",
        "description": "取引相手のVASPにメッセージまたは書類リクエストを送信します。INTERNAL転送（もう一方のDidit顧客がペアの自社側で確認します）とEMAIL転送（取引相手にメールが送られ、受け取りポータルで回答します）で機能します。TRP、GTR、TRUST、VerifyVASPまたはSygna経由の転送にはメッセージはありません。これらのプロトコルにはメッセージ機能がないためです。上限：転送1件あたりメッセージ100件、本文1件あたり5000文字、リクエストできる書類10件、ファイル5件（各10MB）。",
        "operationId": "createTravelRuleMessage",
        "x-didit-sdk": {
          "resource": "transactions.travel_rule",
          "method": "create_message",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "この送金を所有する取引の、Diditの安定したUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleMessageCreateRequest"
              },
              "example": {
                "kind": "DOCUMENT_REQUEST",
                "body": "Please confirm the date of birth of the beneficiary.",
                "requested_documents": [
                  "Proof of address"
                ]
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleMessageCreateRequest"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"kind\": \"DOCUMENT_REQUEST\", \"body\": \"Please confirm the date of birth of the beneficiary.\", \"requested_documents\": [\"Proof of address\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.travel_rule.create_message(\n    \"11111111-2222-3333-4444-555555555555\",\n    kind=\"DOCUMENT_REQUEST\",\n    body=\"Please confirm the date of birth of the beneficiary.\",\n    requested_documents=[\"Proof of address\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.travelRule.createMessage(\"11111111-2222-3333-4444-555555555555\", {\n  kind: \"DOCUMENT_REQUEST\",\n  body: \"Please confirm the date of birth of the beneficiary.\",\n  requested_documents: [\"Proof of address\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.CreateMessage(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleMessageCreateRequest{\n\tKind:               didit.Some(didit.TravelRuleMessageCreateRequestKind(\"DOCUMENT_REQUEST\")),\n\tBody:               didit.String(\"Please confirm the date of birth of the beneficiary.\"),\n\tRequestedDocuments: didit.Some([]string{\"Proof of address\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.TravelRuleMessageCreateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().travelRule().createMessage(\"11111111-2222-3333-4444-555555555555\", TravelRuleMessageCreateRequest.builder()\n        .kind(TravelRuleMessageCreateRequest.Kind.of(\"DOCUMENT_REQUEST\"))\n        .body(\"Please confirm the date of birth of the beneficiary.\")\n        .requestedDocuments(List.of(\"Proof of address\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->travelRule->createMessage('11111111-2222-3333-4444-555555555555', [\n    'kind' => 'DOCUMENT_REQUEST',\n    'body' => 'Please confirm the date of birth of the beneficiary.',\n    'requested_documents' => ['Proof of address'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.travel_rule.create_message(\n  \"11111111-2222-3333-4444-555555555555\",\n  kind: \"DOCUMENT_REQUEST\",\n  body: \"Please confirm the date of birth of the beneficiary.\",\n  requested_documents: [\"Proof of address\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.TravelRule.CreateMessageAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleMessageCreateRequest\n{\n    Kind = new TravelRuleMessageCreateRequestKind(\"DOCUMENT_REQUEST\"),\n    Body = \"Please confirm the date of birth of the beneficiary.\",\n    RequestedDocuments = new string[] { \"Proof of address\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "保存されたメッセージ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleMessage"
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効である、受け付けられないファイル形式またはサイズである、転送のメッセージが100件を超えている、または`reply_to`がこの転送のメッセージではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "requested_documents": [
                    "Name at least one document the counterparty should send."
                  ]
                }
              }
            }
          },
          "404": {
            "description": "不明な取引またはトークン、もしくは取引にトラベルルールの送金がありません。"
          },
          "409": {
            "description": "取引相手にメッセージを届けることができません。`detail`に理由が示されます。送金がネットワークレール（TRP、GTR、TRUST、VerifyVASP、Sygna）上で行われている、まだ取引相手がいない、INTERNAL送金のデータがウォレット保有者と一致しなかったため受取人に何も届かなかった、またはEMAIL送金の受け取りリンクの有効期限が切れているか送金が終了している、のいずれかです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/pickup/{token}/": {
      "get": {
        "summary": "メールレールの受け取り情報を取得",
        "description": "公開、認証不要。Didit以外の取引相手VASPが、メールで送信された受け取りリンクから保留中のやり取りをプレビューできます。トークン自体が認証となります。",
        "operationId": "getTravelRulePickup",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "retrieve_pickup",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contact",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "リンクの`?contact=`の値で、リンクの送信先の連絡先です。`contact`としてそのまま返され、検証はされません。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl https://verification.didit.me/v3/travel-rule/pickup/{token}/"
          }
        ],
        "responses": {
          "200": {
            "description": "受け取りのプレビュー。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRulePickupInfo"
                },
                "example": {
                  "reference": "33333333-4444-5555-6666-777777777777",
                  "requested_at": "2026-07-05T10:00:00Z",
                  "originator_vasp_name": "Origin CASP SL",
                  "originator_vasp_lei": "529900EXAMPLEORIG001",
                  "recipient_vasp_name": "Example Counterparty VASP",
                  "language": "es",
                  "amount": "0.250000000000000000",
                  "currency": "ETH",
                  "fiat_amount": "",
                  "fiat_currency": "",
                  "chain": "ETH",
                  "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
                  "status": "AWAITING_COUNTERPARTY",
                  "ivms_version": "ivms101.2023",
                  "deadline_at": "2026-07-07T10:00:00Z",
                  "reminders_sent": 0,
                  "contact": "",
                  "decline_reasons": [
                    "data_mismatch",
                    "not_our_customer",
                    "wallet_not_hosted",
                    "sanctions",
                    "risk_appetite",
                    "jurisdiction",
                    "insufficient_data",
                    "other"
                  ],
                  "join_invitation": {
                    "eligible": false,
                    "url": ""
                  },
                  "originator_data": {
                    "name": "Jane Doe",
                    "wallet_address": "0x77ccff0cc624a53cd8b8d8703ced826710211ec7"
                  },
                  "beneficiary_data": {
                    "name": "Ana Diaz",
                    "wallet_address": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb"
                  },
                  "ivms_request": {
                    "originator": {
                      "originatorPersons": [
                        {
                          "naturalPerson": {
                            "name": {
                              "nameIdentifier": [
                                {
                                  "primaryIdentifier": "Doe",
                                  "secondaryIdentifier": "Jane",
                                  "nameIdentifierType": "LEGL"
                                }
                              ]
                            }
                          }
                        }
                      ],
                      "accountNumber": [
                        "0x77ccff0cc624a53cd8b8d8703ced826710211ec7"
                      ]
                    },
                    "beneficiary": {
                      "beneficiaryPersons": [
                        {
                          "naturalPerson": {
                            "name": {
                              "nameIdentifier": [
                                {
                                  "primaryIdentifier": "Diaz",
                                  "secondaryIdentifier": "Ana",
                                  "nameIdentifierType": "LEGL"
                                }
                              ]
                            }
                          }
                        }
                      ],
                      "accountNumber": [
                        "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb"
                      ]
                    }
                  },
                  "data_masked": false
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "410": {
            "description": "受付期間が終了しています。取引相手がすでに回答したか、取引がAWAITING_COUNTERPARTYから移行したか、期限が過ぎました。"
          }
        }
      }
    },
    "/v3/travel-rule/pickup/{token}/respond/": {
      "post": {
        "summary": "メールレール経由の受け取りに応答する",
        "description": "公開されており、認証は不要です。メールで送信された受け取りリンクから、交換を承諾または却下します。承諾時には、beneficiary_nameが送金人のname_matching_strictnessポリシーに照らして確認されます。",
        "operationId": "respondTravelRulePickup",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "respond_pickup",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contact",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "リンクの`?contact=`の値です。本文で`contact`が送信されない場合に使用されます。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRulePickupRespondRequest"
              },
              "example": {
                "decision": "accept",
                "beneficiary_name": "Carlos Ruiz"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/pickup/{token}/respond/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"decision\": \"accept\", \"beneficiary_name\": \"Carlos Ruiz\"}'"
          }
        ],
        "responses": {
          "200": {
            "description": "結果として得られる交換ステータスです。承認後はCOMPLETEDまたはCOUNTERPARTY_MISMATCHED_DATA、拒否後はCOUNTERPARTY_VASP_GENERAL_DECLINEとなり、拒否時は`decline_reason`も返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string"
                    },
                    "decline_reason": {
                      "type": "string",
                      "description": "却下後に含まれます。"
                    }
                  }
                },
                "examples": {
                  "accepted": {
                    "value": {
                      "status": "COMPLETED"
                    }
                  },
                  "declined": {
                    "value": {
                      "status": "COUNTERPARTY_VASP_GENERAL_DECLINE",
                      "decline_reason": "not_our_customer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "フィールドが無効です。例: `decision`がない、または`accept`でも`decline`でもない、`decline_reason: other`での却下時に`decline_detail`がない、`ivms_response`がIVMS 101オブジェクトでない、または16384文字を超えている、本文の`contact`がUUIDでない(`{\"contact\": [\"Must be a valid UUID.\"]}`)など。",
            "content": {
              "application/json": {
                "example": {
                  "decline_detail": [
                    "Say what the reason is when you choose another reason."
                  ]
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "410": {
            "description": "受付期間が終了しています。取引相手がすでに回答したか、取引がAWAITING_COUNTERPARTYから移行したか、期限が過ぎました。"
          }
        }
      }
    },
    "/v3/travel-rule/pickup/{token}/messages/": {
      "get": {
        "summary": "ピックアップメッセージを一覧表示",
        "description": "公開、認証不要。取引相手VASPから見たEMAILレールの送金のメッセージです。顧客が送信したものは`INBOUND`となり、顧客のVASP名で署名されます。トークンが認証となります。",
        "operationId": "listTravelRulePickupMessages",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "list_pickup_messages",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl https://verification.didit.me/v3/travel-rule/pickup/{token}/messages/"
          }
        ],
        "responses": {
          "200": {
            "description": "取引相手側からのメッセージです。古い順に並びます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TravelRuleMessage"
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "410": {
            "description": "受け取りリンクが期限切れになっているか、送金がクローズされています。"
          }
        }
      },
      "post": {
        "summary": "受け取りポータルで返信",
        "description": "公開、認証不要。EMAILレールの送金に対して、取引相手VASPが返信します。本文は取引のメッセージと同じです。添付ファイルはPDF、PNG、JPEG、WebPのいずれかである必要があります。トークンが認証となります。",
        "operationId": "createTravelRulePickupMessage",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "create_pickup_message",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleMessageCreateRequest"
              },
              "example": {
                "kind": "MESSAGE",
                "body": "Attached is the proof of address of the wallet holder."
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleMessageCreateRequest"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/pickup/{token}/messages/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"kind\": \"MESSAGE\", \"body\": \"Attached is the proof of address of the wallet holder.\"}'"
          }
        ],
        "responses": {
          "201": {
            "description": "保存されたメッセージ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleMessage"
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効である、受け付けられないファイル形式またはサイズである、転送のメッセージが100件を超えている、または`reply_to`がこの転送のメッセージではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "requested_documents": [
                    "Name at least one document the counterparty should send."
                  ]
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "410": {
            "description": "受け取りリンクが期限切れになっているか、送金がクローズされています。"
          }
        }
      }
    },
    "/v3/travel-rule/inbound/": {
      "post": {
        "summary": "入金後（サンライズ）の受信送金を登録する",
        "description": "交換が行われる前にすでにオンチェーンで決済された暗号資産の入金について、トラベルルールのデータを登録します。受信のtravelRule取引を作成し（または未請求の入金を再利用し）、ウォレットのアドレス帳と照合して送金を解決します。新規作成された取引の場合、Diditはまずtransaction.createdを送信し、その後にtravel_rule.status.updatedのWebhookを送信します。",
        "operationId": "registerTravelRuleInbound",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "register_inbound",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleInboundRequest"
              },
              "example": {
                "chain": "ETH",
                "txid": "0xdeposit-hash",
                "wallet_address": "0xYourDepositWallet",
                "amount": "500.00",
                "currency": "USDC",
                "originator_data": {
                  "name": "Origin CASP SL"
                },
                "beneficiary_data": {
                  "name": "Ana Diaz"
                },
                "originating_vasp": {
                  "name": "Origin CASP SL",
                  "lei": "",
                  "travel_address": "ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/inbound/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"chain\":\"ETH\",\"txid\":\"0xdeposit-hash\",\"wallet_address\":\"0xYourDepositWallet\",\"amount\":\"500.00\",\"currency\":\"USDC\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.register_inbound(\n    chain=\"ETH\",\n    txid=\"0xdeposit-hash\",\n    wallet_address=\"0xYourDepositWallet\",\n    amount=\"500.00\",\n    currency=\"USDC\",\n    originator_data={\"name\": \"Origin CASP SL\"},\n    beneficiary_data={\"name\": \"Ana Diaz\"},\n    originating_vasp={\n        \"name\": \"Origin CASP SL\",\n        \"lei\": \"\",\n        \"travel_address\": \"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\",\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.registerInbound({\n  chain: \"ETH\",\n  txid: \"0xdeposit-hash\",\n  wallet_address: \"0xYourDepositWallet\",\n  amount: \"500.00\",\n  currency: \"USDC\",\n  originator_data: { name: \"Origin CASP SL\" },\n  beneficiary_data: { name: \"Ana Diaz\" },\n  originating_vasp: {\n    name: \"Origin CASP SL\",\n    lei: \"\",\n    travel_address: \"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\",\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RegisterInbound(ctx, didit.TravelRuleInboundRequest{\n\tChain:           \"ETH\",\n\tTxid:            \"0xdeposit-hash\",\n\tWalletAddress:   \"0xYourDepositWallet\",\n\tAmount:          \"500.00\",\n\tCurrency:        \"USDC\",\n\tOriginatorData:  didit.Some(map[string]any{\"name\": \"Origin CASP SL\"}),\n\tBeneficiaryData: didit.Some(map[string]any{\"name\": \"Ana Diaz\"}),\n\tOriginatingVASP: didit.Some(didit.TravelRuleInboundRequestOriginatingVASP{\n\t\tName:          didit.String(\"Origin CASP SL\"),\n\t\tLei:           didit.String(\"\"),\n\t\tTravelAddress: didit.String(\"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\"),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.TravelRuleInboundRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().registerInbound(TravelRuleInboundRequest.builder()\n        .chain(\"ETH\")\n        .txid(\"0xdeposit-hash\")\n        .walletAddress(\"0xYourDepositWallet\")\n        .amount(\"500.00\")\n        .currency(\"USDC\")\n        .originatorData(Map.of(\"name\", \"Origin CASP SL\"))\n        .beneficiaryData(Map.of(\"name\", \"Ana Diaz\"))\n        .originatingVasp(TravelRuleInboundRequest.OriginatingVasp.builder()\n                .name(\"Origin CASP SL\")\n                .lei(\"\")\n                .travelAddress(\"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\")\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->registerInbound([\n    'chain' => 'ETH',\n    'txid' => '0xdeposit-hash',\n    'wallet_address' => '0xYourDepositWallet',\n    'amount' => '500.00',\n    'currency' => 'USDC',\n    'originator_data' => ['name' => 'Origin CASP SL'],\n    'beneficiary_data' => ['name' => 'Ana Diaz'],\n    'originating_vasp' => [\n        'name' => 'Origin CASP SL',\n        'lei' => '',\n        'travel_address' => 'ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC',\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.register_inbound(\n  chain: \"ETH\",\n  txid: \"0xdeposit-hash\",\n  wallet_address: \"0xYourDepositWallet\",\n  amount: \"500.00\",\n  currency: \"USDC\",\n  originator_data: { name: \"Origin CASP SL\" },\n  beneficiary_data: { name: \"Ana Diaz\" },\n  originating_vasp: {\n    name: \"Origin CASP SL\",\n    lei: \"\",\n    travel_address: \"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\",\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.RegisterInboundAsync(new TravelRuleInboundRequest\n{\n    Chain = \"ETH\",\n    Txid = \"0xdeposit-hash\",\n    WalletAddress = \"0xYourDepositWallet\",\n    Amount = \"500.00\",\n    Currency = \"USDC\",\n    OriginatorData = new Dictionary<string, object> { [\"name\"] = \"Origin CASP SL\" },\n    BeneficiaryData = new Dictionary<string, object> { [\"name\"] = \"Ana Diaz\" },\n    OriginatingVasp = new TravelRuleInboundRequestOriginatingVasp\n    {\n        Name = \"Origin CASP SL\",\n        Lei = \"\",\n        TravelAddress = \"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このtxidとwallet_addressの送金はすでに登録されています。既存の送金が変更されずに返されます(createdはfalse)。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleInboundResponse"
                }
              }
            }
          },
          "201": {
            "description": "新しいトラベルルール送金が、新しい受信取引または既存の未請求の入金に対して登録されました（createdはtrue）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleInboundResponse"
                }
              }
            }
          },
          "400": {
            "description": "必須フィールド（`chain`、`txid`、`wallet_address`、`amount`、`currency`）が欠落している、`originating_vasp.lei`が有効なLEIではない、`originating_vasp.travel_address`が有効なトラベルアドレスではない、チェーンが扱えないメモ、Xアドレスまたは`utxo`、あるいはオブジェクトではない`originator_data` / `beneficiary_data`。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing field": {
                    "value": {
                      "txid": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid LEI": {
                    "value": {
                      "originating_vasp": {
                        "lei": [
                          "Invalid LEI: expected 20 alphanumeric characters (ISO 17442)."
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/test-vasp/inbound/": {
      "post": {
        "summary": "Didit Test VASPからのインバウンド送金をトリガーする（サンドボックス）",
        "description": "サンドボックスアプリケーション専用です。Didit Test VASPがアプリケーションにインバウンドのトラベルルール送金を送信するため、本番稼働前に取引所の受信側をエンドツーエンドで試せます。この送金は、ネットワークからの実際のインバウンド送金がウォレットアドレス帳に対して実行されるのと同じロジックで記帳・判定されるため、受信箱、判定、ウォレット所有確認フローは本番と同じように動作します。Diditの外部には何も送信されません。本番アプリケーションは400を受け取ります。同じ`reference`を再度送信すると、2件目の送金ではなく、最初の呼び出しで記帳された送金が返されます。",
        "operationId": "triggerTravelRuleTestVaspInbound",
        "x-didit-sdk": {
          "resource": "transactions.travel_rule",
          "method": "trigger_test_vasp_inbound",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleTestVaspInboundRequest"
              },
              "example": {
                "beneficiary_wallet_address": "0xYourSandboxWallet",
                "scenario": "accept",
                "amount": "1",
                "reference": "demo-001"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/test-vasp/inbound/ \\\n  -H 'x-api-key: YOUR_SANDBOX_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"beneficiary_wallet_address\":\"0xYourSandboxWallet\",\"scenario\":\"accept\",\"reference\":\"demo-001\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.travel_rule.trigger_test_vasp_inbound(\n    beneficiary_wallet_address=\"0xYourSandboxWallet\",\n    scenario=\"accept\",\n    amount=\"1\",\n    reference=\"demo-001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.travelRule.triggerTestVaspInbound({\n  beneficiary_wallet_address: \"0xYourSandboxWallet\",\n  scenario: \"accept\",\n  amount: \"1\",\n  reference: \"demo-001\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.TriggerTestVASPInbound(ctx, didit.TravelRuleTestVASPInboundRequest{\n\tBeneficiaryWalletAddress: \"0xYourSandboxWallet\",\n\tScenario:                 didit.Some(didit.TravelRuleTestVASPInboundRequestScenario(\"accept\")),\n\tAmount:                   didit.String(\"1\"),\n\tReference:                didit.String(\"demo-001\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleTestVaspInboundRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().travelRule().triggerTestVaspInbound(TravelRuleTestVaspInboundRequest.builder()\n        .beneficiaryWalletAddress(\"0xYourSandboxWallet\")\n        .scenario(TravelRuleTestVaspInboundRequest.Scenario.of(\"accept\"))\n        .amount(\"1\")\n        .reference(\"demo-001\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->travelRule->triggerTestVaspInbound([\n    'beneficiary_wallet_address' => '0xYourSandboxWallet',\n    'scenario' => 'accept',\n    'amount' => '1',\n    'reference' => 'demo-001',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.travel_rule.trigger_test_vasp_inbound(\n  beneficiary_wallet_address: \"0xYourSandboxWallet\",\n  scenario: \"accept\",\n  amount: \"1\",\n  reference: \"demo-001\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.TravelRule.TriggerTestVaspInboundAsync(new TravelRuleTestVaspInboundRequest\n{\n    BeneficiaryWalletAddress = \"0xYourSandboxWallet\",\n    Scenario = new TravelRuleTestVaspInboundRequestScenario(\"accept\"),\n    Amount = \"1\",\n    Reference = \"demo-001\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "受信送金が記帳され、判定されました。同じ`reference`で繰り返すと、同じボディが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleTestVaspInboundResponse"
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効である、`scenario`が不明またはサポートされていない、またはアプリケーションが本番環境のアプリケーションです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "送金を登録できませんでした。たとえば、アプリケーションでトラベルルールが有効になっていない場合です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/widget-session/": {
      "post": {
        "summary": "ウォレット所有権ウィジェットセッションの発行",
        "description": "ホスト型ウォレット所有確認ウィジェットのURL／トークンを発行します。返されたurlに顧客を誘導し、ウォレットの管理権限を証明してもらいます（メッセージ署名、サトシテスト、スクリーンショット、または自己申告）。このリリースではウィジェットはWeb専用です。urlはシステムブラウザーまたはカスタムタブで開き、モバイルSDKのWebView内では絶対に開かないでください。",
        "operationId": "createTravelRuleWidgetSession",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "create_widget_session",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleWidgetSessionCreate"
              },
              "example": {
                "wallet_address": "0xd3b62acb76fb27a7f8961ec40fa11746b113aca9",
                "chain": "ETH",
                "holder_name": "Jane Doe",
                "vendor_data": "user-042",
                "transaction_id": "99999999-aaaa-bbbb-cccc-dddddddddddd",
                "expires_in_minutes": 60
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/widget-session/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"wallet_address\":\"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\",\"chain\":\"ETH\",\"holder_name\":\"Jane Doe\",\"transaction_id\":\"99999999-aaaa-bbbb-cccc-dddddddddddd\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.create_widget_session(\n    wallet_address=\"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\",\n    chain=\"ETH\",\n    holder_name=\"Jane Doe\",\n    vendor_data=\"user-042\",\n    transaction_id=\"99999999-aaaa-bbbb-cccc-dddddddddddd\",\n    expires_in_minutes=60,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.createWidgetSession({\n  wallet_address: \"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\",\n  chain: \"ETH\",\n  holder_name: \"Jane Doe\",\n  vendor_data: \"user-042\",\n  transaction_id: \"99999999-aaaa-bbbb-cccc-dddddddddddd\",\n  expires_in_minutes: 60,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.CreateWidgetSession(ctx, didit.TravelRuleWidgetSessionCreate{\n\tWalletAddress:    didit.String(\"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\"),\n\tChain:            didit.String(\"ETH\"),\n\tHolderName:       didit.String(\"Jane Doe\"),\n\tVendorData:       didit.String(\"user-042\"),\n\tTransactionID:    didit.String(\"99999999-aaaa-bbbb-cccc-dddddddddddd\"),\n\tExpiresInMinutes: didit.Int(60),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleWidgetSessionCreate;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().createWidgetSession(TravelRuleWidgetSessionCreate.builder()\n        .walletAddress(\"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\")\n        .chain(\"ETH\")\n        .holderName(\"Jane Doe\")\n        .vendorData(\"user-042\")\n        .transactionId(\"99999999-aaaa-bbbb-cccc-dddddddddddd\")\n        .expiresInMinutes(60L)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->createWidgetSession([\n    'wallet_address' => '0xd3b62acb76fb27a7f8961ec40fa11746b113aca9',\n    'chain' => 'ETH',\n    'holder_name' => 'Jane Doe',\n    'vendor_data' => 'user-042',\n    'transaction_id' => '99999999-aaaa-bbbb-cccc-dddddddddddd',\n    'expires_in_minutes' => 60,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.create_widget_session(\n  wallet_address: \"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\",\n  chain: \"ETH\",\n  holder_name: \"Jane Doe\",\n  vendor_data: \"user-042\",\n  transaction_id: \"99999999-aaaa-bbbb-cccc-dddddddddddd\",\n  expires_in_minutes: 60\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.CreateWidgetSessionAsync(new TravelRuleWidgetSessionCreate\n{\n    WalletAddress = \"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\",\n    Chain = \"ETH\",\n    HolderName = \"Jane Doe\",\n    VendorData = \"user-042\",\n    TransactionId = \"99999999-aaaa-bbbb-cccc-dddddddddddd\",\n    ExpiresInMinutes = 60,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "発行されたウィジェットセッションです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetSessionResponse"
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効です。`callback_url`が絶対http(s) URLではない、`expires_in_minutes`が5から10080の範囲外である、`transaction_id`がUUIDではない、またはフィールドが上限より長いことが原因です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid callback_url": {
                    "value": {
                      "callback_url": [
                        "callback_url must be an absolute http(s) URL."
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`transaction_id`がこのアプリケーション内のトラベルルール送金を指していない。"
          }
        }
      }
    },
    "/v3/travel-rule/widget/{token}/": {
      "get": {
        "summary": "ウォレット所有権ウィジェットのコンテキストを取得",
        "description": "ウィジェットのセッショントークンで識別する公開の読み取りエンドポイントで、APIキーは不要です。ウィジェットのコンテキストとすべての証明のステータスを返すため、ポーリングして完了を検出できます。証明が検証されると、completed_atがnull以外になります。SATOSHI_TESTの証明は、入金がオンチェーンで検出されたものの未承認である間、ステータスPENDINGのままになることがあります。バックグラウンドジョブが自動的に再確認し、入金が承認されると完了させるため、待機中にクライアント側でのアクションは不要です。各証明には、その方式に必要なフィールドが含まれます。SATOSHI_TESTではdeposit_address、expected_amount、および証明自体のexpires_at、MESSAGE_SIGNINGではchallengeです。セッションが送金に紐付いている場合は、ポーリングよりもtravel_rule.status.updated Webhookを優先してください。",
        "operationId": "getTravelRuleWidgetContext",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "retrieve_widget_context",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "ウィジェットセッションの発行時に返される不透明なセッショントークンです。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl https://verification.didit.me/v3/travel-rule/widget/{token}/"
          }
        ],
        "responses": {
          "200": {
            "description": "ウィジェットのコンテキストと証明のステータス。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetContext"
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "410": {
            "description": "セッションが完了しないまま期限切れになりました。"
          }
        }
      }
    },
    "/v3/travel-rule/widget/{token}/vasps/": {
      "get": {
        "summary": "ウォレットウィジェットからVASPを検索する",
        "description": "ウィジェットのセッショントークンで識別する公開の読み取りエンドポイントで、APIキーは不要です。エンドユーザーのウィジェットのVASP選択画面で使用されます。ウィジェットのアプリケーションに対してGET /v3/travel-rule/vasps/と同じ検索とフィルターを提供し、各VASPが誰であるか、および到達可能かどうかのみを返します。",
        "operationId": "listTravelRuleWidgetVasps",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "list_widget_vasps",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "ウィジェットセッションの発行時に返される不透明なセッショントークンです。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "名前またはエイリアスの一部（大文字と小文字を区別しない）、完全一致のLEI、またはドメイン（example.comまたはそのドメイン上のURL）。Diditネットワークのメンバーは、法人名、LEI、またはコンプライアンス用メールアドレスのドメインで一致します。"
          },
          {
            "name": "network",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "GTR",
                "TRUST",
                "VERIFYVASP",
                "SYGNA",
                "TRISA"
              ]
            },
            "description": "ネットワークのメンバーディレクトリに現在掲載されているディレクトリエントリのみ。"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "ISO 3166のalpha-2またはalpha-3の国コード。それ以外は400になります。"
          },
          {
            "name": "reachable",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "true: お客様のアプリケーションが利用可能なルートを持つVASPのみ(Diditネットワークのメンバーを含む)。false: 現時点で到達できないディレクトリエントリのみ。"
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "directory",
                "didit"
              ]
            },
            "description": "ディレクトリエントリのみ、またはDiditネットワークのメンバーのみ。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl 'https://verification.didit.me/v3/travel-rule/widget/{token}/vasps/?search=counterparty'"
          }
        ],
        "responses": {
          "200": {
            "description": "名前順に並べた、ページ分割された結果。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/VaspDirectoryWidgetEntry"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "フィルターが無効です。本文には各フィールドが示されます。例: 不明なネットワークや国コード。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "jurisdiction": [
                    "Use an ISO 3166 alpha-2 or alpha-3 country code."
                  ],
                  "network": [
                    "\"SWIFT\" is not a valid choice."
                  ]
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "410": {
            "description": "セッションが期限切れになりました。"
          }
        }
      },
      "post": {
        "summary": "ウォレットウィジェットで取引相手のVASPを選択",
        "description": "ウィジェットのセッショントークンで識別する公開の書き込みエンドポイントで、APIキーは不要です。自動検出で特定できなかった送金先VASPをエンドユーザーが選択したことを登録します。受け付けるのは、COUNTERPARTY_VASP_NOT_FOUND、COUNTERPARTY_VASP_NOT_REACHABLE、またはNOT_ENOUGH_COUNTERPARTY_DATAの状態にある送信側の送金のみです。送金はそのVASPにルーティングされ、再送信されます。自動検出がこの選択を上書きすることはありません。",
        "operationId": "selectTravelRuleWidgetVasp",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "select_widget_vasp",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "ウィジェットセッションの発行時に返される不透明なセッショントークンです。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "vasp"
                ],
                "properties": {
                  "vasp": {
                    "type": "string",
                    "format": "uuid",
                    "description": "`GET /v3/travel-rule/widget/{token}/vasps/`から取得したVASPの`id`です。"
                  }
                }
              },
              "example": {
                "vasp": "9f1c2b34-5d6e-4f70-8a91-b2c3d4e5f607"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/vasps/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"vasp\": \"9f1c2b34-5d6e-4f70-8a91-b2c3d4e5f607\"}'"
          }
        ],
        "responses": {
          "200": {
            "description": "選択が記録され、送金を再送信しています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "transfer_status": {
                      "type": "string",
                      "description": "選択後の送金ステータス。"
                    },
                    "counterparty_vasp": {
                      "type": "string",
                      "description": "エンドユーザーが選択したVASPの名前です。"
                    }
                  }
                },
                "example": {
                  "detail": "Counterparty VASP selected; the transfer is being resent.",
                  "transfer_status": "AWAITING_COUNTERPARTY",
                  "counterparty_vasp": "Northwind Exchange"
                }
              }
            }
          },
          "400": {
            "description": "`vasp`が指定されていないか、そのIDを持つ有効なディレクトリエントリが存在しません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "vasp": [
                    "No directory entry has this id."
                  ]
                }
              }
            }
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "409": {
            "description": "ウィジェットセッションがトラベルルールの取引に紐付いていないか、取引が取引相手を受け付けるステータスにある送金取引ではありません。"
          },
          "410": {
            "description": "セッションが期限切れになりました。"
          }
        }
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/vendor-users/toggle-ongoing-monitoring/": {
      "patch": {
        "summary": "ユーザーの継続的なAMLモニタリングを切り替える",
        "description": "ユーザー単位で継続的なAMLモニタリングを有効化または無効化します。ユーザーごとにモニタリング対象のAMLスクリーニングはちょうど1件だけ保持されます。AMLスクリーニングが1件もないユーザー（インポートしたユーザーなど）には、まずAMLスクリーニングが作成・実行され、通常のAMLスクリーニングとして請求されます。estimate_onlyを設定すると、書き込みを行わずに件数と費用をプレビューできます。20件以下のバッチはその場で処理され（200、COMPLETED）、それより大きいバッチは202を返して非同期で実行されます。",
        "operationId": "toggle_vendor_users_ongoing_monitoring",
        "x-didit-sdk": {
          "resource": "users",
          "method": "set_ongoing_monitoring",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OngoingMonitoringToggleRequest"
              },
              "example": {
                "is_enabled": true,
                "didit_internal_id_list": [
                  "5b9a0000-0000-4000-8000-00000000f00d"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "見積もり（estimate_onlyの場合）、またはインラインで処理された小規模バッチの完了済みジョブ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringToggleResult"
                }
              }
            }
          },
          "202": {
            "description": "より大きなバッチは非同期で処理されます。返されたjob_idを使用してジョブエンドポイントをポーリングしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringJob"
                }
              }
            }
          },
          "403": {
            "description": "write:sessions権限がないか、有効化に必要な残高が不足しています（見積額はエラー本文に含まれます）。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.users.set_ongoing_monitoring(\n    is_enabled=True,\n    didit_internal_id_list=[\"5b9a0000-0000-4000-8000-00000000f00d\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.users.setOngoingMonitoring({\n  is_enabled: true,\n  didit_internal_id_list: [\"5b9a0000-0000-4000-8000-00000000f00d\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Users.SetOngoingMonitoring(ctx, didit.OngoingMonitoringToggleRequest{\n\tIsEnabled:           true,\n\tDiditInternalIDList: didit.Some([]string{\"5b9a0000-0000-4000-8000-00000000f00d\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.OngoingMonitoringToggleRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.users().setOngoingMonitoring(OngoingMonitoringToggleRequest.builder()\n        .isEnabled(true)\n        .diditInternalIdList(List.of(\"5b9a0000-0000-4000-8000-00000000f00d\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->users->setOngoingMonitoring([\n    'is_enabled' => true,\n    'didit_internal_id_list' => ['5b9a0000-0000-4000-8000-00000000f00d'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.users.set_ongoing_monitoring(\n  is_enabled: true,\n  didit_internal_id_list: [\"5b9a0000-0000-4000-8000-00000000f00d\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Users.SetOngoingMonitoringAsync(new OngoingMonitoringToggleRequest\n{\n    IsEnabled = true,\n    DiditInternalIdList = new string[] { \"5b9a0000-0000-4000-8000-00000000f00d\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/vendor-users/toggle-ongoing-monitoring/{job_id}/": {
      "get": {
        "summary": "AMLの継続的なモニタリングジョブを取得",
        "description": "モニタリング切り替えジョブの進捗と、結果ごとのカウンターです。statusがPENDINGまたはPROCESSINGの間は、数秒ごとにポーリングしてください。",
        "operationId": "get_vendor_users_ongoing_monitoring_job",
        "x-didit-sdk": {
          "resource": "users",
          "method": "retrieve_ongoing_monitoring_job",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "トグルエンドポイントが返すモニタリングジョブのUUID。"
          }
        ],
        "responses": {
          "200": {
            "description": "ジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringJob"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションでは不明なジョブです。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.users.retrieve_ongoing_monitoring_job(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.users.retrieveOngoingMonitoringJob(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Users.RetrieveOngoingMonitoringJob(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.users().retrieveOngoingMonitoringJob(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->users->retrieveOngoingMonitoringJob('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.users.retrieve_ongoing_monitoring_job(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Users.RetrieveOngoingMonitoringJobAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/vendor-businesses/toggle-ongoing-monitoring/": {
      "patch": {
        "summary": "企業の継続的なAMLモニタリングを切り替える",
        "description": "ユーザー向けの切り替えに相当する企業単位の機能です。企業ごとに1件のAMLスクリーニングをモニタリング対象とし、AMLスクリーニングが一度も行われていない企業は先にスクリーニングされます(企業エンティティとして)。estimate_only、インラインの高速パス、非同期ジョブの仕様は同じです。",
        "operationId": "toggle_vendor_businesses_ongoing_monitoring",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "set_ongoing_monitoring",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OngoingMonitoringToggleRequest"
              },
              "example": {
                "is_enabled": true,
                "didit_internal_id_list": [
                  "b0000000-0000-4000-8000-0000000000b1"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "見積もり（estimate_onlyの場合）、またはインラインで処理された小規模バッチの完了済みジョブ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringToggleResult"
                }
              }
            }
          },
          "202": {
            "description": "より大きなバッチは非同期で処理されます。返されたjob_idを使用してジョブエンドポイントをポーリングしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringJob"
                }
              }
            }
          },
          "403": {
            "description": "write:sessions権限がないか、有効化に必要な残高が不足しています（見積額はエラー本文に含まれます）。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.businesses.set_ongoing_monitoring(\n    is_enabled=True,\n    didit_internal_id_list=[\"b0000000-0000-4000-8000-0000000000b1\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.businesses.setOngoingMonitoring({\n  is_enabled: true,\n  didit_internal_id_list: [\"b0000000-0000-4000-8000-0000000000b1\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.SetOngoingMonitoring(ctx, didit.OngoingMonitoringToggleRequest{\n\tIsEnabled:           true,\n\tDiditInternalIDList: didit.Some([]string{\"b0000000-0000-4000-8000-0000000000b1\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.OngoingMonitoringToggleRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.businesses().setOngoingMonitoring(OngoingMonitoringToggleRequest.builder()\n        .isEnabled(true)\n        .diditInternalIdList(List.of(\"b0000000-0000-4000-8000-0000000000b1\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->businesses->setOngoingMonitoring([\n    'is_enabled' => true,\n    'didit_internal_id_list' => ['b0000000-0000-4000-8000-0000000000b1'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.businesses.set_ongoing_monitoring(\n  is_enabled: true,\n  didit_internal_id_list: [\"b0000000-0000-4000-8000-0000000000b1\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.SetOngoingMonitoringAsync(new OngoingMonitoringToggleRequest\n{\n    IsEnabled = true,\n    DiditInternalIdList = new string[] { \"b0000000-0000-4000-8000-0000000000b1\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/vendor-businesses/toggle-ongoing-monitoring/{job_id}/": {
      "get": {
        "summary": "AMLの継続的なモニタリングジョブを取得",
        "description": "モニタリング切り替えジョブの進捗と、結果ごとのカウンターです。statusがPENDINGまたはPROCESSINGの間は、数秒ごとにポーリングしてください。",
        "operationId": "get_vendor_businesses_ongoing_monitoring_job",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "retrieve_ongoing_monitoring_job",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "トグルエンドポイントが返すモニタリングジョブのUUID。"
          }
        ],
        "responses": {
          "200": {
            "description": "ジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringJob"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションでは不明なジョブです。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.businesses.retrieve_ongoing_monitoring_job(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.businesses.retrieveOngoingMonitoringJob(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.RetrieveOngoingMonitoringJob(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.businesses().retrieveOngoingMonitoringJob(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->businesses->retrieveOngoingMonitoringJob('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.businesses.retrieve_ongoing_monitoring_job(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.RetrieveOngoingMonitoringJobAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/businesses/toggle-ongoing-monitoring/": {
      "patch": {
        "summary": "企業セッションの継続的なAMLモニタリングを切り替える",
        "description": "KYB認証向けのセッション単位の切り替えで、セッション番号で指定します。AMLスクリーニングがないセッションには、AMLスクリーニングが1件作成され、そのセッション自体に紐付けられます。estimate_only、インラインの高速パス、非同期ジョブの仕様はユーザー単位のエンドポイントと同じです。AMLスクリーニングがないセッションをスキップしていた従来の同期的な動作を置き換えます。",
        "operationId": "toggle_business_sessions_ongoing_monitoring",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "set_session_ongoing_monitoring",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "is_enabled"
                ],
                "properties": {
                  "is_enabled": {
                    "type": "boolean",
                    "description": "モニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
                  },
                  "estimate_only": {
                    "type": "boolean",
                    "default": false,
                    "description": "trueの場合、費用の見積もりを返し、書き込みは行いません。"
                  },
                  "update_all": {
                    "type": "boolean",
                    "default": false,
                    "description": "アプリケーションのすべてのエンティティに適用します（filter_*パラメーターが指定されている場合はその範囲に限定されます）。"
                  },
                  "filter_search": {
                    "type": "string"
                  },
                  "filter_status": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "filter_country": {
                    "type": "string"
                  },
                  "filter_date_from": {
                    "type": "string",
                    "format": "date"
                  },
                  "filter_date_to": {
                    "type": "string",
                    "format": "date"
                  },
                  "session_numbers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "切り替える企業セッション番号。update_all(または従来のエイリアスであるtoggle_all)がtrueでない場合は必須です。"
                  },
                  "toggle_all": {
                    "type": "boolean",
                    "default": false,
                    "description": "update_allのレガシーエイリアス。"
                  },
                  "filter_workflow_id": {
                    "type": "string"
                  }
                }
              },
              "example": {
                "is_enabled": true,
                "session_numbers": [
                  "1001",
                  "1002"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "見積もり（estimate_onlyの場合）、またはインラインで処理された小規模バッチの完了済みジョブ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringToggleResult"
                }
              }
            }
          },
          "202": {
            "description": "より大きなバッチは非同期で処理されます。返されたjob_idを使用してジョブエンドポイントをポーリングしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringJob"
                }
              }
            }
          },
          "403": {
            "description": "write:sessions権限がないか、有効化に必要な残高が不足しています（見積額はエラー本文に含まれます）。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.businesses.set_session_ongoing_monitoring(\n    is_enabled=True,\n    session_numbers=[\"1001\", \"1002\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.businesses.setSessionOngoingMonitoring({\n  is_enabled: true,\n  session_numbers: [\"1001\", \"1002\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.SetSessionOngoingMonitoring(ctx, didit.BusinessesSetSessionOngoingMonitoringParams{\n\tIsEnabled:      true,\n\tSessionNumbers: didit.Some([]string{\"1001\", \"1002\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.BusinessesSetSessionOngoingMonitoringParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.businesses().setSessionOngoingMonitoring(BusinessesSetSessionOngoingMonitoringParams.builder()\n        .isEnabled(true)\n        .sessionNumbers(List.of(\"1001\", \"1002\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->businesses->setSessionOngoingMonitoring([\n    'is_enabled' => true,\n    'session_numbers' => ['1001', '1002'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.businesses.set_session_ongoing_monitoring(\n  is_enabled: true,\n  session_numbers: [\"1001\", \"1002\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.SetSessionOngoingMonitoringAsync(new BusinessesSetSessionOngoingMonitoringParams\n{\n    IsEnabled = true,\n    SessionNumbers = new string[] { \"1001\", \"1002\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/businesses/toggle-ongoing-monitoring/{job_id}/": {
      "get": {
        "summary": "AMLの継続的なモニタリングジョブを取得",
        "description": "モニタリング切り替えジョブの進捗と、結果ごとのカウンターです。statusがPENDINGまたはPROCESSINGの間は、数秒ごとにポーリングしてください。",
        "operationId": "get_business_sessions_ongoing_monitoring_job",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "retrieve_session_ongoing_monitoring_job",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "トグルエンドポイントが返すモニタリングジョブのUUID。"
          }
        ],
        "responses": {
          "200": {
            "description": "ジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OngoingMonitoringJob"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションでは不明なジョブです。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.businesses.retrieve_session_ongoing_monitoring_job(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.businesses.retrieveSessionOngoingMonitoringJob(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.RetrieveSessionOngoingMonitoringJob(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.businesses().retrieveSessionOngoingMonitoringJob(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->businesses->retrieveSessionOngoingMonitoringJob('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.businesses.retrieve_session_ongoing_monitoring_job(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.RetrieveSessionOngoingMonitoringJobAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/": {
      "get": {
        "summary": "ケース一覧を取得",
        "description": "アプリケーションのケースを新しい順に一覧表示します。フィルター、検索、並べ替えに対応しています。クエリパラメーターを参照してください。`limit`/`offset`でページネーションします。",
        "operationId": "list_cases",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。デフォルトは50です。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "最初のレコードの0始まりのオフセットです。"
          },
          {
            "name": "status__in",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "含めるステータスのカンマ区切りリスト(例:OPEN,AWAITING_USER)。"
          },
          {
            "name": "priority",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "含める優先度のカンマ区切りリスト。"
          },
          {
            "name": "source__in",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "含めるソースのカンマ区切りリスト。"
          },
          {
            "name": "blueprint",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "このブループリントのケースに絞り込みます。"
          },
          {
            "name": "assigned_to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "このユーザーに割り当てられたケースに絞り込みます。"
          },
          {
            "name": "unassigned",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "未割り当てのケースではtrue、割り当て済みのケースではfalseです。"
          },
          {
            "name": "tag",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "このタグと完全に一致するタグが付いたケースに絞り込みます。"
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "タイトル、case_number、タグ、対象者の名前/UUID/外部ID、紐付けられたセッションのUUID、または紐付けられた取引のUUIDに一致します。"
          },
          {
            "name": "date_from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "作成日時の下限（この値を含む）。"
          },
          {
            "name": "date_to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "作成日時の上限（この値を含む）。"
          },
          {
            "name": "due_before",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "due_atの上限。"
          },
          {
            "name": "overdue",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "trueの場合、期限を超過したopen/awaiting-userのケースのみを返します。"
          },
          {
            "name": "ordering",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "created_at",
                "-created_at",
                "due_at",
                "-due_at"
              ],
              "default": "-created_at"
            },
            "description": "並び順。due_atで並べ替える場合、nullは最後になります。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/?status__in=OPEN,AWAITING_USER&ordering=-due_at' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.ListAutoPaging(ctx, didit.CasesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされたケース一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "一致する行の数。100までは正確な値で、パフォーマンスのため100を超える場合は100が上限となります。最終ページの判定には`next`がnullであることを利用してください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページの絶対URL、またはnull。"
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページの絶対URL、またはnull。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CaseListItem"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "ケースを作成",
        "description": "ちょうど1つの対象（ユーザーまたは企業）に紐づくケースを作成します。対象は直接指定するか、添付したセッション/取引のリンクから導出します。APIで作成したケースのソースは常に`MANUAL`です。",
        "operationId": "create_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "title"
                ],
                "properties": {
                  "title": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "blueprint": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "CaseBlueprintのUUID。ブループリントを使用しない場合は省略します。"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "LOW",
                      "MEDIUM",
                      "HIGH"
                    ],
                    "default": "MEDIUM"
                  },
                  "due_at": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "subject": {
                    "type": "object",
                    "description": "linksを指定しない場合は必須です。ケースのただ1つの対象者です。",
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "user",
                          "business"
                        ]
                      },
                      "uuid": {
                        "type": "string",
                        "format": "uuid"
                      }
                    }
                  },
                  "links": {
                    "type": "array",
                    "description": "作成時に紐付けるセッション、企業セッション、取引。例: [{\"entity_type\": \"transaction\", \"entity_uuid\": \"...\"}]。subjectを省略した場合、subjectは最初のリンクの所有者から導出されます。",
                    "items": {
                      "type": "object"
                    }
                  },
                  "assigned_to": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "即時に割り当てるユーザーのUUID。"
                  },
                  "review_duplicates": {
                    "type": "boolean",
                    "default": false,
                    "description": "ケースを作成する前に既存の調査を再確認します。trueの場合、既存のケースがある対象者には、空でないseparate_incident_reasonが必要です。コンソールでは常にこの保護が有効です。省略した場合は、既存のAPIの動作が維持されます。"
                  },
                  "separate_incident_reason": {
                    "type": "string",
                    "maxLength": 1000
                  },
                  "source_context": {
                    "$ref": "#/components/schemas/CaseDuplicateCaseFraudSourceContextRequest"
                  }
                }
              },
              "example": {
                "title": "Manual - Jane Doe",
                "blueprint": "b1de0000-0000-4000-8000-000000000002",
                "priority": "HIGH",
                "subject": {
                  "type": "user",
                  "uuid": "5b9a0000-0000-4000-8000-00000000f00d"
                },
                "tags": [
                  "review"
                ]
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Manual - Jane Doe\", \"blueprint\": \"b1de0000-0000-4000-8000-000000000002\", \"priority\": \"HIGH\", \"subject\": {\"type\": \"user\", \"uuid\": \"5b9a0000-0000-4000-8000-00000000f00d\"}, \"tags\": [\"review\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.create(\n    title=\"Manual - Jane Doe\",\n    blueprint=\"b1de0000-0000-4000-8000-000000000002\",\n    priority=\"HIGH\",\n    tags=[\"review\"],\n    subject={\n        \"type\": \"user\",\n        \"uuid\": \"5b9a0000-0000-4000-8000-00000000f00d\",\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.create({\n  title: \"Manual - Jane Doe\",\n  blueprint: \"b1de0000-0000-4000-8000-000000000002\",\n  priority: \"HIGH\",\n  tags: [\"review\"],\n  subject: {\n    type: \"user\",\n    uuid: \"5b9a0000-0000-4000-8000-00000000f00d\",\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Create(ctx, didit.CasesCreateParams{\n\tTitle:     \"Manual - Jane Doe\",\n\tBlueprint: didit.String(\"b1de0000-0000-4000-8000-000000000002\"),\n\tPriority:  didit.Some(didit.CasesCreateParamsPriority(\"HIGH\")),\n\tTags:      didit.Some([]string{\"review\"}),\n\tSubject: didit.Some(didit.CasesCreateParamsSubject{\n\t\tType: didit.Some(didit.CasesCreateParamsSubjectType(\"user\")),\n\t\tUUID: didit.String(\"5b9a0000-0000-4000-8000-00000000f00d\"),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CasesCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().create(CasesCreateParams.builder()\n        .title(\"Manual - Jane Doe\")\n        .blueprint(\"b1de0000-0000-4000-8000-000000000002\")\n        .priority(CasesCreateParams.Priority.of(\"HIGH\"))\n        .tags(List.of(\"review\"))\n        .subject(CasesCreateParams.Subject.builder()\n                .type(CasesCreateParams.Subject.Type.of(\"user\"))\n                .uuid(\"5b9a0000-0000-4000-8000-00000000f00d\")\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->create([\n    'title' => 'Manual - Jane Doe',\n    'blueprint' => 'b1de0000-0000-4000-8000-000000000002',\n    'priority' => 'HIGH',\n    'tags' => ['review'],\n    'subject' => [\n        'type' => 'user',\n        'uuid' => '5b9a0000-0000-4000-8000-00000000f00d',\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.create(\n  title: \"Manual - Jane Doe\",\n  blueprint: \"b1de0000-0000-4000-8000-000000000002\",\n  priority: \"HIGH\",\n  tags: [\"review\"],\n  subject: {\n    type: \"user\",\n    uuid: \"5b9a0000-0000-4000-8000-00000000f00d\",\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.CreateAsync(new CasesCreateParams\n{\n    Title = \"Manual - Jane Doe\",\n    Blueprint = \"b1de0000-0000-4000-8000-000000000002\",\n    Priority = new CasesCreateParamsPriority(\"HIGH\"),\n    Tags = new string[] { \"review\" },\n    Subject = new CasesCreateParamsSubject\n    {\n        Type = new CasesCreateParamsSubjectType(\"user\"),\n        Uuid = \"5b9a0000-0000-4000-8000-00000000f00d\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "ケースが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          },
          "400": {
            "description": "subjectとlinksのどちらも指定されていない、またはsubject/blueprint/assigneeが見つかりませんでした。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "重複レビューが有効で、別個のインシデントである理由なしに既存のケースが見つかりました。ケースは作成されていません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/": {
      "get": {
        "summary": "ケースを取得",
        "description": "ケースを、その対象、ブループリント、メモ、イベント、リンク、チェックリストとともに取得します。",
        "operationId": "get_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.retrieve(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.retrieve(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Retrieve(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().retrieve(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->retrieve('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.retrieve(\"c1a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RetrieveAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースの詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにケース（またはネストされたリソース）が見つかりません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "ケースを更新",
        "description": "ケースのタイトル、優先度、期日、タグ、または担当レビューチームを更新します。変更したいフィールドのみを送信してください。省略したフィールドは現在の値が維持されます。`tags`はタグリスト全体を置き換えます。`team`には、このアプリケーションの有効なレビューチームのuuid(`GET .../cases/teams/`で一覧を取得できます)を指定するか、チームを解除する場合はnullを指定します。フルアクセスのAPIキー、またはコンソールメンバーの場合は`write:cases`が必要です。アクセスが制限されたキーでは403が返されます。該当する場合はPRIORITY_CHANGED、DUE_DATE_CHANGED、TAG_ADDED、TAG_REMOVED、TEAM_CHANGEDイベントが記録されます。タイトルの変更はタイムラインイベントなしで保存されます。更新後のケースを返します。",
        "operationId": "update_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "新しいケースのタイトル。"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "LOW",
                      "MEDIUM",
                      "HIGH"
                    ]
                  },
                  "due_at": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true,
                    "description": "新しい期限。クリアするにはnullを送信します。"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "完全なタグリスト。現在のタグを置き換えます。"
                  },
                  "team": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "ケースを担当するレビューチームのUUID。このアプリケーションの有効なチームである必要があります。チームの割り当てを解除するにはnullを送信します。"
                  }
                }
              },
              "examples": {
                "Change priority and deadline": {
                  "value": {
                    "priority": "HIGH",
                    "due_at": "2026-11-01T00:00:00Z"
                  }
                },
                "Move the case to a team": {
                  "value": {
                    "team": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
                  }
                },
                "Clear the team": {
                  "value": {
                    "team": null
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"priority\": \"HIGH\", \"due_at\": \"2026-08-01T00:00:00Z\"}'"
          },
          {
            "lang": "curl",
            "label": "curl (change team)",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"team\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.update(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    priority=\"HIGH\",\n    due_at=\"2026-11-01T00:00:00Z\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.update(\"c1a5e000-0000-4000-8000-000000000001\", {\n  priority: \"HIGH\",\n  due_at: \"2026-11-01T00:00:00Z\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Update(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesUpdateParams{\n\tPriority: didit.Some(didit.CasesUpdateParamsPriority(\"HIGH\")),\n\tDueAt:    didit.Time(time.Date(2026, 11, 1, 0, 0, 0, 0, time.UTC)),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.OffsetDateTime;\nimport me.didit.Didit;\nimport me.didit.types.CasesUpdateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().update(\"c1a5e000-0000-4000-8000-000000000001\", CasesUpdateParams.builder()\n        .priority(CasesUpdateParams.Priority.of(\"HIGH\"))\n        .dueAt(OffsetDateTime.parse(\"2026-11-01T00:00:00Z\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->update('c1a5e000-0000-4000-8000-000000000001', [\n    'priority' => 'HIGH',\n    'due_at' => '2026-11-01T00:00:00Z',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.update(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  priority: \"HIGH\",\n  due_at: \"2026-11-01T00:00:00Z\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.UpdateAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesUpdateParams\n{\n    Priority = new CasesUpdateParamsPriority(\"HIGH\"),\n    DueAt = DateTimeOffset.Parse(\"2026-11-01T00:00:00Z\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後のケース。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          },
          "400": {
            "description": "フィールドの検証に失敗しました。本文はフィールド名をキーとしています。`team`は、このアプリケーションの有効なレビューチームでない場合に拒否されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Team not active in this application": {
                    "value": {
                      "team": [
                        "Choose an active team of this application."
                      ]
                    }
                  },
                  "Invalid priority": {
                    "value": {
                      "priority": [
                        "\"URGENT\" is not a valid choice."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが別のアプリケーションに属しているか、アクセスが制限されたキーです。ケースのエンドポイントにはフルアクセスキーが必要です。コンソールメンバーのトークンには`write:cases`が必要です。",
            "content": {
              "application/json": {
                "examples": {
                  "Restricted API Key": {
                    "summary": "アクセスが制限されたAPIキー",
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "write:casesを持たないコンソールメンバー、または別のアプリケーションのキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにケースが見つかりません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No Case matches the given query."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "delete": {
        "summary": "ケースを削除",
        "description": "ケースを完全に削除します。ケースの下書き状態の規制レポートも併せて削除されます。紐づく認証、人物、企業、取引は削除されません。削除を取り消すエンドポイントはありません。\n\nケースに確定済みの規制レポートがある場合、リクエスト全体が`409`で拒否され、何も削除されません。ボディには`code: in_filed_report`が含まれ、各レポートが`uuid`、`report_number`、`report_type`、`case_uuid`で示されます。それらのレポートを削除してから、リクエストを再度実行してください。",
        "operationId": "delete_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.cases.delete(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.cases.delete(\"c1a5e000-0000-4000-8000-000000000001\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.Cases.Delete(ctx, \"c1a5e000-0000-4000-8000-000000000001\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().delete(\"c1a5e000-0000-4000-8000-000000000001\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->cases->delete('c1a5e000-0000-4000-8000-000000000001');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.delete(\"c1a5e000-0000-4000-8000-000000000001\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Cases.DeleteAsync(\"c1a5e000-0000-4000-8000-000000000001\");"
          }
        ],
        "responses": {
          "204": {
            "description": "ケースが削除されました。"
          },
          "403": {
            "description": "このキーではケースを削除できません。`write:cases`を持つフルアクセスキーが必要です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "ケースがこのアプリケーションに存在しないか、すでに削除されています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "ケースに確定済みの規制当局向けレポートがあります。何も削除されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InFiledReportError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/assign/": {
      "post": {
        "summary": "ケースの割り当てまたは割り当て解除",
        "description": "ケースをユーザーに割り当てるか、assignee_user_id: nullを送信して割り当てを解除します。担当者がまだ存在しない場合、assignee_email/assignee_nameによりUser行が自動作成されます。",
        "operationId": "assign_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "assign",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "assignee_user_id"
                ],
                "properties": {
                  "assignee_user_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "割り当てを解除するにはnullを指定します。"
                  },
                  "assignee_email": {
                    "type": "string",
                    "format": "email",
                    "nullable": true
                  },
                  "assignee_name": {
                    "type": "string",
                    "nullable": true
                  }
                }
              },
              "example": {
                "assignee_user_id": "9a000000-0000-4000-8000-0000000000aa"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/assign/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"assignee_user_id\": \"9a000000-0000-4000-8000-0000000000aa\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.assign(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    assignee_user_id=\"9a000000-0000-4000-8000-0000000000aa\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.assign(\"c1a5e000-0000-4000-8000-000000000001\", {\n  assignee_user_id: \"9a000000-0000-4000-8000-0000000000aa\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Assign(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesAssignParams{\n\tAssigneeUserID: didit.String(\"9a000000-0000-4000-8000-0000000000aa\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesAssignParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().assign(\"c1a5e000-0000-4000-8000-000000000001\", CasesAssignParams.builder()\n        .assigneeUserId(\"9a000000-0000-4000-8000-0000000000aa\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->assign('c1a5e000-0000-4000-8000-000000000001', [\n    'assignee_user_id' => '9a000000-0000-4000-8000-0000000000aa',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.assign(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  assignee_user_id: \"9a000000-0000-4000-8000-0000000000aa\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.AssignAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesAssignParams\n{\n    AssigneeUserId = \"9a000000-0000-4000-8000-0000000000aa\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースが割り当てまたは割り当て解除されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/resolve/": {
      "post": {
        "summary": "ケースを解決",
        "description": "次の5つの解決区分のいずれかでケースを解決します：FALSE_POSITIVE（懸念なし）、VALID_THREAT（懸念を確認）、INCONCLUSIVE、REQUIREMENTS_NOT_MET、REQUIREMENTS_SATISFIED。ブループリントのチェックリストが任意ではなく未完了の項目が残っている場合、またはブループリントで解決メモが必須であるにもかかわらず指定されていない場合は、400でブロックされます。ケースのブループリントに4眼承認のチェッカーステップ（four_eyes_checker_blueprint）がある場合、解決は即時には行われず保留状態（case.pending_resolution）となり、ケースはチェッカーブループリントに移動します。別の担当者がapproveまたはreject-approvalを呼び出す必要があります。4眼承認の解決はコンソールのメンバーとして送信してください。APIキーで送信された解決には作成者が記録されないため、approveとreject-approvalはすべての呼び出し元に対して403を返します。4眼承認のブループリントでは、`checker`で承認すべきメンバーを指定できます。その場合、そのメンバーのみが解決を承認または却下でき、レスポンスの`checker`にそのメンバーが示されます。`checker`を指定しない場合、解決はチェッカーブループリントのキューで待機します。チェッカーステップのないブループリントに`checker`を送信すると400が返されます。",
        "operationId": "resolve_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "resolve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "resolution"
                ],
                "properties": {
                  "resolution": {
                    "type": "string",
                    "enum": [
                      "FALSE_POSITIVE",
                      "VALID_THREAT",
                      "INCONCLUSIVE",
                      "REQUIREMENTS_NOT_MET",
                      "REQUIREMENTS_SATISFIED"
                    ]
                  },
                  "note": {
                    "type": "string",
                    "nullable": true,
                    "description": "ブループリントでrequire_resolution_noteが設定されている場合は必須です。"
                  },
                  "checker": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "フォーアイズ（二重承認）ブループリント専用です。この解決を承認する必要があるメンバーのユーザーuuid（ケースの`assigned_to.uuid`、またはレビューチームの`members[].user_id`と同じID）。このメンバーはこのアプリケーションに対するケースへのアクセス権を持っている必要があり、解決を提出する担当者本人であってはなりません。省略するかnullを送信すると、解決はチェッカーのキューに委ねられます。"
                  }
                }
              },
              "examples": {
                "Resolve": {
                  "value": {
                    "resolution": "FALSE_POSITIVE",
                    "note": "Confirmed legitimate activity after reviewing documents."
                  }
                },
                "Four-eyes blueprint with a named checker": {
                  "value": {
                    "resolution": "VALID_THREAT",
                    "note": "Document tampering confirmed.",
                    "checker": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/resolve/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"resolution\": \"FALSE_POSITIVE\", \"note\": \"Confirmed legitimate activity after reviewing documents.\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.resolve(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    resolution=\"FALSE_POSITIVE\",\n    note=\"Confirmed legitimate activity after reviewing documents.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.resolve(\"c1a5e000-0000-4000-8000-000000000001\", {\n  resolution: \"FALSE_POSITIVE\",\n  note: \"Confirmed legitimate activity after reviewing documents.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Resolve(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesResolveParams{\n\tResolution: \"FALSE_POSITIVE\",\n\tNote:       didit.String(\"Confirmed legitimate activity after reviewing documents.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesResolveParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().resolve(\"c1a5e000-0000-4000-8000-000000000001\", CasesResolveParams.builder()\n        .resolution(CasesResolveParams.Resolution.of(\"FALSE_POSITIVE\"))\n        .note(\"Confirmed legitimate activity after reviewing documents.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->resolve('c1a5e000-0000-4000-8000-000000000001', [\n    'resolution' => 'FALSE_POSITIVE',\n    'note' => 'Confirmed legitimate activity after reviewing documents.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.resolve(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  resolution: \"FALSE_POSITIVE\",\n  note: \"Confirmed legitimate activity after reviewing documents.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ResolveAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesResolveParams\n{\n    Resolution = \"FALSE_POSITIVE\",\n    Note = \"Confirmed legitimate activity after reviewing documents.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "解決済み、または4眼承認のために保留中。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          },
          "400": {
            "description": "解決は拒否されました。フィールドに紐付かないエラーは文字列のリストで返されます。原因は、未完了のチェックリスト、必須メモの欠落、または`checker`を確認できなかったか、このアプリケーションへのケースアクセス権を持つ有効なレビュアーではないことです。`checker`のエラーはフィールドをキーとして返されます。原因は、指定されたメンバーが解決を提出する担当者本人である場合、またはケースのブループリントにチェッカーステップがない場合です。",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    {
                      "type": "object",
                      "additionalProperties": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    }
                  ]
                },
                "examples": {
                  "Incomplete checklist": {
                    "value": [
                      "Case has incomplete checklist items: Verify source of funds"
                    ]
                  },
                  "Resolution note required": {
                    "value": [
                      "A resolution note is required to resolve this case."
                    ]
                  },
                  "Reviewer access could not be verified": {
                    "value": [
                      "Reviewer access could not be verified. Try again."
                    ]
                  },
                  "Checker is not an active reviewer": {
                    "value": [
                      "Choose an active reviewer with case access to this application."
                    ]
                  },
                  "Checker is the submitting officer": {
                    "value": {
                      "checker": [
                        "The officer who submitted the resolution cannot be its checker."
                      ]
                    }
                  },
                  "Policy has no checker step": {
                    "value": {
                      "checker": [
                        "This review policy has no checker step, so the case resolves directly."
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/reopen/": {
      "post": {
        "summary": "ケースを再開",
        "description": "ユーザー対応待ちまたは解決済みのケースをオープンに戻し、resolution、resolution_notes、resolved_at、resolved_by_emailをクリアします。",
        "operationId": "reopen_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "reopen",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/reopen/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.reopen(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.reopen(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Reopen(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().reopen(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->reopen('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.reopen(\"c1a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ReopenAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースを再開します。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/request-info/": {
      "post": {
        "summary": "情報提供を依頼（ユーザー対応待ち）",
        "description": "認証済みユーザーから追加情報を収集する間、オープンのケースをawaiting_userに移動します。現在、解決が4-eyes承認待ちの場合は400で失敗します。",
        "operationId": "request_case_info",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "request_info",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/request-info/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.request_info(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.requestInfo(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RequestInfo(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().requestInfo(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->requestInfo('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.request_info(\"c1a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RequestInfoAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "情報提供を依頼（ユーザー対応待ち）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/escalate/": {
      "post": {
        "summary": "ケースをエスカレーション",
        "description": "ケースを、そのブループリントに設定されたescalation_blueprintに移動します。現在のブループリントでescalation_enabledが有効で、かつescalation_blueprintが設定されている必要があり、そうでない場合は400が返されます。",
        "operationId": "escalate_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "escalate",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/escalate/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.escalate(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.escalate(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Escalate(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().escalate(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->escalate('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.escalate(\"c1a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.EscalateAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースをエスカレーションします。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/transfer/": {
      "post": {
        "summary": "ケースを移管",
        "description": "ケースを同じアプリケーションの別の有効なブループリントに移動します。現在のブループリントでtransfer_enabledが有効である必要があり、そうでない場合は400が返されます。",
        "operationId": "transfer_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "transfer",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "target_blueprint"
                ],
                "properties": {
                  "target_blueprint": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              },
              "example": {
                "target_blueprint": "b1de0000-0000-4000-8000-000000000002"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/transfer/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"target_blueprint\": \"b1de0000-0000-4000-8000-000000000002\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.transfer(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    target_blueprint=\"b1de0000-0000-4000-8000-000000000002\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.transfer(\"c1a5e000-0000-4000-8000-000000000001\", {\n  target_blueprint: \"b1de0000-0000-4000-8000-000000000002\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Transfer(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesTransferParams{\n\tTargetBlueprint: \"b1de0000-0000-4000-8000-000000000002\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesTransferParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().transfer(\"c1a5e000-0000-4000-8000-000000000001\", CasesTransferParams.builder()\n        .targetBlueprint(\"b1de0000-0000-4000-8000-000000000002\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->transfer('c1a5e000-0000-4000-8000-000000000001', [\n    'target_blueprint' => 'b1de0000-0000-4000-8000-000000000002',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.transfer(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  target_blueprint: \"b1de0000-0000-4000-8000-000000000002\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.TransferAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesTransferParams\n{\n    TargetBlueprint = \"b1de0000-0000-4000-8000-000000000002\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースが移管されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/approve/": {
      "post": {
        "summary": "ステージングされた解決を承認する（4眼原則）",
        "description": "4眼原則のブループリントでresolveによりステージングされた解決を適用します。呼び出し元は解決を送信した担当者とは別の担当者である必要があり、そうでない場合は403が返されます。解決でチェッカー（ケースの`checker`）が指定されている場合、そのメンバーのみが承認できます。APIキーを含むその他の呼び出し元には403が返されます。",
        "operationId": "approve_case_resolution",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "approve_resolution",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/approve/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.approve_resolution(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.approveResolution(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.ApproveResolution(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().approveResolution(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->approveResolution('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.approve_resolution(\"c1a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ApproveResolutionAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "解決内容が適用されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          },
          "409": {
            "description": "ケースに承認待ちの解決がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "呼び出し元はこの解決内容を承認できません。呼び出し元自身が提出した、ケースに作成者が記録されていない、または解決内容で別の承認者が指定されています。承認者が指定されている場合、APIキーには常にこの403が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Caller submitted the resolution": {
                    "value": {
                      "detail": "The officer who submitted the resolution cannot approve it."
                    }
                  },
                  "No recorded maker": {
                    "value": {
                      "detail": "Case has no recorded maker for this pending resolution; approve is not permitted."
                    }
                  },
                  "Caller is not the named checker": {
                    "value": {
                      "detail": "Only the named checker can approve this resolution."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/reject-approval/": {
      "post": {
        "summary": "ステージングされた解決を却下（4-eyes原則）",
        "description": "resolveでステージングされた解決を却下し、ケースを作成者（maker）のブループリントに戻します。呼び出し元は、解決を提出した担当者とは別の担当者である必要があり、そうでない場合は403が返されます。解決でチェッカー（ケースの`checker`）が指定されている場合、そのメンバーのみが却下できます。APIキーを含むそれ以外の呼び出し元には403が返されます。",
        "operationId": "reject_case_resolution",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "reject_resolution",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "notes": {
                    "type": "string",
                    "nullable": true
                  }
                }
              },
              "example": {
                "notes": "Needs a clearer rationale before this can be approved."
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/reject-approval/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"notes\": \"Needs a clearer rationale before this can be approved.\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.reject_resolution(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    notes=\"Needs a clearer rationale before this can be approved.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.rejectResolution(\"c1a5e000-0000-4000-8000-000000000001\", {\n  notes: \"Needs a clearer rationale before this can be approved.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RejectResolution(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesRejectResolutionParams{\n\tNotes: didit.String(\"Needs a clearer rationale before this can be approved.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesRejectResolutionParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().rejectResolution(\"c1a5e000-0000-4000-8000-000000000001\", CasesRejectResolutionParams.builder()\n        .notes(\"Needs a clearer rationale before this can be approved.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->rejectResolution('c1a5e000-0000-4000-8000-000000000001', [\n    'notes' => 'Needs a clearer rationale before this can be approved.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.reject_resolution(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  notes: \"Needs a clearer rationale before this can be approved.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RejectResolutionAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesRejectResolutionParams\n{\n    Notes = \"Needs a clearer rationale before this can be approved.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "解決内容が却下され、ケースはメーカーのブループリントに戻されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDetail"
                }
              }
            }
          },
          "409": {
            "description": "ケースに承認待ちの解決がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "呼び出し元はこの解決内容を却下できません。呼び出し元自身が提出した、ケースに作成者が記録されていない、または解決内容で別の承認者が指定されています。承認者が指定されている場合、APIキーには常にこの403が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Caller submitted the resolution": {
                    "value": {
                      "detail": "The officer who submitted the resolution cannot reject it."
                    }
                  },
                  "No recorded maker": {
                    "value": {
                      "detail": "Case has no recorded maker for this pending resolution; reject is not permitted."
                    }
                  },
                  "Caller is not the named checker": {
                    "value": {
                      "detail": "Only the named checker can reject this resolution."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/entity-actions/": {
      "post": {
        "operationId": "apply_case_entity_action",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "apply_entity_action",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CaseActionCaseEntityActionRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseActionCaseEntityActionRequest"
              },
              "example": {
                "client_reference": "e1a00000-0000-4000-8000-000000000001",
                "action": "add_tags",
                "tags": [
                  "source-of-funds-reviewed"
                ]
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CaseActionCaseEntityActionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseActionCaseEntityActionResult"
                }
              }
            },
            "description": ""
          },
          "409": {
            "description": "この参照は別のアクションペイロードに属しています。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "ケースの対象者に明示的なアクションを1つ適用します。一意のclient_referenceを指定すると、アクションの受領記録（receipt）を取得でき、再試行が冪等になります。同じ参照を異なるペイロードで再利用すると409が返されます。参照を指定した場合は、HTTPステータスが200であってもreceipt.statusを確認してください。FAILEDはアクションが適用されなかったことを意味します。失敗したリクエストを繰り返しても、retryがtrueでない限り再実行されません。client_referenceを省略すると従来のレスポンスが返されます。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.apply_entity_action(\n    \"11111111-2222-3333-4444-555555555555\",\n    client_reference=\"e1a00000-0000-4000-8000-000000000001\",\n    action=\"add_tags\",\n    tags=[\"source-of-funds-reviewed\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.applyEntityAction(\"11111111-2222-3333-4444-555555555555\", {\n  client_reference: \"e1a00000-0000-4000-8000-000000000001\",\n  action: \"add_tags\",\n  tags: [\"source-of-funds-reviewed\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.ApplyEntityAction(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CaseActionCaseEntityActionRequest{\n\tClientReference: didit.String(\"e1a00000-0000-4000-8000-000000000001\"),\n\tAction:          didit.CaseActionActionEnum(\"add_tags\"),\n\tTags:            didit.Some([]string{\"source-of-funds-reviewed\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CaseActionActionEnum;\nimport me.didit.types.CaseActionCaseEntityActionRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().applyEntityAction(\"11111111-2222-3333-4444-555555555555\", CaseActionCaseEntityActionRequest.builder()\n        .clientReference(\"e1a00000-0000-4000-8000-000000000001\")\n        .action(CaseActionActionEnum.of(\"add_tags\"))\n        .tags(List.of(\"source-of-funds-reviewed\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->applyEntityAction('11111111-2222-3333-4444-555555555555', [\n    'client_reference' => 'e1a00000-0000-4000-8000-000000000001',\n    'action' => 'add_tags',\n    'tags' => ['source-of-funds-reviewed'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.apply_entity_action(\n  \"11111111-2222-3333-4444-555555555555\",\n  client_reference: \"e1a00000-0000-4000-8000-000000000001\",\n  action: \"add_tags\",\n  tags: [\"source-of-funds-reviewed\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ApplyEntityActionAsync(\"11111111-2222-3333-4444-555555555555\", new CaseActionCaseEntityActionRequest\n{\n    ClientReference = \"e1a00000-0000-4000-8000-000000000001\",\n    Action = \"add_tags\",\n    Tags = new string[] { \"source-of-funds-reviewed\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/print/": {
      "get": {
        "summary": "ケースを印刷(PDF)",
        "description": "ケース全体(概要、対象者、チェックリストの状態、メモ、添付されたセッション/取引、イベント、FIUレポート一覧)をPDFとしてレンダリングし、署名付きダウンロードURLを返します。",
        "operationId": "print_case",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "print",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/print/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.print(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.print(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Print(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().print(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->print('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.print(\"c1a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.PrintAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "署名付きPDF URL。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/notes/": {
      "get": {
        "operationId": "list_case_notes",
        "x-didit-sdk": {
          "resource": "cases.notes",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "結果の並べ替えに使用するフィールド。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "description": "1ページあたりに返す結果の件数です。",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "description": "結果を返す開始インデックスです。",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseCollaborationPaginatedCaseNoteList"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "404": {
            "description": "この呼び出し元はケースまたはメモを利用できません。"
          }
        },
        "tags": [
          "Case Management"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.notes.list(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.notes.list(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.Notes.ListAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasesNotesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().notes().list(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->notes->list('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.notes.list(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.Notes.ListAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "operationId": "create_case_note",
        "x-didit-sdk": {
          "resource": "cases.notes",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CaseCollaborationCaseNoteCreateRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseCollaborationCaseNoteCreateRequest"
              },
              "example": {
                "comment": "Proof of address matches the ID document."
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CaseCollaborationCaseNoteCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseCollaborationCaseNote"
                }
              }
            },
            "description": ""
          },
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseCollaborationCaseNote"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "404": {
            "description": "この呼び出し元はケースまたはメモを利用できません。"
          },
          "409": {
            "description": "このクライアント参照は、別のノート、または削除済みのノートですでに使用されています。"
          }
        },
        "tags": [
          "Case Management"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "ケースに紐づくメモを追加します。任意のclient_referenceを指定すると、内容を変えずに再試行した場合に同じメモが返され、アクティビティや通知が重複しません。reply_toには、このケース内の有効なメモを指定する必要があります。レスポンスには長さに上限のある親メモの抜粋が含まれますが、その抜粋は保存される返信にはコピーされません。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.notes.create(\n    \"11111111-2222-3333-4444-555555555555\",\n    comment=\"Proof of address matches the ID document.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.notes.create(\"11111111-2222-3333-4444-555555555555\", {\n  comment: \"Proof of address matches the ID document.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Notes.Create(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CaseCollaborationCaseNoteCreateRequest{\n\tComment: \"Proof of address matches the ID document.\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CaseCollaborationCaseNoteCreateRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().notes().create(\"11111111-2222-3333-4444-555555555555\", CaseCollaborationCaseNoteCreateRequest.builder()\n        .comment(\"Proof of address matches the ID document.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->notes->create('11111111-2222-3333-4444-555555555555', [\n    'comment' => 'Proof of address matches the ID document.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.notes.create(\n  \"11111111-2222-3333-4444-555555555555\",\n  comment: \"Proof of address matches the ID document.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Notes.CreateAsync(\"11111111-2222-3333-4444-555555555555\", new CaseCollaborationCaseNoteCreateRequest\n{\n    Comment = \"Proof of address matches the ID document.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/notes/{note_uuid}/": {
      "patch": {
        "operationId": "root_partial_update",
        "x-didit-sdk": {
          "resource": "cases.notes",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "note_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CaseCollaborationPatchedCaseNoteUpdateRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseCollaborationPatchedCaseNoteUpdateRequest"
              },
              "example": {
                "is_pinned": true
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CaseCollaborationPatchedCaseNoteUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseCollaborationCaseNote"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "404": {
            "description": "この呼び出し元はケースまたはメモを利用できません。"
          }
        },
        "tags": [
          "Case Management"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "既存のメモをピン留めまたはピン留め解除します。ピン留めされたメモが最初に表示されます。ピン留めの変更はケースのアクティビティに記録され、証拠やソースの判定は変更されません。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.notes.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n    is_pinned=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.notes.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n  {\n    is_pinned: true,\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Notes.Update(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\", didit.CaseCollaborationPatchedCaseNoteUpdateRequest{\n\tIsPinned: didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CaseCollaborationPatchedCaseNoteUpdateRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().notes().update(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\", CaseCollaborationPatchedCaseNoteUpdateRequest.builder()\n        .isPinned(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->notes->update('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555', [\n    'is_pinned' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.notes.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n  is_pinned: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Notes.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\", new CaseCollaborationPatchedCaseNoteUpdateRequest\n{\n    IsPinned = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "operationId": "delete_case_note",
        "x-didit-sdk": {
          "resource": "cases.notes",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "note_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "メモは完全に削除されます。返信は残りますが、削除された親メモの抜粋は含まれなくなります。添付ファイルは、他のメモで引き続き使用されていない限り削除されます。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "404": {
            "description": "この呼び出し元はケースまたはメモを利用できません。"
          }
        },
        "tags": [
          "Case Management"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.cases.notes.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.cases.notes.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.Cases.Notes.Delete(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().notes().delete(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->cases->notes->delete('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.notes.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\"\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Cases.Notes.DeleteAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/notes/presign/": {
      "post": {
        "summary": "メモの添付ファイルをアップロード",
        "description": "メモに添付するファイル(JPEG、PNG、WebP、PDF、プレーンテキスト、CSV、最大5MB)をアップロードします。メモのattachments配列に渡すs3_keyを返します。",
        "operationId": "upload_case_note_attachment",
        "x-didit-sdk": {
          "resource": "cases.notes",
          "method": "create_attachment_upload",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/notes/presign/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'file=@evidence.pdf'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.notes.create_attachment_upload(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    file=open(\"document.pdf\", \"rb\"),\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.notes.createAttachmentUpload(\"c1a5e000-0000-4000-8000-000000000001\", {\n  file: await fileFromPath(\"document.pdf\"),\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Notes.CreateAttachmentUpload(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesNotesCreateAttachmentUploadParams{\n\tFile: didit.FileFromPath(\"document.pdf\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.types.CasesNotesCreateAttachmentUploadParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().notes().createAttachmentUpload(\"c1a5e000-0000-4000-8000-000000000001\", CasesNotesCreateAttachmentUploadParams.builder()\n        .file(Path.of(\"document.pdf\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->notes->createAttachmentUpload('c1a5e000-0000-4000-8000-000000000001', [\n    'file' => File::fromPath('document.pdf'),\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.notes.create_attachment_upload(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  file: Pathname(\"document.pdf\")\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Notes.CreateAttachmentUploadAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesNotesCreateAttachmentUploadParams\n{\n    File = FileUpload.FromPath(\"document.pdf\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "ファイルがアップロードされました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "s3_key": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "filename": {
                      "type": "string"
                    },
                    "file_size": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ファイルがない、コンテンツタイプがサポートされていない、またはファイルが5MBを超えています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "get": {
        "summary": "メモ添付ファイルのURLを取得",
        "description": "ケースのいずれかのメモにすでに保存されている添付ファイルについて、新しい署名付きダウンロードURLを発行します。",
        "operationId": "get_case_note_attachment_url",
        "x-didit-sdk": {
          "resource": "cases.notes",
          "method": "retrieve_attachment_url",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          },
          {
            "name": "s3_key",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "添付ファイルのs3_key。アップロード時に返されるもの、またはノートに一覧表示されているもの。",
            "required": true
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/notes/presign/?s3_key=case-notes/c1a5e000-0000-4000-8000-000000000001/evidence.pdf' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.notes.retrieve_attachment_url(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    s3_key=\"your-s3-key\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.notes.retrieveAttachmentUrl(\"c1a5e000-0000-4000-8000-000000000001\", {\n  s3_key: \"your-s3-key\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Notes.RetrieveAttachmentURL(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesNotesRetrieveAttachmentURLParams{\n\tS3Key: \"your-s3-key\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesNotesRetrieveAttachmentUrlParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().notes().retrieveAttachmentUrl(\"c1a5e000-0000-4000-8000-000000000001\", CasesNotesRetrieveAttachmentUrlParams.builder()\n        .s3Key(\"your-s3-key\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->notes->retrieveAttachmentUrl('c1a5e000-0000-4000-8000-000000000001', [\n    's3_key' => 'your-s3-key',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.notes.retrieve_attachment_url(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  s3_key: \"your-s3-key\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Notes.RetrieveAttachmentUrlAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesNotesRetrieveAttachmentUrlParams\n{\n    S3Key = \"your-s3-key\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "署名付きURL。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "s3_key": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "filename": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "s3_keyがない、またはこのケースに属していません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/links/": {
      "get": {
        "summary": "ケースのリンク一覧を取得",
        "description": "ケースに紐付けられたセッション、企業セッション、取引を一覧表示します。",
        "operationId": "list_case_links",
        "x-didit-sdk": {
          "resource": "cases.links",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/links/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.links.list(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.links.list(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Links.List(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().links().list(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->links->list('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.links.list(\"c1a5e000-0000-4000-8000-000000000001\").each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Links.ListAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースのリンク。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CaseLink"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "ケースリンクを追加",
        "description": "セッション、企業セッション、または取引をケースに添付します。エンティティがケースとは異なる対象者に属している場合は400で拒否されます。",
        "operationId": "create_case_link",
        "x-didit-sdk": {
          "resource": "cases.links",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "entity_type",
                  "entity_uuid"
                ],
                "properties": {
                  "entity_type": {
                    "type": "string",
                    "enum": [
                      "session",
                      "business_session",
                      "transaction"
                    ]
                  },
                  "entity_uuid": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              },
              "example": {
                "entity_type": "transaction",
                "entity_uuid": "77000000-0000-4000-8000-000000000077"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/links/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"entity_type\": \"transaction\", \"entity_uuid\": \"77000000-0000-4000-8000-000000000077\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.links.create(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    entity_type=\"transaction\",\n    entity_uuid=\"77000000-0000-4000-8000-000000000077\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.links.create(\"c1a5e000-0000-4000-8000-000000000001\", {\n  entity_type: \"transaction\",\n  entity_uuid: \"77000000-0000-4000-8000-000000000077\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Links.Create(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesLinksCreateParams{\n\tEntityType: \"transaction\",\n\tEntityUUID: \"77000000-0000-4000-8000-000000000077\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesLinksCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().links().create(\"c1a5e000-0000-4000-8000-000000000001\", CasesLinksCreateParams.builder()\n        .entityType(CasesLinksCreateParams.EntityType.of(\"transaction\"))\n        .entityUuid(\"77000000-0000-4000-8000-000000000077\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->links->create('c1a5e000-0000-4000-8000-000000000001', [\n    'entity_type' => 'transaction',\n    'entity_uuid' => '77000000-0000-4000-8000-000000000077',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.links.create(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  entity_type: \"transaction\",\n  entity_uuid: \"77000000-0000-4000-8000-000000000077\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Links.CreateAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesLinksCreateParams\n{\n    EntityType = \"transaction\",\n    EntityUuid = \"77000000-0000-4000-8000-000000000077\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "リンクが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseLink"
                }
              }
            }
          },
          "400": {
            "description": "エンティティがケースの対象者とは異なるプロファイルに属しています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/links/{link_uuid}/": {
      "delete": {
        "summary": "ケースリンクを削除する",
        "description": "リンクされたセッション、企業セッション、または取引をケースから切り離します。",
        "operationId": "delete_case_link",
        "x-didit-sdk": {
          "resource": "cases.links",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          },
          {
            "name": "link_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11000000-0000-4000-8000-000000000004"
            },
            "description": "リンクのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/links/11000000-0000-4000-8000-000000000004/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.cases.links.delete(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    \"11000000-0000-4000-8000-000000000004\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.cases.links.delete(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  \"11000000-0000-4000-8000-000000000004\",\n);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.Cases.Links.Delete(ctx, \"c1a5e000-0000-4000-8000-000000000001\", \"11000000-0000-4000-8000-000000000004\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().links().delete(\"c1a5e000-0000-4000-8000-000000000001\", \"11000000-0000-4000-8000-000000000004\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->cases->links->delete('c1a5e000-0000-4000-8000-000000000001', '11000000-0000-4000-8000-000000000004');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.links.delete(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  \"11000000-0000-4000-8000-000000000004\"\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Cases.Links.DeleteAsync(\"c1a5e000-0000-4000-8000-000000000001\", \"11000000-0000-4000-8000-000000000004\");"
          }
        ],
        "responses": {
          "204": {
            "description": "リンクが削除されました。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/events/": {
      "get": {
        "summary": "ケースイベント一覧を取得",
        "description": "ケースの読み取り専用の監査タイムラインです(作成、ステータス変更、割り当て、解決、エスカレーション、移管、タグ・優先度・期日の変更、エンティティに対するアクションなど)。",
        "operationId": "list_case_events",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "list_events",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "0始まりのオフセットです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/events/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.list_events(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.listEvents(\"c1a5e000-0000-4000-8000-000000000001\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.ListEventsAutoPaging(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesListEventsParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().listEvents(\"c1a5e000-0000-4000-8000-000000000001\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->listEvents('c1a5e000-0000-4000-8000-000000000001') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.list_events(\"c1a5e000-0000-4000-8000-000000000001\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.ListEventsAsync(\"c1a5e000-0000-4000-8000-000000000001\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされたイベント（新しい順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "一致する行の数。100までは正確な値で、パフォーマンスのため100を超える場合は100が上限となります。最終ページの判定には`next`がnullであることを利用してください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true,
                      "description": "次のページの絶対URL、またはnull。"
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true,
                      "description": "前のページの絶対URL、またはnull。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CaseEvent"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/checklist/": {
      "get": {
        "summary": "ケースのチェックリストを取得",
        "description": "ケースのチェックリスト項目を順番に一覧表示します。これらの項目は、作成時にブループリントのcontent_config.checklist.itemsからコピーされたものです。",
        "operationId": "list_case_checklist",
        "x-didit-sdk": {
          "resource": "cases.checklist",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/checklist/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.checklist.list(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.checklist.list(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Checklist.List(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().checklist().list(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->checklist->list('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.checklist.list(\"c1a5e000-0000-4000-8000-000000000001\").each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Checklist.ListAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "チェックリスト項目。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CaseChecklistItem"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/checklist/{item_uuid}/": {
      "patch": {
        "summary": "チェックリスト項目を切り替える",
        "description": "チェックリスト項目を完了または未完了としてマークします。未完了の項目が残っている間は解決できません。ただし、ブループリントでチェックリストが任意に設定されている場合は除きます。",
        "operationId": "toggle_case_checklist_item",
        "x-didit-sdk": {
          "resource": "cases.checklist",
          "method": "toggle_item",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          },
          {
            "name": "item_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c4ec0000-0000-4000-8000-000000000005"
            },
            "description": "チェックリスト項目のUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "is_completed"
                ],
                "properties": {
                  "is_completed": {
                    "type": "boolean"
                  }
                }
              },
              "example": {
                "is_completed": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/checklist/c4ec0000-0000-4000-8000-000000000005/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"is_completed\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.checklist.toggle_item(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    \"c4ec0000-0000-4000-8000-000000000005\",\n    is_completed=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.checklist.toggleItem(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  \"c4ec0000-0000-4000-8000-000000000005\",\n  {\n    is_completed: true,\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Checklist.ToggleItem(ctx, \"c1a5e000-0000-4000-8000-000000000001\", \"c4ec0000-0000-4000-8000-000000000005\", didit.CasesChecklistToggleItemParams{\n\tIsCompleted: true,\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesChecklistToggleItemParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().checklist().toggleItem(\"c1a5e000-0000-4000-8000-000000000001\", \"c4ec0000-0000-4000-8000-000000000005\", CasesChecklistToggleItemParams.builder()\n        .isCompleted(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->checklist->toggleItem('c1a5e000-0000-4000-8000-000000000001', 'c4ec0000-0000-4000-8000-000000000005', [\n    'is_completed' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.checklist.toggle_item(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  \"c4ec0000-0000-4000-8000-000000000005\",\n  is_completed: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Checklist.ToggleItemAsync(\"c1a5e000-0000-4000-8000-000000000001\", \"c4ec0000-0000-4000-8000-000000000005\", new CasesChecklistToggleItemParams\n{\n    IsCompleted = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後のチェックリスト項目。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseChecklistItem"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/aml/": {
      "get": {
        "summary": "ケースのAMLヒット一覧を取得",
        "description": "ケースの対象者に対するAMLスクリーニングのヒットを一覧表示します。POST /v3/aml/が返すヒットと同じ形式です。",
        "operationId": "list_case_aml_hits",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "list_aml_hits",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/aml/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.list_aml_hits(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.listAmlHits(\"c1a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.ListAMLHits(ctx, \"c1a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().listAmlHits(\"c1a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->listAmlHits('c1a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.list_aml_hits(\"c1a5e000-0000-4000-8000-000000000001\").each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ListAmlHitsAsync(\"c1a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "AMLヒット。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AMLScreening"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/statistics/": {
      "get": {
        "summary": "ケース分析",
        "description": "指定期間のケース分析の集計です（デフォルトは直近30日、最大731日）。グラフ、テーブル、合計、割り当てイベント、現在のキュー件数には、同じアプリケーション単位のフィルターが適用されます。フィルターはケースの現在の値を使用します。日付は各指標のイベントに適用されるため、期間中に割り当てまたは解決された古いケースも含まれます。キューの深さは期間に依存しません。無効なフィルターは400を返し、不明なブループリントまたは担当者の場合は空の結果が返されます。",
        "operationId": "get_case_analytics",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "retrieve_statistics",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "date_from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "範囲の開始日（この日を含む）。デフォルトは30日前です。"
          },
          {
            "name": "date_to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "範囲の終了日（この日を含む）。デフォルトは今日です。"
          },
          {
            "name": "blueprint",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "現在のブループリントUUIDで絞り込みます。"
          },
          {
            "name": "assigned_to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "現在割り当てられているレビュアーのユーザーUUIDで絞り込みます。"
          },
          {
            "name": "priority",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "LOW",
                "MEDIUM",
                "HIGH"
              ]
            },
            "description": "現在のケースの優先度で絞り込みます。"
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "MANUAL",
                "AML_SCREENING",
                "TRANSACTION_RULE",
                "WORKFLOW_BUILDER"
              ]
            },
            "description": "ケースの作成元で絞り込みます。"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "OPEN",
                "AWAITING_USER",
                "RESOLVED"
              ]
            },
            "description": "現在のケースのステータスで絞り込みます。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/statistics/?date_from=2026-06-01&date_to=2026-06-30' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.retrieve_statistics()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.retrieveStatistics();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RetrieveStatistics(ctx, didit.CasesRetrieveStatisticsParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().retrieveStatistics();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->retrieveStatistics();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.retrieve_statistics\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RetrieveStatisticsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "分析用ペイロード。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "series": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "format": "date"
                          },
                          "created": {
                            "type": "integer"
                          },
                          "reviewed": {
                            "type": "integer"
                          }
                        }
                      }
                    },
                    "tables": {
                      "type": "object",
                      "properties": {
                        "officer": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "description": "ディメンションの値：担当者のメールアドレス、\"blueprint_name:uuid\"、ソース、またはステータスです。ディメンションがない場合は\"unassigned\"/\"none\"となります。"
                              },
                              "created": {
                                "type": "integer"
                              },
                              "assigned": {
                                "type": "integer"
                              },
                              "resolved": {
                                "type": "integer"
                              },
                              "threat_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "false_positive_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "unresolved": {
                                "type": "integer"
                              },
                              "reassignment_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "escalation_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_assign_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_resolve_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_handling_hours": {
                                "type": "number",
                                "format": "float"
                              }
                            }
                          }
                        },
                        "blueprint": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "description": "ディメンションの値：担当者のメールアドレス、\"blueprint_name:uuid\"、ソース、またはステータスです。ディメンションがない場合は\"unassigned\"/\"none\"となります。"
                              },
                              "created": {
                                "type": "integer"
                              },
                              "assigned": {
                                "type": "integer"
                              },
                              "resolved": {
                                "type": "integer"
                              },
                              "threat_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "false_positive_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "unresolved": {
                                "type": "integer"
                              },
                              "reassignment_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "escalation_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_assign_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_resolve_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_handling_hours": {
                                "type": "number",
                                "format": "float"
                              }
                            }
                          }
                        },
                        "source": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "description": "ディメンションの値：担当者のメールアドレス、\"blueprint_name:uuid\"、ソース、またはステータスです。ディメンションがない場合は\"unassigned\"/\"none\"となります。"
                              },
                              "created": {
                                "type": "integer"
                              },
                              "assigned": {
                                "type": "integer"
                              },
                              "resolved": {
                                "type": "integer"
                              },
                              "threat_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "false_positive_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "unresolved": {
                                "type": "integer"
                              },
                              "reassignment_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "escalation_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_assign_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_resolve_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_handling_hours": {
                                "type": "number",
                                "format": "float"
                              }
                            }
                          }
                        },
                        "status": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "description": "ディメンションの値：担当者のメールアドレス、\"blueprint_name:uuid\"、ソース、またはステータスです。ディメンションがない場合は\"unassigned\"/\"none\"となります。"
                              },
                              "created": {
                                "type": "integer"
                              },
                              "assigned": {
                                "type": "integer"
                              },
                              "resolved": {
                                "type": "integer"
                              },
                              "threat_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "false_positive_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "unresolved": {
                                "type": "integer"
                              },
                              "reassignment_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "escalation_rate": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_assign_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_resolve_hours": {
                                "type": "number",
                                "format": "float"
                              },
                              "avg_handling_hours": {
                                "type": "number",
                                "format": "float"
                              }
                            }
                          }
                        }
                      }
                    },
                    "totals": {
                      "type": "object",
                      "properties": {
                        "created": {
                          "type": "integer"
                        },
                        "assigned": {
                          "type": "integer"
                        },
                        "resolved": {
                          "type": "integer"
                        },
                        "threat_rate": {
                          "type": "number",
                          "format": "float"
                        },
                        "false_positive_rate": {
                          "type": "number",
                          "format": "float"
                        },
                        "unresolved": {
                          "type": "integer"
                        },
                        "reassignment_rate": {
                          "type": "number",
                          "format": "float"
                        },
                        "escalation_rate": {
                          "type": "number",
                          "format": "float"
                        },
                        "avg_assign_hours": {
                          "type": "number",
                          "format": "float"
                        },
                        "avg_resolve_hours": {
                          "type": "number",
                          "format": "float"
                        },
                        "avg_handling_hours": {
                          "type": "number",
                          "format": "float"
                        }
                      }
                    },
                    "queue": {
                      "type": "object",
                      "description": "現時点のスナップショットで、期間の範囲には限定されません。",
                      "properties": {
                        "open": {
                          "type": "integer"
                        },
                        "overdue": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/bulk/status/": {
      "post": {
        "summary": "ケースのステータスを一括更新",
        "description": "1回の呼び出しで複数のケースに同じステータス遷移を適用します。OPENは再オープン、AWAITING_USERは情報の要求、RESOLVEDは解決（resolutionが必須）です。各ケースは個別に評価され、ゲートの失敗（未完了のチェックリスト、必須メモの欠落）はバッチを中断せずケースごとに報告されます。",
        "operationId": "bulk_update_case_status",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "bulk_update_status",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "case_uuids",
                  "status"
                ],
                "properties": {
                  "case_uuids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "minItems": 1
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "OPEN",
                      "AWAITING_USER",
                      "RESOLVED"
                    ]
                  },
                  "resolution": {
                    "type": "string",
                    "enum": [
                      "FALSE_POSITIVE",
                      "VALID_THREAT",
                      "INCONCLUSIVE",
                      "REQUIREMENTS_NOT_MET",
                      "REQUIREMENTS_SATISFIED"
                    ],
                    "description": "statusがRESOLVEDの場合は必須です。"
                  },
                  "note": {
                    "type": "string",
                    "nullable": true
                  }
                }
              },
              "example": {
                "case_uuids": [
                  "c1a5e000-0000-4000-8000-000000000001"
                ],
                "status": "RESOLVED",
                "resolution": "FALSE_POSITIVE"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/bulk/status/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"case_uuids\": [\"c1a5e000-0000-4000-8000-000000000001\"], \"status\": \"RESOLVED\", \"resolution\": \"FALSE_POSITIVE\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.bulk_update_status(\n    case_uuids=[\"c1a5e000-0000-4000-8000-000000000001\"],\n    status=\"RESOLVED\",\n    resolution=\"FALSE_POSITIVE\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.bulkUpdateStatus({\n  case_uuids: [\"c1a5e000-0000-4000-8000-000000000001\"],\n  status: \"RESOLVED\",\n  resolution: \"FALSE_POSITIVE\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.BulkUpdateStatus(ctx, didit.CasesBulkUpdateStatusParams{\n\tCaseUUIDs:  []string{\"c1a5e000-0000-4000-8000-000000000001\"},\n\tStatus:     \"RESOLVED\",\n\tResolution: didit.Some(didit.CasesBulkUpdateStatusParamsResolution(\"FALSE_POSITIVE\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CasesBulkUpdateStatusParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().bulkUpdateStatus(CasesBulkUpdateStatusParams.builder()\n        .caseUuids(List.of(\"c1a5e000-0000-4000-8000-000000000001\"))\n        .status(CasesBulkUpdateStatusParams.Status.of(\"RESOLVED\"))\n        .resolution(CasesBulkUpdateStatusParams.Resolution.of(\"FALSE_POSITIVE\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->bulkUpdateStatus([\n    'case_uuids' => ['c1a5e000-0000-4000-8000-000000000001'],\n    'status' => 'RESOLVED',\n    'resolution' => 'FALSE_POSITIVE',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.bulk_update_status(\n  case_uuids: [\"c1a5e000-0000-4000-8000-000000000001\"],\n  status: \"RESOLVED\",\n  resolution: \"FALSE_POSITIVE\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.BulkUpdateStatusAsync(new CasesBulkUpdateStatusParams\n{\n    CaseUuids = new string[] { \"c1a5e000-0000-4000-8000-000000000001\" },\n    Status = \"RESOLVED\",\n    Resolution = new CasesBulkUpdateStatusParamsResolution(\"FALSE_POSITIVE\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースごとの結果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBulkUpdateResult"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/bulk/assign/": {
      "post": {
        "summary": "ケースを一括で割り当て",
        "description": "複数のケースを一括で割り当てます(assignee_user_id: nullを指定すると割り当てを解除します)。すべてのケースが同じブループリントを共有している必要があります。不一致はバッチを中断せず、ケースごとに報告されます。",
        "operationId": "bulk_assign_cases",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "bulk_assign",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Cases"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "case_uuids",
                  "assignee_user_id"
                ],
                "properties": {
                  "case_uuids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "minItems": 1
                  },
                  "assignee_user_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true
                  },
                  "assignee_email": {
                    "type": "string",
                    "format": "email",
                    "nullable": true
                  },
                  "assignee_name": {
                    "type": "string",
                    "nullable": true
                  }
                }
              },
              "example": {
                "case_uuids": [
                  "c1a5e000-0000-4000-8000-000000000001"
                ],
                "assignee_user_id": "9a000000-0000-4000-8000-0000000000aa"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/bulk/assign/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"case_uuids\": [\"c1a5e000-0000-4000-8000-000000000001\"], \"assignee_user_id\": \"9a000000-0000-4000-8000-0000000000aa\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.bulk_assign(\n    case_uuids=[\"c1a5e000-0000-4000-8000-000000000001\"],\n    assignee_user_id=\"9a000000-0000-4000-8000-0000000000aa\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.bulkAssign({\n  case_uuids: [\"c1a5e000-0000-4000-8000-000000000001\"],\n  assignee_user_id: \"9a000000-0000-4000-8000-0000000000aa\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.BulkAssign(ctx, didit.CasesBulkAssignParams{\n\tCaseUUIDs:      []string{\"c1a5e000-0000-4000-8000-000000000001\"},\n\tAssigneeUserID: didit.String(\"9a000000-0000-4000-8000-0000000000aa\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CasesBulkAssignParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().bulkAssign(CasesBulkAssignParams.builder()\n        .caseUuids(List.of(\"c1a5e000-0000-4000-8000-000000000001\"))\n        .assigneeUserId(\"9a000000-0000-4000-8000-0000000000aa\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->bulkAssign([\n    'case_uuids' => ['c1a5e000-0000-4000-8000-000000000001'],\n    'assignee_user_id' => '9a000000-0000-4000-8000-0000000000aa',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.bulk_assign(\n  case_uuids: [\"c1a5e000-0000-4000-8000-000000000001\"],\n  assignee_user_id: \"9a000000-0000-4000-8000-0000000000aa\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.BulkAssignAsync(new CasesBulkAssignParams\n{\n    CaseUuids = new string[] { \"c1a5e000-0000-4000-8000-000000000001\" },\n    AssigneeUserId = \"9a000000-0000-4000-8000-0000000000aa\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ケースごとの結果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBulkUpdateResult"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/": {
      "get": {
        "summary": "ブループリント一覧を取得",
        "description": "アプリケーションのケースブループリントを一覧表示します。",
        "operationId": "list_case_blueprints",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "0始まりのオフセットです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.blueprints.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.blueprints.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.Blueprints.ListAutoPaging(ctx, didit.CasesBlueprintsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().blueprints().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->blueprints->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.blueprints.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.Blueprints.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされたブループリント一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "一致する行の数（パフォーマンスのため上限は100）。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CaseBlueprintListItem"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "ブループリントを作成",
        "description": "ケースブループリントを作成します。一般設定（割り当て、エスカレーション、移管、4-eyesペアリング）と、ケースページを構成する6つのセクションであるcontent_configを含みます。publish=falseを設定すると未公開の下書きが作成されます。公開すると最初の公開バージョンが作成されます。一度も公開されていない下書きを破棄すると、その下書きは削除されます。",
        "operationId": "create_case_blueprint",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "assignee_pool"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 24,
                    "description": "最大24文字。例: \"AML調査\"。"
                  },
                  "description": {
                    "type": "string",
                    "nullable": true
                  },
                  "assignee_pool": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "minItems": 1,
                    "description": "ユーザーUUIDのリストです。空の配列は「Pick at least one assignee」というエラーで拒否されます。"
                  },
                  "assignment_method": {
                    "type": "string",
                    "enum": [
                      "MANUAL",
                      "AUTOMATIC"
                    ],
                    "default": "MANUAL"
                  },
                  "max_active_cases": {
                    "type": "integer",
                    "nullable": true,
                    "minimum": 1,
                    "description": "自動モードのしきい値：「このブループリントのケースの割り当てがN件未満」。"
                  },
                  "escalation_enabled": {
                    "type": "boolean",
                    "default": false
                  },
                  "escalation_blueprint": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "対象のブループリントUUID。保存時には検証されませんが、escalation_enabledとescalation_blueprintの両方が設定されるまで、エスカレーションアクションは400で失敗します。"
                  },
                  "transfer_enabled": {
                    "type": "boolean",
                    "default": false
                  },
                  "four_eyes_checker_blueprint": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "これを設定すると4-eyesレビューが有効になります。このブループリントでの解決は、チェッカーブループリントのキューにステージングされます。"
                  },
                  "require_resolution_note": {
                    "type": "boolean",
                    "default": false
                  },
                  "content_config": {
                    "$ref": "#/components/schemas/CaseContentConfig"
                  },
                  "is_active": {
                    "type": "boolean",
                    "default": true
                  },
                  "default_deadline_hours": {
                    "type": "integer",
                    "nullable": true,
                    "minimum": 1,
                    "maximum": 8760,
                    "description": "新たにオープンされたケースのデフォルトの期限。既存のケースの期限は変更されません。"
                  },
                  "publish": {
                    "type": "boolean",
                    "writeOnly": true,
                    "default": true,
                    "description": "falseに設定すると、一度も公開されていない下書きとして保存します。下書きが明示的に公開されるまで、レコードはバージョン0のまま非アクティブです。このフィールドを省略すると、既存の連携に向けて即時作成の動作が維持されます。"
                  }
                }
              },
              "example": {
                "name": "AML investigation",
                "assignee_pool": [
                  "9a000000-0000-4000-8000-0000000000aa"
                ],
                "assignment_method": "AUTOMATIC",
                "max_active_cases": 15,
                "require_resolution_note": true,
                "content_config": {
                  "aml_control": {
                    "enabled": true,
                    "financial": true,
                    "identity": false
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"name\": \"AML investigation\", \"assignee_pool\": [\"9a000000-0000-4000-8000-0000000000aa\"], \"assignment_method\": \"AUTOMATIC\", \"max_active_cases\": 15, \"require_resolution_note\": true, \"content_config\": {\"aml_control\": {\"enabled\": true, \"financial\": true, \"identity\": false}}}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.create(\n    name=\"AML investigation\",\n    assignee_pool=[\"9a000000-0000-4000-8000-0000000000aa\"],\n    assignment_method=\"AUTOMATIC\",\n    max_active_cases=15,\n    require_resolution_note=True,\n    content_config={\n        \"aml_control\": {\n            \"enabled\": True,\n            \"financial\": True,\n            \"identity\": False,\n        },\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.create({\n  name: \"AML investigation\",\n  assignee_pool: [\"9a000000-0000-4000-8000-0000000000aa\"],\n  assignment_method: \"AUTOMATIC\",\n  max_active_cases: 15,\n  require_resolution_note: true,\n  content_config: {\n    aml_control: {\n      enabled: true,\n      financial: true,\n      identity: false,\n    },\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.Create(ctx, didit.CasesBlueprintsCreateParams{\n\tName:                  \"AML investigation\",\n\tAssigneePool:          []string{\"9a000000-0000-4000-8000-0000000000aa\"},\n\tAssignmentMethod:      didit.Some(didit.CasesBlueprintsCreateParamsAssignmentMethod(\"AUTOMATIC\")),\n\tMaxActiveCases:        didit.Int(15),\n\tRequireResolutionNote: didit.Bool(true),\n\tContentConfig: didit.Some(didit.CaseContentConfigParam{\n\t\tAMLControl: didit.Some(didit.CaseContentConfigParamAMLControl{\n\t\t\tEnabled:   didit.Bool(true),\n\t\t\tFinancial: didit.Bool(true),\n\t\t\tIdentity:  didit.Bool(false),\n\t\t}),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CaseContentConfig;\nimport me.didit.types.CasesBlueprintsCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().create(CasesBlueprintsCreateParams.builder()\n        .name(\"AML investigation\")\n        .assigneePool(List.of(\"9a000000-0000-4000-8000-0000000000aa\"))\n        .assignmentMethod(CasesBlueprintsCreateParams.AssignmentMethod.of(\"AUTOMATIC\"))\n        .maxActiveCases(15L)\n        .requireResolutionNote(true)\n        .contentConfig(CaseContentConfig.builder()\n                .amlControl(CaseContentConfig.AmlControl.builder()\n                        .enabled(true)\n                        .financial(true)\n                        .identity(false)\n                        .build())\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->create([\n    'name' => 'AML investigation',\n    'assignee_pool' => ['9a000000-0000-4000-8000-0000000000aa'],\n    'assignment_method' => 'AUTOMATIC',\n    'max_active_cases' => 15,\n    'require_resolution_note' => true,\n    'content_config' => [\n        'aml_control' => [\n            'enabled' => true,\n            'financial' => true,\n            'identity' => false,\n        ],\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.create(\n  name: \"AML investigation\",\n  assignee_pool: [\"9a000000-0000-4000-8000-0000000000aa\"],\n  assignment_method: \"AUTOMATIC\",\n  max_active_cases: 15,\n  require_resolution_note: true,\n  content_config: {\n    aml_control: {\n      enabled: true,\n      financial: true,\n      identity: false,\n    },\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.CreateAsync(new CasesBlueprintsCreateParams\n{\n    Name = \"AML investigation\",\n    AssigneePool = new string[] { \"9a000000-0000-4000-8000-0000000000aa\" },\n    AssignmentMethod = new CasesBlueprintsCreateParamsAssignmentMethod(\"AUTOMATIC\"),\n    MaxActiveCases = 15,\n    RequireResolutionNote = true,\n    ContentConfig = new CaseContentConfig\n    {\n        AmlControl = new CaseContentConfigAmlControl\n        {\n            Enabled = true,\n            Financial = true,\n            Identity = false,\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "ブループリントを作成しました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBlueprintDetail"
                }
              }
            }
          },
          "400": {
            "description": "名前が24文字を超えている、assignee_poolが空である、または相互参照されたブループリント（escalation/checker）が見つかりません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/{blueprint_uuid}/": {
      "get": {
        "summary": "ブループリントを取得",
        "description": "ブループリントを取得します。接続されている作成元（AML設定、取引ルール、ワークフローのノード）と、このブループリントにエスカレーションするブループリントも含まれます。",
        "operationId": "get_case_blueprint",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "blueprint_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "b1de0000-0000-4000-8000-000000000002"
            },
            "description": "ブループリントのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/b1de0000-0000-4000-8000-000000000002/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.retrieve(\n    \"b1de0000-0000-4000-8000-000000000002\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.retrieve(\"b1de0000-0000-4000-8000-000000000002\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.Retrieve(ctx, \"b1de0000-0000-4000-8000-000000000002\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().retrieve(\"b1de0000-0000-4000-8000-000000000002\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->retrieve('b1de0000-0000-4000-8000-000000000002');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.retrieve(\"b1de0000-0000-4000-8000-000000000002\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.RetrieveAsync(\"b1de0000-0000-4000-8000-000000000002\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ブループリントの詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBlueprintDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "ブループリントを更新",
        "description": "ブループリントの一般設定またはcontent_configを部分更新します。",
        "operationId": "update_case_blueprint",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "blueprint_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "b1de0000-0000-4000-8000-000000000002"
            },
            "description": "ブループリントのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 24,
                    "description": "最大24文字。例: \"AML調査\"。"
                  },
                  "description": {
                    "type": "string",
                    "nullable": true
                  },
                  "assignee_pool": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "minItems": 1,
                    "description": "ユーザーUUIDのリストです。空の配列は「Pick at least one assignee」というエラーで拒否されます。"
                  },
                  "assignment_method": {
                    "type": "string",
                    "enum": [
                      "MANUAL",
                      "AUTOMATIC"
                    ]
                  },
                  "max_active_cases": {
                    "type": "integer",
                    "nullable": true,
                    "minimum": 1,
                    "description": "自動モードのしきい値：「このブループリントのケースの割り当てがN件未満」。"
                  },
                  "escalation_enabled": {
                    "type": "boolean"
                  },
                  "escalation_blueprint": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "対象のブループリントUUID。保存時には検証されませんが、escalation_enabledとescalation_blueprintの両方が設定されるまで、エスカレーションアクションは400で失敗します。"
                  },
                  "transfer_enabled": {
                    "type": "boolean"
                  },
                  "four_eyes_checker_blueprint": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "これを設定すると4-eyesレビューが有効になります。このブループリントでの解決は、チェッカーブループリントのキューにステージングされます。"
                  },
                  "require_resolution_note": {
                    "type": "boolean"
                  },
                  "content_config": {
                    "$ref": "#/components/schemas/CaseContentConfig"
                  },
                  "is_active": {
                    "type": "boolean"
                  },
                  "default_deadline_hours": {
                    "type": "integer",
                    "nullable": true,
                    "minimum": 1,
                    "maximum": 8760,
                    "description": "新たにオープンされたケースのデフォルトの期限。既存のケースの期限は変更されません。"
                  },
                  "expected_version": {
                    "type": "integer",
                    "minimum": 1,
                    "description": "エディターで開いたバージョン。古いバージョンの場合は、レビューポリシーを変更せずに409を返します。"
                  }
                }
              },
              "example": {
                "transfer_enabled": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/b1de0000-0000-4000-8000-000000000002/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"transfer_enabled\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.update(\n    \"b1de0000-0000-4000-8000-000000000002\",\n    transfer_enabled=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.update(\"b1de0000-0000-4000-8000-000000000002\", {\n  transfer_enabled: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.Update(ctx, \"b1de0000-0000-4000-8000-000000000002\", didit.CasesBlueprintsUpdateParams{\n\tTransferEnabled: didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesBlueprintsUpdateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().update(\"b1de0000-0000-4000-8000-000000000002\", CasesBlueprintsUpdateParams.builder()\n        .transferEnabled(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->update('b1de0000-0000-4000-8000-000000000002', [\n    'transfer_enabled' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.update(\n  \"b1de0000-0000-4000-8000-000000000002\",\n  transfer_enabled: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.UpdateAsync(\"b1de0000-0000-4000-8000-000000000002\", new CasesBlueprintsUpdateParams\n{\n    TransferEnabled = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後のブループリント。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBlueprintDetail"
                }
              }
            }
          },
          "409": {
            "description": "expected_version以降にレビューポリシーが変更されました。再試行する前に最新バージョンを確認してください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "delete": {
        "summary": "ブループリントを削除",
        "description": "ブループリントを削除します。削除は常に成功し、ブループリントのケースには影響しません。既存のケースはブループリントへの参照を保持し、その設定は引き続きそれらのケースに適用されます。削除されたブループリントはブループリント一覧に表示されなくなり、移管先として選択できなくなります。解決内容が4-eyes承認待ちの間にメーカー側のブループリントが削除された場合、その解決内容が却下されると、ケースはチェッカー側のブループリントに残ります。",
        "operationId": "delete_case_blueprint",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "blueprint_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "b1de0000-0000-4000-8000-000000000002"
            },
            "description": "ブループリントのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/b1de0000-0000-4000-8000-000000000002/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.cases.blueprints.delete(\n    \"b1de0000-0000-4000-8000-000000000002\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.cases.blueprints.delete(\"b1de0000-0000-4000-8000-000000000002\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.Cases.Blueprints.Delete(ctx, \"b1de0000-0000-4000-8000-000000000002\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().blueprints().delete(\"b1de0000-0000-4000-8000-000000000002\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->cases->blueprints->delete('b1de0000-0000-4000-8000-000000000002');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.blueprints.delete(\"b1de0000-0000-4000-8000-000000000002\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Cases.Blueprints.DeleteAsync(\"b1de0000-0000-4000-8000-000000000002\");"
          }
        ],
        "responses": {
          "204": {
            "description": "ブループリントを削除しました。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/presets/": {
      "get": {
        "summary": "ブループリントのプリセット一覧を取得",
        "description": "4つの組み込みプリセット(Screening hit、AML investigation、Suspicious activity、KYC review)を、それぞれのcontent_configと、このアプリケーションにすでにインストールされているかどうかとあわせて一覧表示します。",
        "operationId": "list_case_blueprint_presets",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "list_presets",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/presets/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.list_presets()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.listPresets();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.ListPresets(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().listPresets();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->listPresets();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.list_presets\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.ListPresetsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "プリセットのカタログ。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "preset_key": {
                            "type": "string",
                            "enum": [
                              "screening_hit",
                              "aml_investigation",
                              "suspicious_activity",
                              "kyc"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "content_config": {
                            "$ref": "#/components/schemas/CaseContentConfig"
                          },
                          "installed": {
                            "type": "boolean"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/presets/install/": {
      "post": {
        "summary": "ブループリントのプリセットをインストール",
        "description": "1つ以上のプリセットを、編集可能なブループリントとしてアプリケーションにコピーします。preset_keyごとに冪等です。preset_keysを省略すると、まだインストールされていないすべてのプリセットがインストールされます。",
        "operationId": "install_case_blueprint_presets",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "install_presets",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Blueprints"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "preset_keys": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "nullable": true,
                    "description": "screening_hit、aml_investigation、suspicious_activity、kycのサブセット。省略するとすべてがインストールされます。"
                  }
                }
              },
              "example": {
                "preset_keys": [
                  "aml_investigation",
                  "kyc"
                ]
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/blueprints/presets/install/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"preset_keys\": [\"aml_investigation\", \"kyc\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.install_presets(\n    preset_keys=[\"aml_investigation\", \"kyc\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.installPresets({\n  preset_keys: [\"aml_investigation\", \"kyc\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.InstallPresets(ctx, didit.CasesBlueprintsInstallPresetsParams{\n\tPresetKeys: didit.Some([]string{\"aml_investigation\", \"kyc\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CasesBlueprintsInstallPresetsParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().installPresets(CasesBlueprintsInstallPresetsParams.builder()\n        .presetKeys(List.of(\"aml_investigation\", \"kyc\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->installPresets([\n    'preset_keys' => ['aml_investigation', 'kyc'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.install_presets(preset_keys: [\"aml_investigation\", \"kyc\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.InstallPresetsAsync(new CasesBlueprintsInstallPresetsParams\n{\n    PresetKeys = new string[] { \"aml_investigation\", \"kyc\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "インストールされた1つ以上のプリセットです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBlueprintPresetInstallResult"
                }
              }
            }
          },
          "200": {
            "description": "インストールする新しいプリセットはありません（リクエストされたプリセットはすべてすでに存在します）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseBlueprintPresetInstallResult"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/report-templates/": {
      "get": {
        "summary": "レポートテンプレートを一覧表示",
        "description": "アプリケーションのFIUレポートテンプレートを一覧表示します。",
        "operationId": "list_report_templates",
        "x-didit-sdk": {
          "resource": "report_templates",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Report Templates"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "0始まりのオフセットです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/report-templates/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.report_templates.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.reportTemplates.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.ReportTemplates.ListAutoPaging(ctx, didit.ReportTemplatesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.reportTemplates().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->reportTemplates->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.report_templates.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.ReportTemplates.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたテンプレートの一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "一致する行の数（パフォーマンスのため上限は100）。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ReportTemplateDetail"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "レポートテンプレートを作成",
        "description": "管轄区域ごと、レポート種別ごとに再利用可能なgoAMLヘッダーテンプレートを作成します。テンプレートレベルの必須フィールド（rentity_id、submission_code、currency_code_local）のいずれかがfield_configにない場合は400で拒否されます。無効なテンプレートは保存できず、レポートの作成にも使用できません。提出ごとのヘッダーフィールド（action、submission_date、transactions）は、代わりにレポートの検証時または確定時に必須チェックされます。",
        "operationId": "create_report_template",
        "x-didit-sdk": {
          "resource": "report_templates",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Report Templates"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "jurisdiction",
                  "report_type"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "jurisdiction": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2,
                    "description": "ISO 3166-1 alpha-2国コード。保存時に大文字に変換されます。"
                  },
                  "report_type": {
                    "type": "string",
                    "enum": [
                      "SAR",
                      "STR",
                      "CTR",
                      "TTR",
                      "UTR",
                      "IFT",
                      "CBR",
                      "TFR"
                    ]
                  },
                  "field_config": {
                    "type": "object",
                    "description": "再利用可能なgoAMLヘッダーのデフォルト値。テンプレートレベルの必須フィールド：rentity_id、submission_code、currency_code_local（3文字）。任意：enabled_fields（含める任意のレポートブロック）と、reporting_person、location、reason、actionのデフォルト値。提出ごとのヘッダーフィールド（action、submission_date、transactions、jurisdiction）の必須チェックは、テンプレートではなく、レポートの検証時または確定時に行われます。"
                  }
                }
              },
              "example": {
                "name": "US SAR default",
                "jurisdiction": "US",
                "report_type": "SAR",
                "field_config": {
                  "rentity_id": "FIU-US-00123",
                  "submission_code": "E",
                  "currency_code_local": "USD"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/report-templates/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"name\": \"US SAR default\", \"jurisdiction\": \"US\", \"report_type\": \"SAR\", \"field_config\": {\"rentity_id\": \"FIU-US-00123\", \"submission_code\": \"E\", \"currency_code_local\": \"USD\"}}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.report_templates.create(\n    name=\"US SAR default\",\n    jurisdiction=\"US\",\n    report_type=\"SAR\",\n    field_config={\"rentity_id\": \"FIU-US-00123\", \"submission_code\": \"E\", \"currency_code_local\": \"USD\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.reportTemplates.create({\n  name: \"US SAR default\",\n  jurisdiction: \"US\",\n  report_type: \"SAR\",\n  field_config: { rentity_id: \"FIU-US-00123\", submission_code: \"E\", currency_code_local: \"USD\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.ReportTemplates.Create(ctx, didit.ReportTemplatesCreateParams{\n\tName:         \"US SAR default\",\n\tJurisdiction: \"US\",\n\tReportType:   \"SAR\",\n\tFieldConfig:  didit.Some(map[string]any{\"rentity_id\": \"FIU-US-00123\", \"submission_code\": \"E\", \"currency_code_local\": \"USD\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.ReportTemplatesCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.reportTemplates().create(ReportTemplatesCreateParams.builder()\n        .name(\"US SAR default\")\n        .jurisdiction(\"US\")\n        .reportType(ReportTemplatesCreateParams.ReportType.of(\"SAR\"))\n        .fieldConfig(Map.of(\"rentity_id\", \"FIU-US-00123\", \"submission_code\", \"E\", \"currency_code_local\", \"USD\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->reportTemplates->create([\n    'name' => 'US SAR default',\n    'jurisdiction' => 'US',\n    'report_type' => 'SAR',\n    'field_config' => ['rentity_id' => 'FIU-US-00123', 'submission_code' => 'E', 'currency_code_local' => 'USD'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.report_templates.create(\n  name: \"US SAR default\",\n  jurisdiction: \"US\",\n  report_type: \"SAR\",\n  field_config: { rentity_id: \"FIU-US-00123\", submission_code: \"E\", currency_code_local: \"USD\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.ReportTemplates.CreateAsync(new ReportTemplatesCreateParams\n{\n    Name = \"US SAR default\",\n    Jurisdiction = \"US\",\n    ReportType = \"SAR\",\n    FieldConfig = new Dictionary<string, object> { [\"rentity_id\"] = \"FIU-US-00123\", [\"submission_code\"] = \"E\", [\"currency_code_local\"] = \"USD\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "テンプレートが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportTemplateDetail"
                }
              }
            }
          },
          "400": {
            "description": "認識できない法域、またはfield_configが必須フィールドの検証に失敗しました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/report-templates/{template_uuid}/": {
      "get": {
        "summary": "レポートテンプレートを取得",
        "description": "レポートテンプレートを取得します。",
        "operationId": "get_report_template",
        "x-didit-sdk": {
          "resource": "report_templates",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Report Templates"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "template_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "7ec00000-0000-4000-8000-000000000006"
            },
            "description": "レポートテンプレートのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/report-templates/7ec00000-0000-4000-8000-000000000006/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.report_templates.retrieve(\n    \"7ec00000-0000-4000-8000-000000000006\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.reportTemplates.retrieve(\"7ec00000-0000-4000-8000-000000000006\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.ReportTemplates.Retrieve(ctx, \"7ec00000-0000-4000-8000-000000000006\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.reportTemplates().retrieve(\"7ec00000-0000-4000-8000-000000000006\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->reportTemplates->retrieve('7ec00000-0000-4000-8000-000000000006');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.report_templates.retrieve(\"7ec00000-0000-4000-8000-000000000006\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.ReportTemplates.RetrieveAsync(\"7ec00000-0000-4000-8000-000000000006\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "テンプレートの詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportTemplateDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "レポートテンプレートを更新",
        "description": "レポートテンプレートを部分更新します。保存時にgoAMLの必須フィールドを再検証します。",
        "operationId": "update_report_template",
        "x-didit-sdk": {
          "resource": "report_templates",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Report Templates"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "template_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "7ec00000-0000-4000-8000-000000000006"
            },
            "description": "レポートテンプレートのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "jurisdiction": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2,
                    "description": "ISO 3166-1 alpha-2国コード。保存時に大文字に変換されます。"
                  },
                  "report_type": {
                    "type": "string",
                    "enum": [
                      "SAR",
                      "STR",
                      "CTR",
                      "TTR",
                      "UTR",
                      "IFT",
                      "CBR",
                      "TFR"
                    ]
                  },
                  "field_config": {
                    "type": "object",
                    "description": "再利用可能なgoAMLヘッダーのデフォルト値。テンプレートレベルの必須フィールド：rentity_id、submission_code、currency_code_local（3文字）。任意：enabled_fields（含める任意のレポートブロック）と、reporting_person、location、reason、actionのデフォルト値。提出ごとのヘッダーフィールド（action、submission_date、transactions、jurisdiction）の必須チェックは、テンプレートではなく、レポートの検証時または確定時に行われます。"
                  }
                }
              },
              "example": {
                "field_config": {
                  "rentity_id": "FIU-US-00124"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/report-templates/7ec00000-0000-4000-8000-000000000006/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"field_config\": {\"rentity_id\": \"FIU-US-00124\"}}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.report_templates.update(\n    \"7ec00000-0000-4000-8000-000000000006\",\n    field_config={\"rentity_id\": \"FIU-US-00124\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.reportTemplates.update(\"7ec00000-0000-4000-8000-000000000006\", {\n  field_config: { rentity_id: \"FIU-US-00124\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.ReportTemplates.Update(ctx, \"7ec00000-0000-4000-8000-000000000006\", didit.ReportTemplatesUpdateParams{\n\tFieldConfig: didit.Some(map[string]any{\"rentity_id\": \"FIU-US-00124\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.ReportTemplatesUpdateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.reportTemplates().update(\"7ec00000-0000-4000-8000-000000000006\", ReportTemplatesUpdateParams.builder()\n        .fieldConfig(Map.of(\"rentity_id\", \"FIU-US-00124\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->reportTemplates->update('7ec00000-0000-4000-8000-000000000006', [\n    'field_config' => ['rentity_id' => 'FIU-US-00124'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.report_templates.update(\n  \"7ec00000-0000-4000-8000-000000000006\",\n  field_config: { rentity_id: \"FIU-US-00124\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.ReportTemplates.UpdateAsync(\"7ec00000-0000-4000-8000-000000000006\", new ReportTemplatesUpdateParams\n{\n    FieldConfig = new Dictionary<string, object> { [\"rentity_id\"] = \"FIU-US-00124\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後のテンプレート。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportTemplateDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "delete": {
        "summary": "レポートテンプレートを削除",
        "description": "レポートテンプレートを削除します。このテンプレートからすでに作成されたレポートには影響しません。",
        "operationId": "delete_report_template",
        "x-didit-sdk": {
          "resource": "report_templates",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Report Templates"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "template_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "7ec00000-0000-4000-8000-000000000006"
            },
            "description": "レポートテンプレートのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/report-templates/7ec00000-0000-4000-8000-000000000006/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.report_templates.delete(\n    \"7ec00000-0000-4000-8000-000000000006\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.reportTemplates.delete(\"7ec00000-0000-4000-8000-000000000006\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.ReportTemplates.Delete(ctx, \"7ec00000-0000-4000-8000-000000000006\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.reportTemplates().delete(\"7ec00000-0000-4000-8000-000000000006\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->reportTemplates->delete('7ec00000-0000-4000-8000-000000000006');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.report_templates.delete(\"7ec00000-0000-4000-8000-000000000006\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.ReportTemplates.DeleteAsync(\"7ec00000-0000-4000-8000-000000000006\");"
          }
        ],
        "responses": {
          "204": {
            "description": "テンプレートが削除されました。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/regulatory-reports/": {
      "get": {
        "summary": "ケースのレポートを一覧表示",
        "description": "ケースに対して生成されたFIUレポートを一覧表示します。",
        "operationId": "list_case_regulatory_reports",
        "x-didit-sdk": {
          "resource": "cases.regulatory_reports",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "0始まりのオフセットです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/regulatory-reports/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.regulatory_reports.list(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.regulatoryReports.list(\"c1a5e000-0000-4000-8000-000000000001\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.RegulatoryReports.ListAutoPaging(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesRegulatoryReportsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().regulatoryReports().list(\"c1a5e000-0000-4000-8000-000000000001\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->regulatoryReports->list('c1a5e000-0000-4000-8000-000000000001') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.regulatory_reports.list(\"c1a5e000-0000-4000-8000-000000000001\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.RegulatoryReports.ListAsync(\"c1a5e000-0000-4000-8000-000000000001\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたケースのレポート一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportList"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "ケースからレポートを作成",
        "description": "ケースのFIUレポートの下書きを作成します。ステータスはDRAFTで、任意のテンプレートと、ケースの対象、紐づく取引、ナラティブから自動入力されます。検証してから確定すると、goAML XMLとPDFが生成されます。",
        "operationId": "create_case_regulatory_report",
        "x-didit-sdk": {
          "resource": "cases.regulatory_reports",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "case_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "c1a5e000-0000-4000-8000-000000000001"
            },
            "description": "ケースのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "report_type": {
                    "type": "string",
                    "enum": [
                      "SAR",
                      "STR",
                      "CTR",
                      "TTR",
                      "UTR",
                      "IFT",
                      "CBR",
                      "TFR"
                    ],
                    "description": "テンプレートを指定しない場合は必須です。指定した場合はテンプレートのreport_typeが使用されます。"
                  },
                  "jurisdiction": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2,
                    "description": "テンプレートを指定しない場合は必須です。"
                  },
                  "template": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true,
                    "description": "レポートテンプレートのUUID。ケースから導出されたデータがマージされる前に、テンプレートのfield_configで下書きが初期化されます。"
                  },
                  "transactions": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nullable": true,
                    "description": "添付する取引。デフォルトはケースに紐付けられた取引です。"
                  },
                  "rentity_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "rentity_branch": {
                    "type": "string",
                    "nullable": true
                  },
                  "submission_code": {
                    "type": "string",
                    "enum": [
                      "E",
                      "M"
                    ],
                    "default": "E"
                  },
                  "entity_reference": {
                    "type": "string",
                    "nullable": true
                  },
                  "fiu_ref_number": {
                    "type": "string",
                    "nullable": true
                  },
                  "currency_code_local": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3,
                    "nullable": true
                  },
                  "submission_date": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "reporting_person": {
                    "type": "object"
                  },
                  "location": {
                    "type": "object"
                  },
                  "reason": {
                    "type": "string",
                    "nullable": true
                  },
                  "action": {
                    "type": "string",
                    "nullable": true
                  },
                  "activity": {
                    "type": "string",
                    "nullable": true
                  },
                  "narrative": {
                    "type": "object",
                    "properties": {
                      "who": {
                        "type": "string"
                      },
                      "what": {
                        "type": "string"
                      },
                      "when": {
                        "type": "string"
                      },
                      "where": {
                        "type": "string"
                      },
                      "why": {
                        "type": "string"
                      },
                      "how": {
                        "type": "string"
                      }
                    }
                  },
                  "report_indicators": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "included_fields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "example": {
                "template": "7ec00000-0000-4000-8000-000000000006"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/regulatory-reports/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"template\": \"7ec00000-0000-4000-8000-000000000006\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.regulatory_reports.create(\n    \"c1a5e000-0000-4000-8000-000000000001\",\n    template=\"7ec00000-0000-4000-8000-000000000006\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.regulatoryReports.create(\"c1a5e000-0000-4000-8000-000000000001\", {\n  template: \"7ec00000-0000-4000-8000-000000000006\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RegulatoryReports.Create(ctx, \"c1a5e000-0000-4000-8000-000000000001\", didit.CasesRegulatoryReportsCreateParams{\n\tTemplate: didit.String(\"7ec00000-0000-4000-8000-000000000006\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasesRegulatoryReportsCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().regulatoryReports().create(\"c1a5e000-0000-4000-8000-000000000001\", CasesRegulatoryReportsCreateParams.builder()\n        .template(\"7ec00000-0000-4000-8000-000000000006\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->regulatoryReports->create('c1a5e000-0000-4000-8000-000000000001', [\n    'template' => '7ec00000-0000-4000-8000-000000000006',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.regulatory_reports.create(\n  \"c1a5e000-0000-4000-8000-000000000001\",\n  template: \"7ec00000-0000-4000-8000-000000000006\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RegulatoryReports.CreateAsync(\"c1a5e000-0000-4000-8000-000000000001\", new CasesRegulatoryReportsCreateParams\n{\n    Template = \"7ec00000-0000-4000-8000-000000000006\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "ドラフトレポートを作成しました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportDetail"
                }
              }
            }
          },
          "400": {
            "description": "参照されたテンプレートが見つかりませんでした。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/": {
      "get": {
        "summary": "レポートを一覧表示",
        "description": "アプリケーション全体のFIUレポート一覧。status、report_type、またはケースで任意に絞り込めます。",
        "operationId": "list_regulatory_reports",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            },
            "description": "ページサイズ。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "0始まりのオフセットです。"
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "DRAFT",
                "VALIDATED",
                "FINALIZED"
              ]
            },
            "description": "ステータスで絞り込みます。"
          },
          {
            "name": "report_type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "SAR",
                "STR",
                "CTR",
                "TTR",
                "UTR",
                "IFT",
                "CBR",
                "TFR"
              ]
            },
            "description": "レポートタイプで絞り込みます。"
          },
          {
            "name": "case",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "このケースのレポートに絞り込みます。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.regulatory_reports.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.regulatoryReports.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.RegulatoryReports.ListAutoPaging(ctx, didit.RegulatoryReportsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.regulatoryReports().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->regulatoryReports->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.regulatory_reports.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.RegulatoryReports.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "アプリケーション全体のページネーションされたレポート。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportList"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "スタンドアロンレポートを作成",
        "description": "スタンドアロンのレポートページからFIUレポートの下書きを作成します。ケースとテンプレートの両方が必須です（テンプレートを省略できるケース単位の作成とは異なります）。",
        "operationId": "create_standalone_regulatory_report",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "case",
                  "template"
                ],
                "properties": {
                  "case": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "template": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "report_type": {
                    "type": "string",
                    "enum": [
                      "SAR",
                      "STR",
                      "CTR",
                      "TTR",
                      "UTR",
                      "IFT",
                      "CBR",
                      "TFR"
                    ],
                    "description": "テンプレートを指定しない場合は必須です。指定した場合はテンプレートのreport_typeが使用されます。"
                  },
                  "jurisdiction": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2,
                    "description": "テンプレートを指定しない場合は必須です。"
                  },
                  "transactions": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nullable": true,
                    "description": "添付する取引。デフォルトはケースに紐付けられた取引です。"
                  },
                  "rentity_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "rentity_branch": {
                    "type": "string",
                    "nullable": true
                  },
                  "submission_code": {
                    "type": "string",
                    "enum": [
                      "E",
                      "M"
                    ],
                    "default": "E"
                  },
                  "entity_reference": {
                    "type": "string",
                    "nullable": true
                  },
                  "fiu_ref_number": {
                    "type": "string",
                    "nullable": true
                  },
                  "currency_code_local": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3,
                    "nullable": true
                  },
                  "submission_date": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "reporting_person": {
                    "type": "object"
                  },
                  "location": {
                    "type": "object"
                  },
                  "reason": {
                    "type": "string",
                    "nullable": true
                  },
                  "action": {
                    "type": "string",
                    "nullable": true
                  },
                  "activity": {
                    "type": "string",
                    "nullable": true
                  },
                  "narrative": {
                    "type": "object",
                    "properties": {
                      "who": {
                        "type": "string"
                      },
                      "what": {
                        "type": "string"
                      },
                      "when": {
                        "type": "string"
                      },
                      "where": {
                        "type": "string"
                      },
                      "why": {
                        "type": "string"
                      },
                      "how": {
                        "type": "string"
                      }
                    }
                  },
                  "report_indicators": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "included_fields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "example": {
                "case": "c1a5e000-0000-4000-8000-000000000001",
                "template": "7ec00000-0000-4000-8000-000000000006"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"case\": \"c1a5e000-0000-4000-8000-000000000001\", \"template\": \"7ec00000-0000-4000-8000-000000000006\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.regulatory_reports.create(\n    case=\"c1a5e000-0000-4000-8000-000000000001\",\n    template=\"7ec00000-0000-4000-8000-000000000006\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.regulatoryReports.create({\n  case: \"c1a5e000-0000-4000-8000-000000000001\",\n  template: \"7ec00000-0000-4000-8000-000000000006\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.RegulatoryReports.Create(ctx, didit.RegulatoryReportsCreateParams{\n\tCase:     \"c1a5e000-0000-4000-8000-000000000001\",\n\tTemplate: \"7ec00000-0000-4000-8000-000000000006\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.RegulatoryReportsCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.regulatoryReports().create(RegulatoryReportsCreateParams.builder()\n        .case_(\"c1a5e000-0000-4000-8000-000000000001\")\n        .template(\"7ec00000-0000-4000-8000-000000000006\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->regulatoryReports->create([\n    'case' => 'c1a5e000-0000-4000-8000-000000000001',\n    'template' => '7ec00000-0000-4000-8000-000000000006',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.regulatory_reports.create(\n  case: \"c1a5e000-0000-4000-8000-000000000001\",\n  template: \"7ec00000-0000-4000-8000-000000000006\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.RegulatoryReports.CreateAsync(new RegulatoryReportsCreateParams\n{\n    Case = \"c1a5e000-0000-4000-8000-000000000001\",\n    Template = \"7ec00000-0000-4000-8000-000000000006\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "ドラフトレポートを作成しました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportDetail"
                }
              }
            }
          },
          "400": {
            "description": "参照されたテンプレートが見つかりませんでした。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/": {
      "get": {
        "summary": "レポートを取得",
        "description": "規制当局向けレポートを取得します。",
        "operationId": "get_regulatory_report",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "report_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5ec00000-0000-4000-8000-000000000007"
            },
            "description": "レポートのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.regulatory_reports.retrieve(\n    \"5ec00000-0000-4000-8000-000000000007\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.regulatoryReports.retrieve(\"5ec00000-0000-4000-8000-000000000007\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.RegulatoryReports.Retrieve(ctx, \"5ec00000-0000-4000-8000-000000000007\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.regulatoryReports().retrieve(\"5ec00000-0000-4000-8000-000000000007\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->regulatoryReports->retrieve('5ec00000-0000-4000-8000-000000000007');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.regulatory_reports.retrieve(\"5ec00000-0000-4000-8000-000000000007\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.RegulatoryReports.RetrieveAsync(\"5ec00000-0000-4000-8000-000000000007\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "レポートの詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "レポートを更新",
        "description": "下書きまたは検証済みレポートのフィールドを編集します。確定済みのレポートは編集できません（409）。",
        "operationId": "update_regulatory_report",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "report_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5ec00000-0000-4000-8000-000000000007"
            },
            "description": "レポートのUUID。"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jurisdiction": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2
                  },
                  "rentity_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "rentity_branch": {
                    "type": "string",
                    "nullable": true
                  },
                  "submission_code": {
                    "type": "string",
                    "enum": [
                      "E",
                      "M"
                    ],
                    "default": "E"
                  },
                  "entity_reference": {
                    "type": "string",
                    "nullable": true
                  },
                  "fiu_ref_number": {
                    "type": "string",
                    "nullable": true
                  },
                  "currency_code_local": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3,
                    "nullable": true
                  },
                  "submission_date": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "reporting_person": {
                    "type": "object"
                  },
                  "location": {
                    "type": "object"
                  },
                  "reason": {
                    "type": "string",
                    "nullable": true
                  },
                  "action": {
                    "type": "string",
                    "nullable": true
                  },
                  "activity": {
                    "type": "string",
                    "nullable": true
                  },
                  "narrative": {
                    "type": "object",
                    "properties": {
                      "who": {
                        "type": "string"
                      },
                      "what": {
                        "type": "string"
                      },
                      "when": {
                        "type": "string"
                      },
                      "where": {
                        "type": "string"
                      },
                      "why": {
                        "type": "string"
                      },
                      "how": {
                        "type": "string"
                      }
                    }
                  },
                  "report_indicators": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "included_fields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "example": {
                "rentity_id": "FIU-US-00123",
                "currency_code_local": "USD"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"rentity_id\": \"FIU-US-00123\", \"currency_code_local\": \"USD\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.regulatory_reports.update(\n    \"5ec00000-0000-4000-8000-000000000007\",\n    rentity_id=\"FIU-US-00123\",\n    currency_code_local=\"USD\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.regulatoryReports.update(\"5ec00000-0000-4000-8000-000000000007\", {\n  rentity_id: \"FIU-US-00123\",\n  currency_code_local: \"USD\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.RegulatoryReports.Update(ctx, \"5ec00000-0000-4000-8000-000000000007\", didit.RegulatoryReportsUpdateParams{\n\tRentityID:         didit.String(\"FIU-US-00123\"),\n\tCurrencyCodeLocal: didit.String(\"USD\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.RegulatoryReportsUpdateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.regulatoryReports().update(\"5ec00000-0000-4000-8000-000000000007\", RegulatoryReportsUpdateParams.builder()\n        .rentityId(\"FIU-US-00123\")\n        .currencyCodeLocal(\"USD\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->regulatoryReports->update('5ec00000-0000-4000-8000-000000000007', [\n    'rentity_id' => 'FIU-US-00123',\n    'currency_code_local' => 'USD',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.regulatory_reports.update(\n  \"5ec00000-0000-4000-8000-000000000007\",\n  rentity_id: \"FIU-US-00123\",\n  currency_code_local: \"USD\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.RegulatoryReports.UpdateAsync(\"5ec00000-0000-4000-8000-000000000007\", new RegulatoryReportsUpdateParams\n{\n    RentityId = \"FIU-US-00123\",\n    CurrencyCodeLocal = \"USD\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後のレポート。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportDetail"
                }
              }
            }
          },
          "409": {
            "description": "レポートはすでに確定済みです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "delete": {
        "summary": "レポートを削除",
        "description": "規制レポートを完全に削除します。レポート、コピーされたナラティブと理由、取引とのリンク、生成されたgoAML XMLとPDFが、それらのファイルの保存済みのすべてのバージョンを含めて消去されます。レポートは一覧から消え、ダウンロードURLは機能しなくなります。ケース、取引、人物、企業を含むその他のレコードは削除されません。元に戻すことはできません。\n\n下書きまたは検証済みのレポートは、リクエストボディなしで削除できます。確定済みのレポートを削除するには、リクエストボディに`confirm_delete: true`が必要です。レポートが存在しない場合、リクエストは`404`を返します。確定済みのレポートを確認なしで送信した場合は`400`を返し、何も削除されません。",
        "operationId": "delete_regulatory_report",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "report_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5ec00000-0000-4000-8000-000000000007"
            },
            "description": "レポートのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl (draft report)",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "curl",
            "label": "curl (finalized report)",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"confirm_delete\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.regulatory_reports.delete(\n    \"5ec00000-0000-4000-8000-000000000007\",\n    confirm_delete=True,\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.regulatoryReports.delete(\"5ec00000-0000-4000-8000-000000000007\", {\n  confirm_delete: true,\n});"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.RegulatoryReportsDeleteParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.regulatoryReports().delete(\"5ec00000-0000-4000-8000-000000000007\", RegulatoryReportsDeleteParams.builder()\n        .confirmDelete(true)\n        .build());"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->regulatoryReports->delete('5ec00000-0000-4000-8000-000000000007', [\n    'confirm_delete' => true,\n]);"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.regulatory_reports.delete(\n  \"5ec00000-0000-4000-8000-000000000007\",\n  confirm_delete: true\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.RegulatoryReports.DeleteAsync(\"5ec00000-0000-4000-8000-000000000007\", new RegulatoryReportsDeleteParams\n{\n    ConfirmDelete = true,\n});"
          }
        ],
        "responses": {
          "204": {
            "description": "生成されたファイルを含め、レポートが削除されました。"
          },
          "400": {
            "description": "確定済みのレポートが`confirm_delete: true`なしで送信されました。何も削除されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "confirm_delete": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "example": {
                  "confirm_delete": [
                    "This field is required to delete a finalized report."
                  ]
                }
              }
            }
          },
          "403": {
            "description": "このAPIキーではレポートを削除できません。このエンドポイントには`write:cases`が必要です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにレポートが見つかりません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "レポートはすでに削除中です。リクエストを再度実行して、ファイルの消去を完了してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "This report is being deleted. Retry deleting it to finish erasing its files.",
                  "code": "report_deletion_pending"
                }
              }
            }
          },
          "503": {
            "description": "現在レポートのファイルを消去できませんでした。レポートはそのまま残っています。リクエストを再度実行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "The report files could not be erased. Please retry deleting the report.",
                  "code": "report_storage_unavailable"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": false,
          "description": "確定済みのレポートでのみ必須です。",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm_delete": {
                    "type": "boolean",
                    "description": "確定済みのレポートとその生成ファイルが完全に削除されることを確認するには、trueに設定します。"
                  }
                },
                "example": {
                  "confirm_delete": true
                }
              },
              "example": {
                "confirm_delete": true
              }
            }
          }
        }
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/validate/": {
      "post": {
        "summary": "レポートを検証",
        "description": "ファイルを生成せずに、goAMLの必須ヘッダーフィールド（報告主体ID、提出コード、現地通貨、実施した措置、提出日）に加え、1件以上の取引が添付されていることと2文字の法域コードがあることについてレポートを検証します。結果はレポートにも保存されます。validation_errorsとvalidated_atが更新され、確定していないレポートのステータスはVALIDATED（エラーなし）に移行するか、DRAFT（エラーあり）に戻ります。",
        "operationId": "validate_regulatory_report",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "validate",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "report_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5ec00000-0000-4000-8000-000000000007"
            },
            "description": "レポートのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/validate/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.regulatory_reports.validate(\n    \"5ec00000-0000-4000-8000-000000000007\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.regulatoryReports.validate(\"5ec00000-0000-4000-8000-000000000007\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.RegulatoryReports.Validate(ctx, \"5ec00000-0000-4000-8000-000000000007\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.regulatoryReports().validate(\"5ec00000-0000-4000-8000-000000000007\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->regulatoryReports->validate('5ec00000-0000-4000-8000-000000000007');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.regulatory_reports.validate(\"5ec00000-0000-4000-8000-000000000007\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.RegulatoryReports.ValidateAsync(\"5ec00000-0000-4000-8000-000000000007\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "バリデーション結果です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "DRAFT",
                        "VALIDATED",
                        "FINALIZED"
                      ]
                    },
                    "is_valid": {
                      "type": "boolean"
                    },
                    "errors": {
                      "type": "array",
                      "description": "有効な場合は空です。",
                      "items": {
                        "type": "object",
                        "properties": {
                          "field": {
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/finalize/": {
      "post": {
        "summary": "レポートを確定",
        "description": "再検証したうえで、goAMLのXMLとPDFを生成し、両方をS3にアップロードします。SAR/STR/TFRレポートの場合は、ケースの取引アラートもPending SARからSAR filedに移動します。",
        "operationId": "finalize_regulatory_report",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "finalize",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "report_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5ec00000-0000-4000-8000-000000000007"
            },
            "description": "レポートのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/finalize/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.regulatory_reports.finalize(\n    \"5ec00000-0000-4000-8000-000000000007\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.regulatoryReports.finalize(\"5ec00000-0000-4000-8000-000000000007\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.RegulatoryReports.Finalize(ctx, \"5ec00000-0000-4000-8000-000000000007\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.regulatoryReports().finalize_(\"5ec00000-0000-4000-8000-000000000007\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->regulatoryReports->finalize('5ec00000-0000-4000-8000-000000000007');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.regulatory_reports.finalize(\"5ec00000-0000-4000-8000-000000000007\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.RegulatoryReports.FinalizeAsync(\"5ec00000-0000-4000-8000-000000000007\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "レポートが確定しました。xml_s3_keyとpdf_s3_keyが設定されています。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegulatoryReportDetail"
                }
              }
            }
          },
          "400": {
            "description": "レポートが検証に失敗しました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "field": {
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "レポートは確定可能な状態ではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/download-url/": {
      "get": {
        "summary": "レポートのダウンロードURLを取得",
        "description": "確定済みレポートのgoAML XMLまたはPDFの署名付きURLを発行します。",
        "operationId": "get_regulatory_report_download_url",
        "x-didit-sdk": {
          "resource": "regulatory_reports",
          "method": "retrieve_download_url",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Regulatory Reports"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "report_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5ec00000-0000-4000-8000-000000000007"
            },
            "description": "レポートのUUID。"
          },
          {
            "name": "file",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pdf",
                "xml"
              ],
              "default": "pdf"
            },
            "description": "ダウンロードするファイル。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/download-url/?file=xml' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.regulatory_reports.retrieve_download_url(\n    \"5ec00000-0000-4000-8000-000000000007\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.regulatoryReports.retrieveDownloadUrl(\"5ec00000-0000-4000-8000-000000000007\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.RegulatoryReports.RetrieveDownloadURL(ctx, \"5ec00000-0000-4000-8000-000000000007\", didit.RegulatoryReportsRetrieveDownloadURLParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.regulatoryReports().retrieveDownloadUrl(\"5ec00000-0000-4000-8000-000000000007\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->regulatoryReports->retrieveDownloadUrl('5ec00000-0000-4000-8000-000000000007');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.regulatory_reports.retrieve_download_url(\"5ec00000-0000-4000-8000-000000000007\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.RegulatoryReports.RetrieveDownloadUrlAsync(\"5ec00000-0000-4000-8000-000000000007\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "署名付きダウンロードURL。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "download_url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "file": {
                      "type": "string",
                      "enum": [
                        "pdf",
                        "xml"
                      ]
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "レポートはまだ確定していません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/transactions/rules/": {
      "get": {
        "summary": "ルールを一覧表示",
        "description": "アプリケーションのトランザクションモニタリングルール(独自のカスタムルールと、インストール済みのライブラリプリセット)を一覧表示します。source、category、mode、bundle、またはフリーテキスト検索でフィルターでき、`ordering`で並べ替えます(run_count、approved_pct、reviewed_pct、declined_pct、latest_triggered_at、title、created_at、sourceで、いずれも任意で`-`プレフィックスを付けられます)。",
        "operationId": "listTransactionRules",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "PRESET",
                "CUSTOM"
              ]
            },
            "description": "PRESETまたはCUSTOM"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "ルールカテゴリで絞り込み"
          },
          {
            "name": "mode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ACTIVE",
                "DISABLED",
                "TEST"
              ]
            },
            "description": "ACTIVE、DISABLED、またはTEST"
          },
          {
            "name": "bundle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "バンドルでプリセットを絞り込みます"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "タイトルと説明に対する大文字・小文字を区別しない一致"
          },
          {
            "name": "ordering",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りの並べ替えフィールド。デフォルトはsource,-run_countです。"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "ページサイズ"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "ページオフセット"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたルールの一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionRuleDetail"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/rules/?source=CUSTOM&ordering=-run_count' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.transactions.rules.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.transactions.rules.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.Rules.ListAutoPaging(ctx, didit.TransactionsRulesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.transactions().rules().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->transactions->rules->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.rules.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Transactions.Rules.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "summary": "ルールを作成",
        "description": "CUSTOMのトランザクションモニタリングルールを作成します。タイトルはアプリケーションごとに一意です（重複すると400）。`AWAITING_USER`を対象とする`change_status`アクションには`workflow_id`を含める必要があります。ACTIVEモードで作成したルールは新しい取引に即座に適用されます。推奨される手順は、TESTモードで作成し、バックテストを行ってから、モードをACTIVEに切り替えることです。",
        "operationId": "createTransactionRule",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleCreateRequest"
              },
              "example": {
                "title": "Structuring - inbound (custom)",
                "description": "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
                "category": "finance",
                "mode": "TEST",
                "evaluation_mode": "ALL",
                "scope": {
                  "transaction_types": [
                    "finance"
                  ],
                  "directions": [
                    "INBOUND"
                  ]
                },
                "conditions": [
                  {
                    "field": "currency",
                    "operator": "eq",
                    "value": "EUR"
                  },
                  {
                    "field": "amount",
                    "operator": "lt",
                    "value": 10000
                  }
                ],
                "aggregation": [
                  {
                    "metric": "count",
                    "operator": "gte",
                    "value": 20,
                    "window": "30d",
                    "filters": {
                      "direction": "INBOUND",
                      "transaction_type": "finance",
                      "subject_vendor_data": "__current__",
                      "currency": "EUR"
                    }
                  },
                  {
                    "metric": "max",
                    "field": "amount",
                    "operator": "lt",
                    "value": 10000,
                    "window": "30d",
                    "filters": {
                      "direction": "INBOUND",
                      "transaction_type": "finance",
                      "subject_vendor_data": "__current__",
                      "currency": "EUR"
                    }
                  }
                ],
                "actions": [
                  {
                    "type": "add_score",
                    "value": 35
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "作成されたルール。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleDetail"
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：タイトルの重複、不明な演算子/メトリクス、不正な形式のウィンドウ、無効なスコープ方向、またはworkflow_idのないAWAITING_USER。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "title": [
                    "A rule with this name already exists."
                  ]
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/transactions/rules/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Structuring - inbound (custom)\", \"description\": \"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\", \"category\": \"finance\", \"mode\": \"TEST\", \"evaluation_mode\": \"ALL\", \"scope\": {\"transaction_types\": [\"finance\"], \"directions\": [\"INBOUND\"]}, \"conditions\": [{\"field\": \"currency\", \"operator\": \"eq\", \"value\": \"EUR\"}, {\"field\": \"amount\", \"operator\": \"lt\", \"value\": 10000}], \"aggregation\": [{\"metric\": \"count\", \"operator\": \"gte\", \"value\": 20, \"window\": \"30d\", \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}}, {\"metric\": \"max\", \"field\": \"amount\", \"operator\": \"lt\", \"value\": 10000, \"window\": \"30d\", \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}}], \"actions\": [{\"type\": \"add_score\", \"value\": 35}]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.rules.create(\n    title=\"Structuring - inbound (custom)\",\n    description=\"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\",\n    category=\"finance\",\n    mode=\"TEST\",\n    evaluation_mode=\"ALL\",\n    scope={\n        \"transaction_types\": [\"finance\"],\n        \"directions\": [\"INBOUND\"],\n    },\n    conditions=[{\n        \"field\": \"currency\",\n        \"operator\": \"eq\",\n        \"value\": \"EUR\",\n    }, {\n        \"field\": \"amount\",\n        \"operator\": \"lt\",\n        \"value\": 10000,\n    }],\n    aggregation=[{\n        \"metric\": \"count\",\n        \"operator\": \"gte\",\n        \"value\": 20.0,\n        \"window\": \"30d\",\n        \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"},\n    }, {\n        \"metric\": \"max\",\n        \"field\": \"amount\",\n        \"operator\": \"lt\",\n        \"value\": 10000.0,\n        \"window\": \"30d\",\n        \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"},\n    }],\n    actions=[{\n        \"type\": \"add_score\",\n        \"value\": 35,\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.rules.create({\n  title: \"Structuring - inbound (custom)\",\n  description: \"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\",\n  category: \"finance\",\n  mode: \"TEST\",\n  evaluation_mode: \"ALL\",\n  scope: {\n    transaction_types: [\"finance\"],\n    directions: [\"INBOUND\"],\n  },\n  conditions: [{\n    field: \"currency\",\n    operator: \"eq\",\n    value: \"EUR\",\n  }, {\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000,\n  }],\n  aggregation: [{\n    metric: \"count\",\n    operator: \"gte\",\n    value: 20.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }, {\n    metric: \"max\",\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }],\n  actions: [{\n    type: \"add_score\",\n    value: 35,\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Rules.Create(ctx, didit.TransactionRuleCreateRequest{\n\tTitle:          \"Structuring - inbound (custom)\",\n\tDescription:    didit.String(\"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\"),\n\tCategory:       \"finance\",\n\tMode:           \"TEST\",\n\tEvaluationMode: didit.Some(didit.TransactionRuleCreateRequestEvaluationMode(\"ALL\")),\n\tScope: didit.Some(didit.TransactionRuleScopeParam{\n\t\tTransactionTypes: didit.Some([]string{\"finance\"}),\n\t\tDirections:       didit.Some([]didit.TransactionRuleScopeDirections{\"INBOUND\"}),\n\t}),\n\tConditions: didit.Some([]didit.TransactionRuleConditionParam{{\n\t\tField:    \"currency\",\n\t\tOperator: \"eq\",\n\t\tValue:    didit.Some[any](\"EUR\"),\n\t}, {\n\t\tField:    \"amount\",\n\t\tOperator: \"lt\",\n\t\tValue:    didit.Some[any](10000),\n\t}}),\n\tAggregation: didit.Some([]didit.TransactionRuleAggregationParam{{\n\t\tMetric:   didit.Some(didit.TransactionRuleAggregationMetric(\"count\")),\n\t\tOperator: didit.Some(didit.TransactionRuleAggregationOperator(\"gte\")),\n\t\tValue:    20.0,\n\t\tWindow:   didit.String(\"30d\"),\n\t\tFilters:  didit.Some(map[string]any{\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}),\n\t}, {\n\t\tMetric:   didit.Some(didit.TransactionRuleAggregationMetric(\"max\")),\n\t\tField:    didit.String(\"amount\"),\n\t\tOperator: didit.Some(didit.TransactionRuleAggregationOperator(\"lt\")),\n\t\tValue:    10000.0,\n\t\tWindow:   didit.String(\"30d\"),\n\t\tFilters:  didit.Some(map[string]any{\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}),\n\t}}),\n\tActions: didit.Some([]didit.TransactionRuleActionParam{{\n\t\tType:  \"add_score\",\n\t\tValue: didit.Some[any](35),\n\t}}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.TransactionRuleAction;\nimport me.didit.types.TransactionRuleActionAddScore;\nimport me.didit.types.TransactionRuleAggregation;\nimport me.didit.types.TransactionRuleCondition;\nimport me.didit.types.TransactionRuleCreateRequest;\nimport me.didit.types.TransactionRuleScope;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().rules().create(TransactionRuleCreateRequest.builder()\n        .title(\"Structuring - inbound (custom)\")\n        .description(\"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\")\n        .category(\"finance\")\n        .mode(TransactionRuleCreateRequest.Mode.of(\"TEST\"))\n        .evaluationMode(TransactionRuleCreateRequest.EvaluationMode.of(\"ALL\"))\n        .scope(TransactionRuleScope.builder()\n                .transactionTypes(List.of(\"finance\"))\n                .directions(List.of(TransactionRuleScope.Directions.of(\"INBOUND\")))\n                .build())\n        .conditions(List.of(\n                TransactionRuleCondition.builder()\n                        .field(\"currency\")\n                        .operator(TransactionRuleCondition.Operator.of(\"eq\"))\n                        .value(\"EUR\")\n                        .build(),\n                TransactionRuleCondition.builder()\n                        .field(\"amount\")\n                        .operator(TransactionRuleCondition.Operator.of(\"lt\"))\n                        .value(10000)\n                        .build()))\n        .aggregation(List.of(\n                TransactionRuleAggregation.builder()\n                        .metric(TransactionRuleAggregation.Metric.of(\"count\"))\n                        .operator(TransactionRuleAggregation.Operator.of(\"gte\"))\n                        .value(20.0)\n                        .window(\"30d\")\n                        .filters(Map.of(\"direction\", \"INBOUND\", \"transaction_type\", \"finance\", \"subject_vendor_data\", \"__current__\", \"currency\", \"EUR\"))\n                        .build(),\n                TransactionRuleAggregation.builder()\n                        .metric(TransactionRuleAggregation.Metric.of(\"max\"))\n                        .field(\"amount\")\n                        .operator(TransactionRuleAggregation.Operator.of(\"lt\"))\n                        .value(10000.0)\n                        .window(\"30d\")\n                        .filters(Map.of(\"direction\", \"INBOUND\", \"transaction_type\", \"finance\", \"subject_vendor_data\", \"__current__\", \"currency\", \"EUR\"))\n                        .build()))\n        .actions(List.of(TransactionRuleAction.ofAddScore(TransactionRuleActionAddScore.builder()\n                .type(TransactionRuleActionAddScore.Type.of(\"add_score\"))\n                .value(35L)\n                .build())))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->rules->create([\n    'title' => 'Structuring - inbound (custom)',\n    'description' => '20+ inbound EUR transfers, all under 10,000 EUR, 30 days',\n    'category' => 'finance',\n    'mode' => 'TEST',\n    'evaluation_mode' => 'ALL',\n    'scope' => [\n        'transaction_types' => ['finance'],\n        'directions' => ['INBOUND'],\n    ],\n    'conditions' => [[\n        'field' => 'currency',\n        'operator' => 'eq',\n        'value' => 'EUR',\n    ], [\n        'field' => 'amount',\n        'operator' => 'lt',\n        'value' => 10000,\n    ]],\n    'aggregation' => [[\n        'metric' => 'count',\n        'operator' => 'gte',\n        'value' => 20.0,\n        'window' => '30d',\n        'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],\n    ], [\n        'metric' => 'max',\n        'field' => 'amount',\n        'operator' => 'lt',\n        'value' => 10000.0,\n        'window' => '30d',\n        'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],\n    ]],\n    'actions' => [[\n        'type' => 'add_score',\n        'value' => 35,\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.rules.create(\n  title: \"Structuring - inbound (custom)\",\n  description: \"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\",\n  category: \"finance\",\n  mode: \"TEST\",\n  evaluation_mode: \"ALL\",\n  scope: {\n    transaction_types: [\"finance\"],\n    directions: [\"INBOUND\"],\n  },\n  conditions: [{\n    field: \"currency\",\n    operator: \"eq\",\n    value: \"EUR\",\n  }, {\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000,\n  }],\n  aggregation: [{\n    metric: \"count\",\n    operator: \"gte\",\n    value: 20.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }, {\n    metric: \"max\",\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }],\n  actions: [{\n    type: \"add_score\",\n    value: 35,\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Rules.CreateAsync(new TransactionRuleCreateRequest\n{\n    Title = \"Structuring - inbound (custom)\",\n    Description = \"20+ inbound EUR transfers, all under 10,000 EUR, 30 days\",\n    Category = \"finance\",\n    Mode = \"TEST\",\n    EvaluationMode = new TransactionRuleCreateRequestEvaluationMode(\"ALL\"),\n    Scope = new TransactionRuleScope\n    {\n        TransactionTypes = new string[] { \"finance\" },\n        Directions = new TransactionRuleScopeDirections[] { \"INBOUND\" },\n    },\n    Conditions = new TransactionRuleCondition[]\n    {\n        new()\n        {\n            Field = \"currency\",\n            Operator = \"eq\",\n            Value = \"EUR\",\n        },\n        new()\n        {\n            Field = \"amount\",\n            Operator = \"lt\",\n            Value = 10000,\n        },\n    },\n    Aggregation = new TransactionRuleAggregation[]\n    {\n        new()\n        {\n            Metric = new TransactionRuleAggregationMetric(\"count\"),\n            Operator = new TransactionRuleAggregationOperator(\"gte\"),\n            Value = 20.0,\n            Window = \"30d\",\n            Filters = new Dictionary<string, object> { [\"direction\"] = \"INBOUND\", [\"transaction_type\"] = \"finance\", [\"subject_vendor_data\"] = \"__current__\", [\"currency\"] = \"EUR\" },\n        },\n        new()\n        {\n            Metric = new TransactionRuleAggregationMetric(\"max\"),\n            Field = \"amount\",\n            Operator = new TransactionRuleAggregationOperator(\"lt\"),\n            Value = 10000.0,\n            Window = \"30d\",\n            Filters = new Dictionary<string, object> { [\"direction\"] = \"INBOUND\", [\"transaction_type\"] = \"finance\", [\"subject_vendor_data\"] = \"__current__\", [\"currency\"] = \"EUR\" },\n        },\n    },\n    Actions = new TransactionRuleAction[]\n    {\n        new()\n        {\n            Type = new TransactionRuleActionType(\"add_score\"),\n            Value = 35,\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/transactions/rules/{rule_uuid}/": {
      "parameters": [
        {
          "name": "rule_uuid",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          },
          "description": "一覧取得または作成で返されたルールのuuidです。"
        }
      ],
      "get": {
        "summary": "ルールを取得",
        "description": "1つのルールを、完全な設定と実行カウンターとともに取得します。",
        "operationId": "getTransactionRule",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "ルールです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleDetail"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにそのようなルールはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/rules/RULE_UUID/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.rules.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.rules.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Rules.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().rules().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->rules->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.rules.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Rules.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "patch": {
        "summary": "ルールを更新",
        "description": "ルールを部分的に更新します。カスタムルールはすべての設定フィールドを受け付けます。ライブラリ（PRESET）ルールは`mode`のみを受け付けます。プリセットの有効化、無効化、またはTESTへの切り替えに使用してください。それ以外のフィールドを送信すると400が返ります。公開が保留されているライブラリルールのインストール済みコピーはオフになっています。その`mode`を`DISABLED`以外に設定すると400（\"This library rule cannot run yet: its conditions read data the rules engine cannot evaluate.\"）が返ります。",
        "operationId": "updateTransactionRule",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleUpdateRequest"
              },
              "example": {
                "mode": "ACTIVE"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "更新されたルール。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleDetail"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。ライブラリルールでmode以外のフィールドを指定した場合、または保留中のライブラリルールでDISABLED以外のmodeを指定した場合に返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/transactions/rules/RULE_UUID/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"mode\": \"ACTIVE\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.rules.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    mode=\"ACTIVE\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.rules.update(\"11111111-2222-3333-4444-555555555555\", {\n  mode: \"ACTIVE\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Rules.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TransactionRuleUpdateRequest{\n\tMode: didit.Some(didit.TransactionRuleUpdateRequestMode(\"ACTIVE\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TransactionRuleUpdateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().rules().update(\"11111111-2222-3333-4444-555555555555\", TransactionRuleUpdateRequest.builder()\n        .mode(TransactionRuleUpdateRequest.Mode.of(\"ACTIVE\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->rules->update('11111111-2222-3333-4444-555555555555', [\n    'mode' => 'ACTIVE',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.rules.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  mode: \"ACTIVE\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Rules.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new TransactionRuleUpdateRequest\n{\n    Mode = new TransactionRuleUpdateRequestMode(\"ACTIVE\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "summary": "ルールを削除",
        "description": "CUSTOMルールを削除します。削除は即時かつ永続的です。ルールは新しい取引に対して評価されなくなり、一覧からも消えます。一方、すでに評価済みの取引に対する過去のルール実行は、記録された結果を保持します。ライブラリのルールは削除できません。代わりにインストールエンドポイントからアンインストールしてください（ライブラリからいつでも再インストールできます）。",
        "operationId": "deleteTransactionRule",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "削除しました。"
          },
          "400": {
            "description": "このルールはライブラリのプリセットです。代わりにアンインストールしてください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "detail": "Library rules cannot be deleted. Uninstall them via the rules install endpoint instead."
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにそのようなルールはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/transactions/rules/RULE_UUID/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.transactions.rules.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.transactions.rules.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Transactions.Rules.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.transactions().rules().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->transactions->rules->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.rules.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Transactions.Rules.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ]
      }
    },
    "/v3/transactions/rules/backtest/": {
      "post": {
        "summary": "バックテストのルール設定",
        "description": "ルールを作成したり取引に変更を加えたりすることなく、仮のルール設定を最近の取引(新しい順、バックテストの上限まで)に対して評価します。ルールを有効化する前に、そのルールがどのくらいの頻度で一致していたか、何人の対象者に影響していたかを確認するために使用します。",
        "operationId": "backtestTransactionRules",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "backtest",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleBacktestRequest"
              },
              "example": {
                "conditions": [
                  {
                    "field": "currency",
                    "operator": "eq",
                    "value": "EUR"
                  },
                  {
                    "field": "amount",
                    "operator": "lt",
                    "value": 10000
                  }
                ],
                "aggregation": [
                  {
                    "metric": "count",
                    "operator": "gte",
                    "value": 20,
                    "window": "30d",
                    "filters": {
                      "direction": "INBOUND",
                      "transaction_type": "finance",
                      "subject_vendor_data": "__current__",
                      "currency": "EUR"
                    }
                  },
                  {
                    "metric": "max",
                    "field": "amount",
                    "operator": "lt",
                    "value": 10000,
                    "window": "30d",
                    "filters": {
                      "direction": "INBOUND",
                      "transaction_type": "finance",
                      "subject_vendor_data": "__current__",
                      "currency": "EUR"
                    }
                  }
                ],
                "evaluation_mode": "ALL",
                "scope": {
                  "transaction_types": [
                    "finance"
                  ],
                  "directions": [
                    "INBOUND"
                  ]
                },
                "period_days": 90
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "バックテストの統計。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleBacktestResult"
                },
                "example": {
                  "evaluated": 4820,
                  "matched": 12,
                  "affected_entities": 4,
                  "period_days": 90
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/transactions/rules/backtest/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"conditions\": [{\"field\": \"currency\", \"operator\": \"eq\", \"value\": \"EUR\"}, {\"field\": \"amount\", \"operator\": \"lt\", \"value\": 10000}], \"aggregation\": [{\"metric\": \"count\", \"operator\": \"gte\", \"value\": 20, \"window\": \"30d\", \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}}, {\"metric\": \"max\", \"field\": \"amount\", \"operator\": \"lt\", \"value\": 10000, \"window\": \"30d\", \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}}], \"evaluation_mode\": \"ALL\", \"scope\": {\"transaction_types\": [\"finance\"], \"directions\": [\"INBOUND\"]}, \"period_days\": 90}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.rules.backtest(\n    conditions=[{\n        \"field\": \"currency\",\n        \"operator\": \"eq\",\n        \"value\": \"EUR\",\n    }, {\n        \"field\": \"amount\",\n        \"operator\": \"lt\",\n        \"value\": 10000,\n    }],\n    aggregation=[{\n        \"metric\": \"count\",\n        \"operator\": \"gte\",\n        \"value\": 20.0,\n        \"window\": \"30d\",\n        \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"},\n    }, {\n        \"metric\": \"max\",\n        \"field\": \"amount\",\n        \"operator\": \"lt\",\n        \"value\": 10000.0,\n        \"window\": \"30d\",\n        \"filters\": {\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"},\n    }],\n    evaluation_mode=\"ALL\",\n    scope={\n        \"transaction_types\": [\"finance\"],\n        \"directions\": [\"INBOUND\"],\n    },\n    period_days=90,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.rules.backtest({\n  conditions: [{\n    field: \"currency\",\n    operator: \"eq\",\n    value: \"EUR\",\n  }, {\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000,\n  }],\n  aggregation: [{\n    metric: \"count\",\n    operator: \"gte\",\n    value: 20.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }, {\n    metric: \"max\",\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }],\n  evaluation_mode: \"ALL\",\n  scope: {\n    transaction_types: [\"finance\"],\n    directions: [\"INBOUND\"],\n  },\n  period_days: 90,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Rules.Backtest(ctx, didit.TransactionRuleBacktestRequest{\n\tConditions: didit.Some([]didit.TransactionRuleConditionParam{{\n\t\tField:    \"currency\",\n\t\tOperator: \"eq\",\n\t\tValue:    didit.Some[any](\"EUR\"),\n\t}, {\n\t\tField:    \"amount\",\n\t\tOperator: \"lt\",\n\t\tValue:    didit.Some[any](10000),\n\t}}),\n\tAggregation: didit.Some([]didit.TransactionRuleAggregationParam{{\n\t\tMetric:   didit.Some(didit.TransactionRuleAggregationMetric(\"count\")),\n\t\tOperator: didit.Some(didit.TransactionRuleAggregationOperator(\"gte\")),\n\t\tValue:    20.0,\n\t\tWindow:   didit.String(\"30d\"),\n\t\tFilters:  didit.Some(map[string]any{\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}),\n\t}, {\n\t\tMetric:   didit.Some(didit.TransactionRuleAggregationMetric(\"max\")),\n\t\tField:    didit.String(\"amount\"),\n\t\tOperator: didit.Some(didit.TransactionRuleAggregationOperator(\"lt\")),\n\t\tValue:    10000.0,\n\t\tWindow:   didit.String(\"30d\"),\n\t\tFilters:  didit.Some(map[string]any{\"direction\": \"INBOUND\", \"transaction_type\": \"finance\", \"subject_vendor_data\": \"__current__\", \"currency\": \"EUR\"}),\n\t}}),\n\tEvaluationMode: didit.Some(didit.TransactionRuleBacktestRequestEvaluationMode(\"ALL\")),\n\tScope: didit.Some(didit.TransactionRuleScopeParam{\n\t\tTransactionTypes: didit.Some([]string{\"finance\"}),\n\t\tDirections:       didit.Some([]didit.TransactionRuleScopeDirections{\"INBOUND\"}),\n\t}),\n\tPeriodDays: didit.Int(90),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.TransactionRuleAggregation;\nimport me.didit.types.TransactionRuleBacktestRequest;\nimport me.didit.types.TransactionRuleCondition;\nimport me.didit.types.TransactionRuleScope;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().rules().backtest(TransactionRuleBacktestRequest.builder()\n        .conditions(List.of(\n                TransactionRuleCondition.builder()\n                        .field(\"currency\")\n                        .operator(TransactionRuleCondition.Operator.of(\"eq\"))\n                        .value(\"EUR\")\n                        .build(),\n                TransactionRuleCondition.builder()\n                        .field(\"amount\")\n                        .operator(TransactionRuleCondition.Operator.of(\"lt\"))\n                        .value(10000)\n                        .build()))\n        .aggregation(List.of(\n                TransactionRuleAggregation.builder()\n                        .metric(TransactionRuleAggregation.Metric.of(\"count\"))\n                        .operator(TransactionRuleAggregation.Operator.of(\"gte\"))\n                        .value(20.0)\n                        .window(\"30d\")\n                        .filters(Map.of(\"direction\", \"INBOUND\", \"transaction_type\", \"finance\", \"subject_vendor_data\", \"__current__\", \"currency\", \"EUR\"))\n                        .build(),\n                TransactionRuleAggregation.builder()\n                        .metric(TransactionRuleAggregation.Metric.of(\"max\"))\n                        .field(\"amount\")\n                        .operator(TransactionRuleAggregation.Operator.of(\"lt\"))\n                        .value(10000.0)\n                        .window(\"30d\")\n                        .filters(Map.of(\"direction\", \"INBOUND\", \"transaction_type\", \"finance\", \"subject_vendor_data\", \"__current__\", \"currency\", \"EUR\"))\n                        .build()))\n        .evaluationMode(TransactionRuleBacktestRequest.EvaluationMode.of(\"ALL\"))\n        .scope(TransactionRuleScope.builder()\n                .transactionTypes(List.of(\"finance\"))\n                .directions(List.of(TransactionRuleScope.Directions.of(\"INBOUND\")))\n                .build())\n        .periodDays(90L)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->rules->backtest([\n    'conditions' => [[\n        'field' => 'currency',\n        'operator' => 'eq',\n        'value' => 'EUR',\n    ], [\n        'field' => 'amount',\n        'operator' => 'lt',\n        'value' => 10000,\n    ]],\n    'aggregation' => [[\n        'metric' => 'count',\n        'operator' => 'gte',\n        'value' => 20.0,\n        'window' => '30d',\n        'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],\n    ], [\n        'metric' => 'max',\n        'field' => 'amount',\n        'operator' => 'lt',\n        'value' => 10000.0,\n        'window' => '30d',\n        'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],\n    ]],\n    'evaluation_mode' => 'ALL',\n    'scope' => [\n        'transaction_types' => ['finance'],\n        'directions' => ['INBOUND'],\n    ],\n    'period_days' => 90,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.rules.backtest(\n  conditions: [{\n    field: \"currency\",\n    operator: \"eq\",\n    value: \"EUR\",\n  }, {\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000,\n  }],\n  aggregation: [{\n    metric: \"count\",\n    operator: \"gte\",\n    value: 20.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }, {\n    metric: \"max\",\n    field: \"amount\",\n    operator: \"lt\",\n    value: 10000.0,\n    window: \"30d\",\n    filters: { direction: \"INBOUND\", transaction_type: \"finance\", subject_vendor_data: \"__current__\", currency: \"EUR\" },\n  }],\n  evaluation_mode: \"ALL\",\n  scope: {\n    transaction_types: [\"finance\"],\n    directions: [\"INBOUND\"],\n  },\n  period_days: 90\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Rules.BacktestAsync(new TransactionRuleBacktestRequest\n{\n    Conditions = new TransactionRuleCondition[]\n    {\n        new()\n        {\n            Field = \"currency\",\n            Operator = \"eq\",\n            Value = \"EUR\",\n        },\n        new()\n        {\n            Field = \"amount\",\n            Operator = \"lt\",\n            Value = 10000,\n        },\n    },\n    Aggregation = new TransactionRuleAggregation[]\n    {\n        new()\n        {\n            Metric = new TransactionRuleAggregationMetric(\"count\"),\n            Operator = new TransactionRuleAggregationOperator(\"gte\"),\n            Value = 20.0,\n            Window = \"30d\",\n            Filters = new Dictionary<string, object> { [\"direction\"] = \"INBOUND\", [\"transaction_type\"] = \"finance\", [\"subject_vendor_data\"] = \"__current__\", [\"currency\"] = \"EUR\" },\n        },\n        new()\n        {\n            Metric = new TransactionRuleAggregationMetric(\"max\"),\n            Field = \"amount\",\n            Operator = new TransactionRuleAggregationOperator(\"lt\"),\n            Value = 10000.0,\n            Window = \"30d\",\n            Filters = new Dictionary<string, object> { [\"direction\"] = \"INBOUND\", [\"transaction_type\"] = \"finance\", [\"subject_vendor_data\"] = \"__current__\", [\"currency\"] = \"EUR\" },\n        },\n    },\n    EvaluationMode = new TransactionRuleBacktestRequestEvaluationMode(\"ALL\"),\n    Scope = new TransactionRuleScope\n    {\n        TransactionTypes = new string[] { \"finance\" },\n        Directions = new TransactionRuleScopeDirections[] { \"INBOUND\" },\n    },\n    PeriodDays = 90,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/transactions/rules/library/": {
      "get": {
        "summary": "ルールライブラリを一覧表示",
        "description": "プリセットルールライブラリ（150+件のルール）を閲覧します。各エントリの完全な設定と、このアプリケーションに対する`is_installed`フラグが含まれます。バンドル、カテゴリ、またはフリーテキスト検索でフィルターできます。ルールエンジンがまだ評価できないデータを条件で参照するライブラリルールは、実行可能になるまで非公開となります。非公開のルールは一覧に表示されません。",
        "operationId": "listTransactionRuleLibrary",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "list_library",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "bundle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "バンドルで絞り込み(例:finance、aml_ctf、crypto_monitoring、travel_rule)"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "カテゴリで絞り込み"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "タイトルと説明に対する大文字・小文字を区別しない一致"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "ページサイズ"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "ページオフセット"
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされたライブラリエントリー。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionRuleLibraryEntry"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/rules/library/?bundle=finance' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.transactions.rules.list_library():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.transactions.rules.listLibrary()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.Rules.ListLibraryAutoPaging(ctx, didit.TransactionsRulesListLibraryParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.transactions().rules().listLibrary()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->transactions->rules->listLibrary() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.rules.list_library.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Transactions.Rules.ListLibraryAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/transactions/rules/install/": {
      "post": {
        "summary": "ライブラリルールをインストール",
        "description": "`library_keys`または`bundle`全体を指定して、1つ以上のプリセットをアプリケーションにインストールします。インストールされたプリセットは、トランザクションモニタリングが有効な間はすぐに有効になり、それ以外の場合は無効になります。インストール済みのキーはスキップされます。ルールエンジンがまだ評価できないデータを条件で参照するライブラリルールは、実行できるようになるまで保留されます。そのようなルールを`library_keys`で指定したリクエストは400を返し、何もインストールしません（\"These library rules cannot run yet: their conditions read data the rules engine cannot evaluate.\"の後にキーが続きます）。`bundle`のインストールでは、そのルールはスキップされます。保留されたルールは、条件を評価できるようになると自動的に戻ります。ライブラリにない`library_keys`のエントリは、拒否されずにスキップされます。",
        "operationId": "installTransactionRuleLibrary",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "install_library",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleInstallRequest"
              },
              "example": {
                "library_keys": [
                  "structuring-inbound",
                  "structuring-outbound"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "インストールされた対象です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleInstallResult"
                },
                "example": {
                  "installed_library_keys": [
                    "structuring-inbound",
                    "structuring-outbound"
                  ],
                  "installed_count": 2
                }
              }
            }
          },
          "400": {
            "description": "library_keysとbundleのどちらも指定されていない、`library_keys`がリストではない、または`library_keys`のエントリが提供対象外です。不明なエントリはスキップされ、そのエントリを除いて200が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/transactions/rules/install/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"library_keys\": [\"structuring-inbound\", \"structuring-outbound\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.rules.install_library(\n    library_keys=[\"structuring-inbound\", \"structuring-outbound\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.rules.installLibrary({\n  library_keys: [\"structuring-inbound\", \"structuring-outbound\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Rules.InstallLibrary(ctx, didit.TransactionRuleInstallRequest{\n\tLibraryKeys: didit.Some([]string{\"structuring-inbound\", \"structuring-outbound\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.TransactionRuleInstallRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().rules().installLibrary(TransactionRuleInstallRequest.builder()\n        .libraryKeys(List.of(\"structuring-inbound\", \"structuring-outbound\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->rules->installLibrary([\n    'library_keys' => ['structuring-inbound', 'structuring-outbound'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.rules.install_library(library_keys: [\"structuring-inbound\", \"structuring-outbound\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Rules.InstallLibraryAsync(new TransactionRuleInstallRequest\n{\n    LibraryKeys = new string[] { \"structuring-inbound\", \"structuring-outbound\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "summary": "ライブラリルールのアンインストール",
        "description": "`library_keys`または`bundle`全体を指定して、インストール済みのプリセットをアプリケーションから削除します。アンインストールされたプリセットは直ちに評価を停止し、いつでもライブラリから再インストールできます。",
        "operationId": "uninstallTransactionRuleLibrary",
        "x-didit-sdk": {
          "resource": "transactions.rules",
          "method": "uninstall_library",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleInstallRequest"
              },
              "example": {
                "bundle": "responsible_gaming"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "削除されたプリセットの数。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleInstallResult"
                },
                "example": {
                  "uninstalled_count": 5
                }
              }
            }
          },
          "400": {
            "description": "library_keysとbundleのどちらも指定されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/transactions/rules/install/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"bundle\": \"responsible_gaming\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.rules.uninstall_library(\n    bundle=\"responsible_gaming\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.rules.uninstallLibrary({\n  bundle: \"responsible_gaming\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Rules.UninstallLibrary(ctx, didit.TransactionRuleInstallRequest{\n\tBundle: didit.String(\"responsible_gaming\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TransactionRuleInstallRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().rules().uninstallLibrary(TransactionRuleInstallRequest.builder()\n        .bundle(\"responsible_gaming\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->rules->uninstallLibrary([\n    'bundle' => 'responsible_gaming',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.rules.uninstall_library(bundle: \"responsible_gaming\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Rules.UninstallLibraryAsync(new TransactionRuleInstallRequest\n{\n    Bundle = \"responsible_gaming\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/": {
      "get": {
        "summary": "ネットワークを一覧表示",
        "description": "このアプリケーションの組織内で検出された不正ネットワークを一覧表示します。デフォルトではリスクの高い順に並びます。デフォルトでは棄却済みのネットワークは除外されます。含める場合はstatusを指定してください。サンドボックスのアプリケーションにネットワークが存在することはありません。クラスタリングではサンドボックスのデータが完全に除外されます。すべてのレスポンスには、組織の`sharing_mode`と、組織横断のシグナルがその組織に適用されるかどうか（`cross_org_available`、`cross_org_unavailable_reason`）が含まれます。`kpis`はフィルターに一致するネットワークを集計し、`counts`はアプリケーションから参照できるすべてのネットワークを集計します。ページのみが必要な場合は、`summary=false`を渡すと両方を省略できます。フルアクセスのAPIキー、またはコンソールメンバーの場合は`list:networks`が必要です。",
        "operationId": "list_networks",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "含めるステータスのカンマ区切りリスト:active,in_review,resolved,dismissed。省略するとdismissedは除外されます。"
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "identity",
                "transactions"
              ]
            },
            "description": "`transactions`はメンバー全員が取引当事者であるネットワークを残し、`identity`はそれ以外のすべてのネットワークを残します。両方を対象にする場合は省略してください。`counts.views`と`counts.facets`も絞り込まれます。その他の値を指定すると400が返されます。"
          },
          {
            "name": "signal_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りのシグナルタイプ:ip_address,device,face,document_number,phone,email,address。"
          },
          {
            "name": "pattern_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りのパターンタイプ(例:exact_same_device,same_email)。"
          },
          {
            "name": "risk_band",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りの区分: low,medium,high。"
          },
          {
            "name": "min_size",
            "in": "query",
            "schema": {
              "type": "integer"
            },
            "description": "メンバー数の最小値。"
          },
          {
            "name": "max_size",
            "in": "query",
            "schema": {
              "type": "integer"
            },
            "description": "最大メンバー数です。"
          },
          {
            "name": "assignee",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りの担当者: `unassigned`、メンバーのメールアドレス（大文字と小文字を区別せずに照合）、または呼び出し元のコンソールメンバーを示す`me`。いずれかの値に一致するネットワークが該当します。`me`にはコンソールメンバーのトークンが必要です。APIキーの場合は400 `{\"assignee\": [\"\\\"me\\\" needs a user token; an API key has no assignee identity.\"]}`が返されます。"
          },
          {
            "name": "priority",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "カンマ区切りの優先度:`low`、`medium`、`high`、または優先度のないネットワークを示す`none`。それ以外の値を指定すると、400(`{\"priority\": \"Unknown priority: <values>.\"}`)が返されます。"
          },
          {
            "name": "risk_min",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            },
            "description": "リスクスコアの最小値。0〜100の整数です。整数以外の値を指定すると、400（`{\"risk_min\": \"Use a whole number from 0 to 100.\"}`）が返されます。"
          },
          {
            "name": "has_case",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "`true`を指定するとアプリケーションがケースを開いたネットワークを、`false`を指定するとそれ以外のネットワークを残します。それ以外の値は無視されます。"
          },
          {
            "name": "date_from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "last_activity_atの下限（ISO 8601形式の日付または日時）。"
          },
          {
            "name": "date_to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "first_activity_atの上限（ISO 8601形式の日付または日時）。"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "ネットワーク名、メンバー名、network_id（N-0001）、およびpattern_typeトークンの完全一致を対象とした自由記述検索。"
          },
          {
            "name": "ordering",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "risk_score、-risk_score、last_activity_at、-last_activity_at、first_activity_at、-first_activity_at、network_number、-network_numberのいずれかです。デフォルトは-risk_score,-last_activity_atです。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 500
            },
            "description": "ページサイズ（1〜500）。デフォルトは100です。"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            },
            "description": "最初のレコードの0始まりのオフセットです。"
          },
          {
            "name": "summary",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            },
            "description": "`false`の場合、`kpis`と`counts`を含めず、ページとその`count`のみを返します。デフォルトは`true`です。`true`または`false`以外の値を指定すると400が返されます。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/?status=active,in_review&ordering=-risk_score' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.networks.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.networks.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Networks.ListAutoPaging(ctx, didit.NetworksListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.networks().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->networks->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.networks.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Networks.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページネーションされたネットワーク一覧。組織の共有モードと組織間での利用可否を含み、`summary=false`でない限り`kpis`と`counts`も含まれます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "integer",
                      "nullable": true,
                      "description": "次ページのオフセット。最終ページではnullです。"
                    },
                    "previous": {
                      "type": "integer",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/NetworkListItem"
                      }
                    },
                    "kpis": {
                      "type": "object",
                      "description": "各キーは、現在のフィルターに一致する結果に対する{value, delta}です。`summary=false`の場合は省略されます。",
                      "properties": {
                        "active": {
                          "type": "object"
                        },
                        "in_review": {
                          "type": "object"
                        },
                        "applicants_involved": {
                          "type": "object"
                        },
                        "detected_this_period": {
                          "type": "object"
                        },
                        "false_positive_rate": {
                          "type": "object"
                        }
                      }
                    },
                    "counts": {
                      "$ref": "#/components/schemas/NetworkListCounts"
                    },
                    "sharing_mode": {
                      "type": "string",
                      "enum": [
                        "off",
                        "private",
                        "global"
                      ],
                      "description": "組織の組織間共有モード。`global`のみが組織をまたいでネットワークを比較します。`private`と`off`では、比較は組織自身の履歴内に限定されます。",
                      "example": "global"
                    },
                    "cross_org_available": {
                      "type": "boolean",
                      "description": "この組織に組織横断シグナルが適用されるかどうかです。Enterpriseプランと`global`共有モードの両方が必要です。",
                      "example": true
                    },
                    "cross_org_unavailable_reason": {
                      "type": "string",
                      "enum": [
                        "plan",
                        "sharing_mode"
                      ],
                      "nullable": true,
                      "description": "組織間シグナルが適用されない理由。以下の順にチェックされます。`plan`：組織のプランに組織間不正ネットワークが含まれていません（Enterpriseプランが必要です）。共有モードに関係なく該当します。`sharing_mode`：プランには含まれていますが、共有モードが`private`または`off`です。`cross_org_available`が`true`の場合はnullです。",
                      "example": null
                    }
                  },
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results",
                    "sharing_mode",
                    "cross_org_available",
                    "cross_org_unavailable_reason"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "フィルター、並び順、ページネーション、または`summary`の値が無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid summary": {
                    "summary": "サマリーが無効です",
                    "value": {
                      "summary": [
                        "Must be \"true\" or \"false\"."
                      ]
                    }
                  },
                  "Invalid scope": {
                    "summary": "スコープが無効です",
                    "value": {
                      "scope": [
                        "Use identity or transactions."
                      ]
                    }
                  },
                  "Unsupported ordering": {
                    "summary": "サポートされていない並び順",
                    "value": [
                      "Unsupported ordering."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報がないか無効です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "認証情報がないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが別のアプリケーションに属しているか、アクセスが制限されたキーです。ネットワークのエンドポイントにはフルアクセスキーが必要です。コンソールメンバーのトークンには`list:networks`が必要です。組織でネットワーク機能が有効になっていない場合も、`code: networks_not_entitled`とともに返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Networks not enabled": {
                    "summary": "ネットワークが有効化されていません",
                    "value": {
                      "detail": "Networks is disabled for this organization. Contact Didit support if you believe this is an error.",
                      "code": "networks_not_entitled"
                    }
                  },
                  "Restricted API key": {
                    "summary": "制限付きAPIキー",
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "No permission": {
                    "summary": "権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/": {
      "get": {
        "summary": "ネットワークを取得",
        "description": "1つのネットワークの詳細情報を取得します。統計、不正タグとリスクシグナルに加え、組織の`sharing_mode`と組織間での利用可否、そのネットワークに対するアプリケーションの`tags`、メンバーの`outcomes`、パターンスコア（`patterns`）が含まれます。フルアクセスのAPIキー、またはコンソールメンバーの場合は`read:networks`が必要です。",
        "operationId": "get_network",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "n3a5e000-0000-4000-8000-000000000001"
            },
            "description": "ネットワークのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.retrieve(\n    \"n3a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.retrieve(\"n3a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.Retrieve(ctx, \"n3a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().retrieve(\"n3a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->retrieve('n3a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.retrieve(\"n3a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.RetrieveAsync(\"n3a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークの詳細。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkDetailResponse"
                },
                "example": {
                  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "network_id": "N-0042",
                  "name": null,
                  "status": "in_review",
                  "risk": {
                    "score": 82,
                    "band": "high",
                    "bar": 0.82
                  },
                  "pattern_types": [
                    "exact_same_device",
                    "same_email"
                  ],
                  "signal_types": [
                    "device",
                    "email"
                  ],
                  "member_counts": {
                    "total": 3,
                    "users": 3,
                    "businesses": 0,
                    "transaction_parties": 0
                  },
                  "member_status": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "not_completed": 1
                  },
                  "signal_coverage": {
                    "device": {
                      "signals": 1,
                      "subjects": 3,
                      "coverage": 1.0
                    },
                    "email": {
                      "signals": 1,
                      "subjects": 2,
                      "coverage": 0.6667
                    }
                  },
                  "first_activity_at": "2026-10-01T09:12:44Z",
                  "last_activity_at": "2026-10-12T16:03:10Z",
                  "stats": {
                    "members": {
                      "total": 3,
                      "users": 3,
                      "businesses": 0,
                      "transaction_parties": 0
                    },
                    "member_status": {
                      "approved": 1,
                      "declined": 1,
                      "in_review": 0,
                      "not_completed": 1
                    },
                    "signals": {
                      "total": 2,
                      "by_type": {
                        "device": {
                          "signals": 1,
                          "subjects": 3,
                          "coverage": 1.0
                        },
                        "email": {
                          "signals": 1,
                          "subjects": 2,
                          "coverage": 0.6667
                        }
                      }
                    }
                  },
                  "fraud_tags": [],
                  "risk_signals": {
                    "residential_proxy_reuse": {
                      "detected": false,
                      "signal_count": 0,
                      "max_subject_count": 0
                    },
                    "email_intelligence": {
                      "enriched_signal_count": 1,
                      "high_risk_count": 0,
                      "social_profile_count": 0
                    },
                    "phone_intelligence": {
                      "enriched_signal_count": 0,
                      "high_risk_count": 0
                    }
                  },
                  "reviewed_at": "2026-10-12T16:30:00Z",
                  "reviewed_by": "reviewer@example.com",
                  "review_reason": "Shared device across three new accounts.",
                  "notes_count": 0,
                  "sharing_mode": "global",
                  "cross_org_available": true,
                  "cross_org_unavailable_reason": null,
                  "tags": [
                    {
                      "uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
                      "name": "SUSPICIOUS",
                      "color": "#6366F1",
                      "source": "custom",
                      "added_by": null,
                      "added_at": "2026-10-13T08:15:00Z"
                    }
                  ],
                  "outcomes": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "total": 3
                  },
                  "patterns": [
                    {
                      "type": "background",
                      "score": 0.8125,
                      "members": 3,
                      "reason": null,
                      "computed_at": "2026-10-13T08:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "ネットワークが見つかりません（またはこのアプリケーションから参照できません）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報がないか無効です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "認証情報がないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが別のアプリケーションに属しているか、アクセスが制限されたキーです。ネットワークのエンドポイントにはフルアクセスキーが必要です。コンソールメンバーのトークンには`read:networks`が必要です。組織でネットワーク機能が有効になっていない場合も、`code: networks_not_entitled`とともに返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Networks not enabled": {
                    "summary": "ネットワークが有効化されていません",
                    "value": {
                      "detail": "Networks is disabled for this organization. Contact Didit support if you believe this is an error.",
                      "code": "networks_not_entitled"
                    }
                  },
                  "Restricted API key": {
                    "summary": "制限付きAPIキー",
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "No permission": {
                    "summary": "権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/graph/": {
      "get": {
        "summary": "ネットワークグラフを取得",
        "description": "ネットワークを、サブジェクトノード(ベンダーのユーザー、ベンダーの企業、取引の当事者)とシグナルノード(それらを結び付ける共有のデバイス/IP/顔/書類/電話番号/メールアドレス/住所の値)からなるグラフとして取得します。エッジはメンバーシップを表します。",
        "operationId": "get_network_graph",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "retrieve_graph",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "n3a5e000-0000-4000-8000-000000000001"
            },
            "description": "ネットワークのUUID。"
          },
          {
            "name": "depth",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "all"
              ]
            },
            "description": "フォーカス対象から含めるホップ数です。デフォルトはすべて(無制限)です。"
          },
          {
            "name": "focus_kind",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "vendor_user",
                "vendor_business",
                "transaction_party"
              ]
            },
            "description": "グラフの中心に置く対象の種類。focus_idと一緒に指定する必要があります。深さが制限されていて、どちらも指定されていない場合は、任意のメンバーがデフォルトになります。"
          },
          {
            "name": "focus_id",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "グラフの中心に置く対象のUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/graph/?depth=2' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.retrieve_graph(\n    \"n3a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.retrieveGraph(\"n3a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.RetrieveGraph(ctx, \"n3a5e000-0000-4000-8000-000000000001\", didit.NetworksRetrieveGraphParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().retrieveGraph(\"n3a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->retrieveGraph('n3a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.retrieve_graph(\"n3a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.RetrieveGraphAsync(\"n3a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークグラフ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkGraph"
                }
              }
            }
          },
          "404": {
            "description": "ネットワークが見つかりません（またはこのアプリケーションから参照できません）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/members/": {
      "get": {
        "summary": "ネットワークメンバーを一覧表示",
        "description": "このネットワークに属するサブジェクト（ベンダーユーザー、ベンダー企業、取引の当事者）を一覧表示します。",
        "operationId": "list_network_members",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "list_members",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "n3a5e000-0000-4000-8000-000000000001"
            },
            "description": "ネットワークのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/members/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.list_members(\n    \"n3a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.listMembers(\"n3a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.ListMembers(ctx, \"n3a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().listMembers(\"n3a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->listMembers('n3a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.list_members(\"n3a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.ListMembersAsync(\"n3a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークのメンバー。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/NetworkMember"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "ネットワークが見つかりません（またはこのアプリケーションから参照できません）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/signals/": {
      "get": {
        "summary": "ネットワークシグナルを一覧表示",
        "description": "このネットワークのメンバーを結び付けるシグナル（共有されたデバイス、IP、顔、書類番号、電話番号、メールアドレス、住所の値）を一覧表示します。",
        "operationId": "list_network_signals",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "list_signals",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "n3a5e000-0000-4000-8000-000000000001"
            },
            "description": "ネットワークのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/signals/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.list_signals(\n    \"n3a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.listSignals(\"n3a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.ListSignals(ctx, \"n3a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().listSignals(\"n3a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->listSignals('n3a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.list_signals(\"n3a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.ListSignalsAsync(\"n3a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークのシグナル。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/NetworkSignal"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "ネットワークが見つかりません（またはこのアプリケーションから参照できません）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/timeline/": {
      "get": {
        "summary": "ネットワークのタイムラインを取得",
        "description": "`contract`を指定しない場合: ネットワーク自体のイベント（検出、各シグナルの最新の観測とそのレビュー）を古い順に返し、ページネーションはありません。`limit`、`cursor`、`event_type`は無視されます。`contract=2`を指定した場合: 型付きのタイムラインを新しい順に返し、カーソルでページネーションされます。メンバーアカウントの行動（認証の試行、取引、events APIを通じて送信したサインイン、およびそれらが該当した稼働中のルール）と、ネットワークについて作成されたケースが追加されます。`note_added`イベントはコンソールメンバーにのみ返され、APIキーには決して返されません。フルアクセスのAPIキー、またはコンソールメンバーの場合は`read:networks`が必要です。",
        "operationId": "get_network_timeline",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "retrieve_timeline",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "n3a5e000-0000-4000-8000-000000000001"
            },
            "description": "ネットワークのUUID。"
          },
          {
            "name": "contract",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "2"
              ]
            },
            "description": "`2`を指定すると型付きタイムラインを返します。デフォルトのタイムラインを使う場合は省略してください。その他の値は400を返します。"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 100
            },
            "description": "型付きタイムラインのみ。1ページあたりのイベント数で、1から500です。デフォルトは100です。"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "型付きタイムラインのみ。前のページの`next_cursor`です。無効または空のカーソルは400を返します。"
          },
          {
            "name": "event_type",
            "in": "query",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "maxItems": 20,
              "items": {
                "type": "string",
                "enum": [
                  "network_detected",
                  "signal_observed",
                  "network_active",
                  "network_in_review",
                  "network_resolved",
                  "network_dismissed",
                  "verification_attempt",
                  "transaction",
                  "login",
                  "rule_hit",
                  "case_linked",
                  "note_added"
                ]
              }
            },
            "description": "型付きタイムラインのみ。保持するイベントタイプです。繰り返し指定またはカンマ区切りで、最大20個まで指定できます。デフォルトはすべてのタイプです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/timeline/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "curl",
            "label": "curl (typed timeline)",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/3fa85f64-5717-4562-b3fc-2c963f66afa6/timeline/?contract=2&limit=50&event_type=verification_attempt,login' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.retrieve_timeline(\n    \"n3a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.retrieveTimeline(\"n3a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.RetrieveTimeline(ctx, \"n3a5e000-0000-4000-8000-000000000001\", didit.NetworksRetrieveTimelineParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().retrieveTimeline(\"n3a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->retrieveTimeline('n3a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.retrieve_timeline(\"n3a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.RetrieveTimelineAsync(\"n3a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "`contract`なし：`{results}`、古い順、ページネーションなし。`contract=2`あり：`{results, next_cursor}`、新しい順。",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/NetworkTimeline"
                    },
                    {
                      "$ref": "#/components/schemas/NetworkTimelinePage"
                    }
                  ]
                },
                "examples": {
                  "Default timeline": {
                    "summary": "contractを指定しない場合",
                    "value": {
                      "results": [
                        {
                          "event_type": "network_detected",
                          "occurred_at": "2026-10-01T09:12:44Z",
                          "label": "Network detected",
                          "metadata": {
                            "network_id": "N-0042"
                          }
                        },
                        {
                          "event_type": "signal_observed",
                          "occurred_at": "2026-10-12T16:03:10Z",
                          "label": "device observed",
                          "metadata": {
                            "signal_type": "device",
                            "subject_count": 3,
                            "is_hub": false
                          }
                        },
                        {
                          "event_type": "network_in_review",
                          "occurred_at": "2026-10-12T16:30:00Z",
                          "label": "Network in_review",
                          "metadata": {
                            "reason": "Shared device across three new accounts."
                          }
                        }
                      ]
                    }
                  },
                  "Typed timeline": {
                    "summary": "contract=2の場合",
                    "value": {
                      "results": [
                        {
                          "id": "monitoring_event:9b2f1c3e-4d5a-4b6c-8d7e-0f1a2b3c4d5e",
                          "event_type": "login",
                          "occurred_at": "2026-10-12T18:41:02Z",
                          "ingested_at": "2026-10-12T18:41:03Z",
                          "label": "Login",
                          "metadata": {},
                          "account": {
                            "node_id": "vendor_user:5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f",
                            "node_type": "account",
                            "uuid": "5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f",
                            "vendor_data": "user-1042",
                            "display_name": "Alex Example",
                            "ownership": "owned",
                            "route": {
                              "kind": "user",
                              "id": "5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f",
                              "application_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
                            }
                          },
                          "source_ref": {
                            "kind": "monitoring_event",
                            "id": "9b2f1c3e-4d5a-4b6c-8d7e-0f1a2b3c4d5e",
                            "ownership": "owned"
                          },
                          "verification_attempt": null,
                          "transaction": null,
                          "login": {
                            "action": "auth.login",
                            "succeeded": true,
                            "status": "APPROVED",
                            "ip": {
                              "address": "203.0.113.24",
                              "country_code": "ES",
                              "city": "Madrid",
                              "connection_type": null,
                              "is_vpn_or_tor": false,
                              "is_data_center": false
                            },
                            "device": {
                              "fingerprint": "fp_0a1b2c3d",
                              "label": "Chrome · Android"
                            },
                            "is_first_login": false,
                            "is_new_device": true
                          },
                          "rule_hit": null,
                          "case_linked": null,
                          "note_added": null
                        },
                        {
                          "id": "session:1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                          "event_type": "verification_attempt",
                          "occurred_at": "2026-10-12T16:03:10Z",
                          "ingested_at": "2026-10-12T16:03:10Z",
                          "label": "Verification attempt 2 of 2",
                          "metadata": {},
                          "account": {
                            "node_id": "vendor_user:5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f",
                            "node_type": "account",
                            "uuid": "5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f",
                            "vendor_data": "user-1042",
                            "display_name": "Alex Example",
                            "ownership": "owned",
                            "route": {
                              "kind": "user",
                              "id": "5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f",
                              "application_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
                            }
                          },
                          "source_ref": {
                            "kind": "session",
                            "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                            "ownership": "owned",
                            "route": {
                              "kind": "session",
                              "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                              "application_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
                            }
                          },
                          "verification_attempt": {
                            "session_id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                            "session_number": 1287,
                            "attempt": 2,
                            "attempt_count": 2,
                            "status": "Approved",
                            "status_changed_at": "2026-10-12T16:05:41Z",
                            "decline_reasons": []
                          },
                          "transaction": null,
                          "login": null,
                          "rule_hit": null,
                          "case_linked": null,
                          "note_added": null
                        },
                        {
                          "id": "signal_observed:8d7c6b5a-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
                          "event_type": "signal_observed",
                          "occurred_at": "2026-10-12T16:03:10Z",
                          "ingested_at": "2026-10-01T09:12:44Z",
                          "label": "device observed",
                          "metadata": {
                            "signal_type": "device",
                            "subject_count": 3,
                            "is_hub": false
                          },
                          "account": null,
                          "source_ref": null,
                          "verification_attempt": null,
                          "transaction": null,
                          "login": null,
                          "rule_hit": null,
                          "case_linked": null,
                          "note_added": null
                        }
                      ],
                      "next_cursor": "eyJ0IjoiMjAyNi0xMC0xMlQxNjowMzoxMCswMDowMCIsImMiOiIyMDI2LTEwLTAxVDA5OjEyOjQ0KzAwOjAwIiwiciI6MSwidSI6IjhkN2M2YjVhLTRlM2YtNGEyYi05YzFkLTBlOWY4YTdiNmM1ZCJ9"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`contract`を指定した場合：無効な`contract`、`limit`、`cursor`、または`event_type`の値。",
            "content": {
              "application/json": {
                "examples": {
                  "Unsupported contract": {
                    "summary": "サポートされていないコントラクト",
                    "value": {
                      "contract": [
                        "\"3\" is not a valid choice."
                      ]
                    }
                  },
                  "Invalid cursor": {
                    "summary": "カーソルが無効です",
                    "value": {
                      "cursor": [
                        "This cursor is not valid. Reload the feed."
                      ]
                    }
                  },
                  "Limit too large": {
                    "summary": "上限値が大きすぎます",
                    "value": {
                      "limit": [
                        "Ensure this value is less than or equal to 500."
                      ]
                    }
                  },
                  "Unknown event type": {
                    "summary": "不明なイベントタイプ",
                    "value": {
                      "event_type": {
                        "0": [
                          "\"logout\" is not a valid choice."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報がないか無効です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "認証情報がないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが別のアプリケーションに属しているか、アクセスが制限されたキーです。ネットワークのエンドポイントにはフルアクセスキーが必要です。コンソールメンバーのトークンには`read:networks`が必要です。組織でネットワーク機能が有効になっていない場合も、`code: networks_not_entitled`とともに返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Networks not enabled": {
                    "summary": "ネットワークが有効化されていません",
                    "value": {
                      "detail": "Networks is disabled for this organization. Contact Didit support if you believe this is an error.",
                      "code": "networks_not_entitled"
                    }
                  },
                  "Restricted API key": {
                    "summary": "制限付きAPIキー",
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "No permission": {
                    "summary": "権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "ネットワークが見つかりません（またはこのアプリケーションから参照できません）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/map/": {
      "get": {
        "summary": "ネットワークマップを取得",
        "description": "このネットワークのメンバーの住所や位置情報が集中する地理的地点。メンバーシップの根拠となるセッション、企業セッション、取引から取得されます。",
        "operationId": "get_network_map",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "retrieve_map",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "n3a5e000-0000-4000-8000-000000000001"
            },
            "description": "ネットワークのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/map/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.retrieve_map(\n    \"n3a5e000-0000-4000-8000-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.retrieveMap(\"n3a5e000-0000-4000-8000-000000000001\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.RetrieveMap(ctx, \"n3a5e000-0000-4000-8000-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().retrieveMap(\"n3a5e000-0000-4000-8000-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->retrieveMap('n3a5e000-0000-4000-8000-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.retrieve_map(\"n3a5e000-0000-4000-8000-000000000001\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.RetrieveMapAsync(\"n3a5e000-0000-4000-8000-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークマップ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkMap"
                }
              }
            }
          },
          "404": {
            "description": "ネットワークが見つかりません（またはこのアプリケーションから参照できません）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/sessions/{session_id}/networks/": {
      "get": {
        "summary": "セッションのネットワークを一覧表示",
        "description": "セッションのベンダーユーザーが属するネットワークを一覧表示します。セッションのvendor_dataに紐付けられたユーザーを通じて解決されます。",
        "operationId": "list_session_network_memberships",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list_networks",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "セッションのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/sessions/aaaaaaaa-0000-4000-8000-000000000001/networks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.sessions.list_networks(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.sessions.listNetworks(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ListNetworks(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.sessions().listNetworks(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->sessions->listNetworks('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.sessions.list_networks(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ListNetworksAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このエンティティが属するネットワーク。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityNetworkMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにエンティティが見つからないか、検索対象となる紐付けられた対象者がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/business-sessions/{business_session_id}/networks/": {
      "get": {
        "summary": "企業セッションのネットワークを一覧表示",
        "description": "企業セッションのベンダー企業が属するネットワークを一覧表示します。",
        "operationId": "list_business_session_network_memberships",
        "x-didit-sdk": {
          "resource": "business_sessions",
          "method": "list_networks",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "business_session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "企業セッションのUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/business-sessions/aaaaaaaa-0000-4000-8000-000000000002/networks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.business_sessions.list_networks(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.businessSessions.listNetworks(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.BusinessSessions.ListNetworks(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.businessSessions().listNetworks(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->businessSessions->listNetworks('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.business_sessions.list_networks(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.BusinessSessions.ListNetworksAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このエンティティが属するネットワーク。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityNetworkMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにエンティティが見つからないか、検索対象となる紐付けられた対象者がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/users/{vendor_user_uuid}/networks/": {
      "get": {
        "summary": "ユーザーのネットワークを一覧表示",
        "description": "ベンダーユーザーが属するネットワークを一覧表示します。",
        "operationId": "list_user_network_memberships",
        "x-didit-sdk": {
          "resource": "users",
          "method": "list_networks",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "vendor_user_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ベンダーのユーザーUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/users/aaaaaaaa-0000-4000-8000-000000000003/networks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.users.list_networks(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.users.listNetworks(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Users.ListNetworks(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.users().listNetworks(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->users->listNetworks('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.users.list_networks(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Users.ListNetworksAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このエンティティが属するネットワーク。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityNetworkMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにエンティティが見つからないか、検索対象となる紐付けられた対象者がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/businesses/{vendor_business_uuid}/networks/": {
      "get": {
        "summary": "企業のネットワークを一覧表示",
        "description": "ベンダー企業が属するネットワークを一覧表示します。",
        "operationId": "list_business_network_memberships",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "list_networks",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "vendor_business_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ベンダーの企業UUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/businesses/aaaaaaaa-0000-4000-8000-000000000004/networks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.businesses.list_networks(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.businesses.listNetworks(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.ListNetworks(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.businesses().listNetworks(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->businesses->listNetworks('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.businesses.list_networks(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Businesses.ListNetworksAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このエンティティが属するネットワーク。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityNetworkMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにエンティティが見つからないか、検索対象となる紐付けられた対象者がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/transactions/{transaction_uuid}/networks/": {
      "get": {
        "summary": "取引のネットワークを一覧表示",
        "description": "取引の基盤となるKYC/KYBサブジェクトが属するネットワークを一覧表示します(取引のセッションまたは企業セッションを通じて解決されます)。",
        "operationId": "list_transaction_network_memberships",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "list_networks",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "transaction_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "取引のUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/transactions/aaaaaaaa-0000-4000-8000-000000000005/networks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.transactions.list_networks(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.transactions.listNetworks(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.ListNetworks(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.transactions().listNetworks(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->transactions->listNetworks('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.transactions.list_networks(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.ListNetworksAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このエンティティが属するネットワーク。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityNetworkMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにエンティティが見つからないか、検索対象となる紐付けられた対象者がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/transactions/{transaction_uuid}/parties/{transaction_party_uuid}/networks/": {
      "get": {
        "summary": "取引当事者のネットワークを一覧表示",
        "description": "取引の当事者(送金人、受取人、または取引相手)が属するネットワークを一覧表示します。取引の基盤となるセッションではなく、当事者自体を通じて解決されます。",
        "operationId": "list_transaction_party_network_memberships",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "list_party_networks",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "transaction_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "取引のUUID。"
          },
          {
            "name": "transaction_party_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "取引当事者のUUID。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/transactions/aaaaaaaa-0000-4000-8000-000000000005/parties/bbbbbbbb-0000-4000-8000-000000000006/networks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.transactions.list_party_networks(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.transactions.listPartyNetworks(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.ListPartyNetworks(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.transactions().listPartyNetworks(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->transactions->listPartyNetworks('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.transactions.list_party_networks(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.ListPartyNetworksAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このエンティティが属するネットワーク。ページネーションされません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityNetworkMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションにエンティティが見つからないか、検索対象となる紐付けられた対象者がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/biometric-templates/": {
      "get": {
        "summary": "保持されている生体認証テンプレートを一覧表示",
        "description": "オプトインしたアプリケーションは、セッションが削除されたとき（`DELETE /v3/session/{sessionId}/delete/`を参照）、ユーザーに紐づけて、個別に管理される画像を含まない顔の生体認証テンプレートを1つ保持します。テンプレートは有限の`expires_at`を持つ生体データです。画像、セッションデータ、本人情報のフィールドは一切含まず、ユーザーの削除、プライバシー消去、有効期限切れ、または明示的なパージによって完全に削除されます。これらのエンドポイントはアプリケーションのAPIキー（`x-api-key`）のみを受け付け、Business Consoleのユーザートークンは`403`で拒否されます。\n\nアプリケーションが現在保持しているテンプレートのページネーション付き一覧を返します。パージ済みのテンプレートは一覧に含まれません。",
        "operationId": "list_biometric_templates",
        "x-didit-sdk": {
          "resource": "biometric_templates",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Biometric Templates"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "vendor_data",
            "required": false,
            "description": "所有するユーザーの現在の`vendor_data`に対する大文字・小文字を区別しない部分一致。",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "vendor_user_uuid",
            "required": false,
            "description": "所有者であるユーザーとの完全一致です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "description": "ライフサイクルステータス。完全削除されたテンプレートは一覧に表示されません。",
            "schema": {
              "type": "string",
              "enum": [
                "pending",
                "active",
                "expired",
                "held_out_of_use",
                "purge_pending",
                "purge_failed"
              ]
            }
          },
          {
            "in": "query",
            "name": "source_type",
            "required": false,
            "description": "テンプレートの作成方法。",
            "schema": {
              "type": "string",
              "enum": [
                "session_delete",
                "automatic_retention",
                "backfill"
              ]
            }
          },
          {
            "in": "query",
            "name": "retained_from",
            "required": false,
            "description": "この日時以降に保持されたテンプレート。",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "in": "query",
            "name": "retained_to",
            "required": false,
            "description": "この日時以前に保持されたテンプレート。`retained_from`より前の日時は指定できません(`400`)。",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "in": "query",
            "name": "ordering",
            "required": false,
            "description": "並び順。",
            "schema": {
              "type": "string",
              "enum": [
                "retained_at",
                "-retained_at",
                "expires_at",
                "-expires_at"
              ],
              "default": "-retained_at"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "description": "ページサイズ。",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "description": "ページネーションのオフセット。",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたテンプレートの一覧。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "description": "テンプレートID。ランダムに生成され、削除されたセッションやその顔から導出されたものではありません。"
                          },
                          "vendor_user_uuid": {
                            "type": "string",
                            "format": "uuid",
                            "description": "所有者のUser。"
                          },
                          "vendor_data": {
                            "type": "string",
                            "nullable": true,
                            "description": "ユーザーの現在の`vendor_data`で、テンプレートを読み取る時点で解決されます（コピーされることはありません）。"
                          },
                          "source_type": {
                            "type": "string",
                            "enum": [
                              "session_delete",
                              "automatic_retention",
                              "backfill"
                            ],
                            "description": "テンプレートの作成方法。セッションの削除（APIまたはConsole）、アプリケーションの自動データ保持期間、またはお客様の指示によりDiditが実施したバックフィルのいずれかです。"
                          },
                          "provenance_reference": {
                            "type": "string",
                            "format": "uuid",
                            "description": "テンプレートをその監査証跡に紐付ける不透明な参照です。削除されたセッションのidではなく、そのidに解決することもできません。"
                          },
                          "retention_policy": {
                            "type": "string",
                            "enum": [
                              "delete_with_session",
                              "retain_until_user_deleted"
                            ],
                            "description": "保持時点でのアプリケーションのポリシー。"
                          },
                          "retention_override": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "削除時に送信された`retain_face_embeddings`の値です。ポリシーが適用された場合は`null`です。"
                          },
                          "retained_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "expires_at": {
                            "type": "string",
                            "format": "date-time",
                            "description": "テンプレートの有効期限が切れ、自動的に削除される日時。常に設定されます。"
                          },
                          "retained_by": {
                            "type": "string",
                            "nullable": true,
                            "description": "指示を出した主体。APIキーの場合はアプリケーションID、Consoleでのアクションの場合はConsoleメンバーID、自動保持の場合は`service:`識別子です。メールアドレスになることはありません。"
                          },
                          "retained_by_type": {
                            "type": "string",
                            "enum": [
                              "API_KEY",
                              "CONSOLE_USER",
                              "SYSTEM"
                            ]
                          },
                          "instruction_class": {
                            "type": "string",
                            "enum": [
                              "operational_session_delete",
                              "privacy_erasure"
                            ]
                          },
                          "instruction_source": {
                            "type": "string",
                            "enum": [
                              "api",
                              "console",
                              "automatic_retention",
                              "backfill",
                              "privacy_erasure",
                              "explicit_template_purge",
                              "vendor_user_delete",
                              "expiry",
                              "reconciliation",
                              "migration",
                              "system"
                            ]
                          },
                          "instruction_id": {
                            "type": "string",
                            "description": "削除時に送信された`instruction_id`、またはDiditが生成したIDです。"
                          },
                          "held_out_of_use": {
                            "type": "boolean",
                            "description": "法的保全が適用されている間のみ`true`です。保全中のテンプレートはすべての照合から除外されます。"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "pending",
                              "active",
                              "expired",
                              "held_out_of_use",
                              "purge_pending",
                              "purge_failed",
                              "purged"
                            ],
                            "description": "マッチングの対象になるのは、保留されておらず、`expires_at`を過ぎておらず、ユーザーがまだ存在する`active`テンプレートのみです。"
                          },
                          "purged_at": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "One active template": {
                    "value": {
                      "count": 1,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                          "vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
                          "vendor_data": "user-42",
                          "source_type": "session_delete",
                          "provenance_reference": "6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f",
                          "retention_policy": "retain_until_user_deleted",
                          "retention_override": null,
                          "retained_at": "2026-08-28T10:15:42.318402Z",
                          "expires_at": "2027-08-28T10:15:42.318402Z",
                          "retained_by": "3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e",
                          "retained_by_type": "API_KEY",
                          "instruction_class": "operational_session_delete",
                          "instruction_source": "api",
                          "instruction_id": "post-approval-cleanup-2026-08",
                          "held_out_of_use": false,
                          "status": "active",
                          "purged_at": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "フィルターの値が無効であるか、`retained_to`が`retained_from`より前です。フィールドごとの検証エラーが返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Bad range": {
                    "value": {
                      "retained_to": [
                        "Must be on or after retained_from."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "コンソールユーザートークンが使用されたか、APIキーが許可されていません。これらのエンドポイントはアプリケーションのAPIキーのみを受け付けます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/biometric-templates/?vendor_data=user-42&status=active' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.biometric_templates.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.biometricTemplates.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.BiometricTemplates.ListAutoPaging(ctx, didit.BiometricTemplatesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.biometricTemplates().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->biometricTemplates->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.biometric_templates.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.BiometricTemplates.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/biometric-templates/count/": {
      "get": {
        "summary": "保持されている生体認証テンプレートの件数を取得",
        "description": "オプトインしたアプリケーションは、セッションが削除されたとき（`DELETE /v3/session/{sessionId}/delete/`を参照）、画像を含まない顔の生体認証テンプレートを1件、別途管理された状態でユーザーに紐づけて保持します。テンプレートは有限の`expires_at`を持つ生体データであり、画像、セッションデータ、本人情報のフィールドを含むことはありません。また、ユーザーの削除、プライバシーに基づく消去、有効期限切れ、または明示的なパージによって完全に削除されます。これらのエンドポイントはアプリケーションのAPIキー（`x-api-key`）のみを受け付けます。Business Consoleのユーザートークンは`403`で拒否されます。\n\n一覧エンドポイントと同じフィルターに一致するテンプレートの件数を返します。`delete_all: true`を指定したフィルター付きの一括パージで何が対象になるかを確認するために使用します。",
        "operationId": "count_biometric_templates",
        "x-didit-sdk": {
          "resource": "biometric_templates",
          "method": "count",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Biometric Templates"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "vendor_data",
            "required": false,
            "description": "所有するユーザーの現在の`vendor_data`に対する大文字・小文字を区別しない部分一致。",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "vendor_user_uuid",
            "required": false,
            "description": "所有者であるユーザーとの完全一致です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "description": "ライフサイクルステータス。完全削除されたテンプレートは一覧に表示されません。",
            "schema": {
              "type": "string",
              "enum": [
                "pending",
                "active",
                "expired",
                "held_out_of_use",
                "purge_pending",
                "purge_failed"
              ]
            }
          },
          {
            "in": "query",
            "name": "source_type",
            "required": false,
            "description": "テンプレートの作成方法。",
            "schema": {
              "type": "string",
              "enum": [
                "session_delete",
                "automatic_retention",
                "backfill"
              ]
            }
          },
          {
            "in": "query",
            "name": "retained_from",
            "required": false,
            "description": "この日時以降に保持されたテンプレート。",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "in": "query",
            "name": "retained_to",
            "required": false,
            "description": "この日時以前に保持されたテンプレート。`retained_from`より前の日時は指定できません(`400`)。",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "件数。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                },
                "examples": {
                  "Count": {
                    "value": {
                      "count": 128
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "フィルターの値が無効であるか、`retained_to`が`retained_from`より前です。フィールドごとの検証エラーが返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Bad range": {
                    "value": {
                      "retained_to": [
                        "Must be on or after retained_from."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "コンソールユーザートークンが使用されたか、APIキーが許可されていません。これらのエンドポイントはアプリケーションのAPIキーのみを受け付けます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/biometric-templates/count/?status=active' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.biometric_templates.count()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.biometricTemplates.count();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.BiometricTemplates.Count(ctx, didit.BiometricTemplatesCountParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.biometricTemplates().count();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->biometricTemplates->count();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.biometric_templates.count\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.BiometricTemplates.CountAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/biometric-templates/{template_uuid}/": {
      "get": {
        "summary": "保持されている生体認証テンプレートを取得",
        "description": "オプトインしたアプリケーションは、セッションが削除されたとき（`DELETE /v3/session/{sessionId}/delete/`を参照）、ユーザーに紐づけて、個別に管理される画像を含まない顔の生体認証テンプレートを1つ保持します。テンプレートは有限の`expires_at`を持つ生体データです。画像、セッションデータ、本人情報のフィールドは一切含まず、ユーザーの削除、プライバシー消去、有効期限切れ、または明示的なパージによって完全に削除されます。これらのエンドポイントはアプリケーションのAPIキー（`x-api-key`）のみを受け付け、Business Consoleのユーザートークンは`403`で拒否されます。\n\nテンプレートを1件返します。レスポンスには画像、ベクトル、削除されたセッションのID、本人情報のデータは一切含まれません。",
        "operationId": "get_biometric_template",
        "x-didit-sdk": {
          "resource": "biometric_templates",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Biometric Templates"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "template_uuid",
            "required": true,
            "description": "テンプレートID。セッション削除エンドポイントが返す`biometric_template_uuid`、顔検索の一致結果の`biometric_template_id`、または一覧エンドポイントで返される値です。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "テンプレート。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "テンプレートID。ランダムに生成され、削除されたセッションやその顔から導出されたものではありません。"
                    },
                    "vendor_user_uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "所有者のUser。"
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "ユーザーの現在の`vendor_data`で、テンプレートを読み取る時点で解決されます（コピーされることはありません）。"
                    },
                    "source_type": {
                      "type": "string",
                      "enum": [
                        "session_delete",
                        "automatic_retention",
                        "backfill"
                      ],
                      "description": "テンプレートの作成方法。セッションの削除（APIまたはConsole）、アプリケーションの自動データ保持期間、またはお客様の指示によりDiditが実施したバックフィルのいずれかです。"
                    },
                    "provenance_reference": {
                      "type": "string",
                      "format": "uuid",
                      "description": "テンプレートをその監査証跡に紐付ける不透明な参照です。削除されたセッションのidではなく、そのidに解決することもできません。"
                    },
                    "retention_policy": {
                      "type": "string",
                      "enum": [
                        "delete_with_session",
                        "retain_until_user_deleted"
                      ],
                      "description": "保持時点でのアプリケーションのポリシー。"
                    },
                    "retention_override": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "削除時に送信された`retain_face_embeddings`の値です。ポリシーが適用された場合は`null`です。"
                    },
                    "retained_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "テンプレートの有効期限が切れ、自動的に削除される日時。常に設定されます。"
                    },
                    "retained_by": {
                      "type": "string",
                      "nullable": true,
                      "description": "指示を出した主体。APIキーの場合はアプリケーションID、Consoleでのアクションの場合はConsoleメンバーID、自動保持の場合は`service:`識別子です。メールアドレスになることはありません。"
                    },
                    "retained_by_type": {
                      "type": "string",
                      "enum": [
                        "API_KEY",
                        "CONSOLE_USER",
                        "SYSTEM"
                      ]
                    },
                    "instruction_class": {
                      "type": "string",
                      "enum": [
                        "operational_session_delete",
                        "privacy_erasure"
                      ]
                    },
                    "instruction_source": {
                      "type": "string",
                      "enum": [
                        "api",
                        "console",
                        "automatic_retention",
                        "backfill",
                        "privacy_erasure",
                        "explicit_template_purge",
                        "vendor_user_delete",
                        "expiry",
                        "reconciliation",
                        "migration",
                        "system"
                      ]
                    },
                    "instruction_id": {
                      "type": "string",
                      "description": "削除時に送信された`instruction_id`、またはDiditが生成したIDです。"
                    },
                    "held_out_of_use": {
                      "type": "boolean",
                      "description": "法的保全が適用されている間のみ`true`です。保全中のテンプレートはすべての照合から除外されます。"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "active",
                        "expired",
                        "held_out_of_use",
                        "purge_pending",
                        "purge_failed",
                        "purged"
                      ],
                      "description": "マッチングの対象になるのは、保留されておらず、`expires_at`を過ぎておらず、ユーザーがまだ存在する`active`テンプレートのみです。"
                    },
                    "purged_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    }
                  }
                },
                "examples": {
                  "Active template": {
                    "value": {
                      "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                      "vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
                      "vendor_data": "user-42",
                      "source_type": "session_delete",
                      "provenance_reference": "6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f",
                      "retention_policy": "retain_until_user_deleted",
                      "retention_override": null,
                      "retained_at": "2026-08-28T10:15:42.318402Z",
                      "expires_at": "2027-08-28T10:15:42.318402Z",
                      "retained_by": "3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e",
                      "retained_by_type": "API_KEY",
                      "instruction_class": "operational_session_delete",
                      "instruction_source": "api",
                      "instruction_id": "post-approval-cleanup-2026-08",
                      "held_out_of_use": false,
                      "status": "active",
                      "purged_at": null
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "コンソールユーザートークンが使用されたか、APIキーが許可されていません。これらのエンドポイントはアプリケーションのAPIキーのみを受け付けます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なテンプレート、別のアプリケーションのテンプレート、または(`GET`の場合)完全に削除されたテンプレートです。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Biometric template not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/biometric-templates/9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.biometric_templates.retrieve(\n    \"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.biometricTemplates.retrieve(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.BiometricTemplates.Retrieve(ctx, \"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.biometricTemplates().retrieve(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->biometricTemplates->retrieve('9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.biometric_templates.retrieve(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.BiometricTemplates.RetrieveAsync(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "summary": "保持されている生体認証テンプレートを完全削除する",
        "description": "オプトインしたアプリケーションは、セッションが削除されたとき（`DELETE /v3/session/{sessionId}/delete/`を参照）、ユーザーに紐づけて、個別に管理される画像を含まない顔の生体認証テンプレートを1つ保持します。テンプレートは有限の`expires_at`を持つ生体データです。画像、セッションデータ、本人情報のフィールドは一切含まず、ユーザーの削除、プライバシー消去、有効期限切れ、または明示的なパージによって完全に削除されます。これらのエンドポイントはアプリケーションのAPIキー（`x-api-key`）のみを受け付け、Business Consoleのユーザートークンは`403`で拒否されます。\n\nテンプレートを1件パージします。テンプレートはあらゆる種類の照合から除外され、保存されたテンプレートは削除されます。この操作は取り消せず、実行したプリンシパルとともに監査証跡に記録されます。\n\n**再試行の動作:** Diditはまず保存されたテンプレートを削除し、その後でテンプレートをパージ済みとしてマークします。生体データストアが利用できない場合は`503`が返され、テンプレートは`status: purge_failed`に移行し、照合対象からは既に除外されています。同じ呼び出しを繰り返すと処理が完了します。既にパージされたテンプレートに対してパージを繰り返すと`already_purged`が返されます。\n\nテンプレートは、所有するユーザーに対する`POST /v3/users/delete/`、そのユーザーのセッションを`deletion_instruction: privacy_erasure`で削除するあらゆる操作、および`expires_at`時点での自動処理によってもパージされます。",
        "operationId": "purge_biometric_template",
        "x-didit-sdk": {
          "resource": "biometric_templates",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Biometric Templates"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "template_uuid",
            "required": true,
            "description": "テンプレートID。セッション削除エンドポイントが返す`biometric_template_uuid`、顔検索の一致結果の`biometric_template_id`、または一覧エンドポイントで返される値です。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "完全削除の結果。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "outcome": {
                      "type": "string",
                      "enum": [
                        "purged",
                        "already_purged"
                      ]
                    }
                  }
                },
                "examples": {
                  "Purged": {
                    "value": {
                      "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                      "outcome": "purged"
                    }
                  },
                  "Already purged": {
                    "value": {
                      "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                      "outcome": "already_purged"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "コンソールユーザートークンが使用されたか、APIキーが許可されていません。これらのエンドポイントはアプリケーションのAPIキーのみを受け付けます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "不明なテンプレート、別のアプリケーションのテンプレート、または(`GET`の場合)完全に削除されたテンプレートです。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Biometric template not found."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "生体認証テンプレートの保持または消去中に、生体認証ストアが利用できませんでした。何も削除されていません。同じリクエストを再度送信してください。再試行は冪等で、単一のテンプレートに収束します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Retryable": {
                    "value": {
                      "detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE https://verification.didit.me/v3/biometric-templates/9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.biometric_templates.delete(\n    \"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.biometricTemplates.delete(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.BiometricTemplates.Delete(ctx, \"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.biometricTemplates().delete(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->biometricTemplates->delete('9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.biometric_templates.delete(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.BiometricTemplates.DeleteAsync(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/biometric-templates/delete/": {
      "post": {
        "summary": "保持されている生体認証テンプレートを一括削除",
        "description": "オプトインしたアプリケーションは、セッションが削除されたとき（`DELETE /v3/session/{sessionId}/delete/`を参照）、ユーザーに紐づけて、個別に管理される画像を含まない顔の生体認証テンプレートを1つ保持します。テンプレートは有限の`expires_at`を持つ生体データです。画像、セッションデータ、本人情報のフィールドは一切含まず、ユーザーの削除、プライバシー消去、有効期限切れ、または明示的なパージによって完全に削除されます。これらのエンドポイントはアプリケーションのAPIキー（`x-api-key`）のみを受け付け、Business Consoleのユーザートークンは`403`で拒否されます。\n\n1回の呼び出しで複数のテンプレートをパージします。IDのリストを明示的に指定するか、`delete_all: true`を指定します（後者は一覧エンドポイントと同じフィルターで任意に絞り込めます）。テンプレートは1件ずつパージされ、各結果は`purged`または`already_purged`を報告します。生体データストアが利用できない場合、最初に失敗したテンプレートの時点で`503`が返されます。このリクエストで先にパージされたテンプレートはパージされたままとなり、失敗したテンプレートは`purge_failed`に移行し（照合対象からは既に除外済み）、同じリクエストを繰り返すと処理が完了します。\n\n**フィルターなしの`delete_all: true`はアプリケーション内のすべての生体認証テンプレートをパージし、元に戻すことはできません。**先に同じフィルターでカウントエンドポイントを実行してください。",
        "operationId": "bulk_purge_biometric_templates",
        "x-didit-sdk": {
          "resource": "biometric_templates",
          "method": "batch_delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Biometric Templates"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "template_uuids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "minItems": 1,
                    "description": "完全に削除するテンプレート。`delete_all`が`true`でない限り必須です。すでに削除済みのIDは`already_purged`として報告されます。"
                  },
                  "delete_all": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`の場合、以下のフィルターに一致するすべてのテンプレートを完全に削除します（フィルターを指定しない場合は、アプリケーションのすべてのテンプレートが対象です）。`template_uuids`は無視されます。元に戻すことはできません。"
                  },
                  "vendor_data": {
                    "type": "string",
                    "description": "`delete_all`の場合のみ: 所有ユーザーの`vendor_data`に対する、大文字と小文字を区別しない部分文字列一致です。"
                  },
                  "vendor_user_uuid": {
                    "type": "string",
                    "format": "uuid",
                    "description": "`delete_all`を指定した場合のみ: 所有者であるユーザーとの完全一致。"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "pending",
                      "active",
                      "expired",
                      "held_out_of_use",
                      "purge_pending",
                      "purge_failed"
                    ],
                    "description": "`delete_all`の場合のみ。"
                  },
                  "source_type": {
                    "type": "string",
                    "enum": [
                      "session_delete",
                      "automatic_retention",
                      "backfill"
                    ],
                    "description": "`delete_all`の場合のみ。"
                  },
                  "retained_from": {
                    "type": "string",
                    "format": "date-time",
                    "description": "`delete_all`の場合のみ。"
                  },
                  "retained_to": {
                    "type": "string",
                    "format": "date-time",
                    "description": "`delete_all`の場合のみ。`retained_from`より前の値は指定できません。"
                  }
                }
              },
              "examples": {
                "By id": {
                  "value": {
                    "template_uuids": [
                      "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                      "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
                    ]
                  }
                },
                "Every template of one User": {
                  "value": {
                    "delete_all": true,
                    "vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f"
                  }
                },
                "Every template in the application": {
                  "value": {
                    "delete_all": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "テンプレートごとのパージ結果です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "outcome": {
                            "type": "string",
                            "enum": [
                              "purged",
                              "already_purged"
                            ]
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Mixed": {
                    "value": {
                      "results": [
                        {
                          "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
                          "outcome": "purged"
                        },
                        {
                          "uuid": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
                          "outcome": "already_purged"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証エラー：何もパージされません。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing selector": {
                    "value": {
                      "template_uuids": [
                        "This field is required unless delete_all is true."
                      ]
                    }
                  },
                  "Bad range": {
                    "value": {
                      "retained_to": [
                        "Must be on or after retained_from."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "コンソールユーザートークンが使用されたか、APIキーが許可されていません。これらのエンドポイントはアプリケーションのAPIキーのみを受け付けます。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "生体認証テンプレートの保持または消去中に、生体認証ストアが利用できませんでした。何も削除されていません。同じリクエストを再度送信してください。再試行は冪等で、単一のテンプレートに収束します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Retryable": {
                    "value": {
                      "detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/biometric-templates/delete/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"delete_all\": true, \"vendor_user_uuid\": \"2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.biometric_templates.batch_delete(\n    template_uuids=[\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.biometricTemplates.batchDelete({\n  template_uuids: [\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.BiometricTemplates.BatchDelete(ctx, didit.BiometricTemplatesBatchDeleteParams{\n\tTemplateUUIDs: didit.Some([]string{\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.BiometricTemplatesBatchDeleteParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.biometricTemplates().batchDelete(BiometricTemplatesBatchDeleteParams.builder()\n        .templateUuids(List.of(\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->biometricTemplates->batchDelete([\n    'template_uuids' => ['9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b', '1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.biometric_templates.batch_delete(template_uuids: [\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.BiometricTemplates.BatchDeleteAsync(new BiometricTemplatesBatchDeleteParams\n{\n    TemplateUuids = new string[] { \"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/kyb/shareholders/": {
      "post": {
        "summary": "株主情報付きのKYB法人登記企業（スタンドアロン）",
        "operationId": "post_v3_kyb_shareholders",
        "x-didit-sdk": {
          "resource": "kyb",
          "method": "list_shareholders",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [],
        "description": "`POST /v3/kyb/search/`が返した候補1件について、Liteプロファイルに**加えて直接の株主**（自然人および法人、それぞれの所有比率の区分付き）を取得します。\n\n**検索との組み合わせ**：同じアプリケーションでの検索が返した候補の`kyb_response_id`を、返されたとおりに渡してください。検索は購入する予定のレベル（`POST /v3/kyb/search/`の`tier`）で行ってください。検索はそのレベルを提供する登記機関チェーンで実行されるため、Liteでの検索結果が空でも、その登記機関に企業の記録がないことの証明にはなりません。その国の所有構造データが別の登記機関にある場合、Diditは登記番号を使ってその登記機関で企業を再検索します。追加料金はかかりません。\n\n**請求**：その国のShareholders料金で請求されます。[KYB登記機関の料金](/ja/getting-started/kyb-registry-pricing)を参照してください。登記機関にその企業の株主記録がない場合（またはその国が所有構造データを一切提供していない場合）は、代わりにLiteプロファイルが提供され、Liteとして請求されます。`registry_tier_delivered`と`registry_ownership_status`を確認してください。残高は、登記機関への呼び出しを行う前にShareholders料金と照合されます（不足している場合は`403`）。\n\n**利用条件**：v3のみです。呼び出しごとに企業セッションが作成されます（そのIDが`request_id`です）。\n\n**保留中のレポート**：レポートがまだ準備中の場合、または所有構造セクションがまだ登記機関から取得されていない場合、エンドポイントは202 Accepted、kyb_registry.fetch_status=pending、kyb_registry.registry_ownership_status=pending、registry_tier_delivered=nullを返します。request_idを保持し、registry_checks[0].company.fetch_statusが確定するまでGET /v3/session/{request_id}/decision/で取得してください。Diditはレポートを自動的に完成させ、準備が整った時点で提供したレベルの料金を請求します。保留中は購入を繰り返さないでください。新しいPOSTを送るたびに、別のリクエストが作成されます。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KYBRegistryCandidateRequest"
              },
              "example": {
                "kyb_response_id": "69aeeb95febb0f1704042259",
                "vendor_data": "company-1234"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/kyb/shareholders/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"kyb_response_id\": \"69aeeb95febb0f1704042259\",\n    \"vendor_data\": \"company-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.kyb.list_shareholders(\n    kyb_response_id=\"69aeeb95febb0f1704042259\",\n    vendor_data=\"company-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.kyb.listShareholders({\n  kyb_response_id: \"69aeeb95febb0f1704042259\",\n  vendor_data: \"company-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.ListShareholders(ctx, didit.KYBRegistryCandidateRequest{\n\tKYBResponseID: \"69aeeb95febb0f1704042259\",\n\tVendorData:    didit.String(\"company-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.KYBRegistryCandidateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.kyb().listShareholders(KYBRegistryCandidateRequest.builder()\n        .kybResponseId(\"69aeeb95febb0f1704042259\")\n        .vendorData(\"company-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->kyb->listShareholders([\n    'kyb_response_id' => '69aeeb95febb0f1704042259',\n    'vendor_data' => 'company-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.kyb.list_shareholders(\n  kyb_response_id: \"69aeeb95febb0f1704042259\",\n  vendor_data: \"company-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Kyb.ListShareholdersAsync(new KYBRegistryCandidateRequest\n{\n    KybResponseId = \"69aeeb95febb0f1704042259\",\n    VendorData = \"company-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "企業レポートが返され、提供されたレベルで請求されました。準備中の所有構造レポートは202を返す場合があります。保存された判定を後から取得できるよう、request_idを保持してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "この取得のために作成された企業セッションのID。レスポンスの後に登記情報が確定した場合も、保存されたレコード（コンソールで確認可能）は更新され続けます。"
                    },
                    "registry_tier_requested": {
                      "type": "string",
                      "enum": [
                        "basic",
                        "shareholders",
                        "ubo"
                      ],
                      "description": "このエンドポイントが提供するレベル: `basic`（Lite、一部対象のみ）、`shareholders`、`ubo`。"
                    },
                    "registry_tier_delivered": {
                      "type": "string",
                      "enum": [
                        "basic",
                        "shareholders",
                        "ubo",
                        null
                      ],
                      "description": "実際に提供され、請求されたレベル。その国の登記機関が所有構造データを保持していない場合、または登記機関にこの企業の所有構造の記録がない場合は、リクエストしたレベルより低くなります。",
                      "nullable": true
                    },
                    "kyb_registry": {
                      "type": "object",
                      "description": "法人登記上の企業の完全なプロフィール。",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "description": "この企業レコードに対するDiditのIDです。"
                        },
                        "node_id": {
                          "type": "string",
                          "example": "feature_kyb_registry"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "Not Finished",
                            "Approved",
                            "Declined",
                            "In Review"
                          ],
                          "description": "登記チェックに対するDiditの評価です（例：企業が登記上アクティブでない場合、または所有構造データを導出できなかった場合は`In Review`）。"
                        },
                        "registry_status": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "active",
                            "dissolved",
                            "deregistered",
                            "see full details",
                            "authorised",
                            "appointed representative",
                            "unauthorised",
                            "inactive",
                            "no longer authorised",
                            "closed",
                            "struck off",
                            null
                          ],
                          "description": "登記機関が報告した、正規化された企業ステータス。"
                        },
                        "data_resolved": {
                          "type": "boolean",
                          "description": "法人登記から完全なプロファイルが返されると`true`になります。ポーリング後も法人登記側でまだ処理中だった場合は`false`です。法人登記側の処理が完了すると、保存されたレコードは自動的に補完されます。"
                        },
                        "company_name": {
                          "type": "string",
                          "example": "Tesco PLC"
                        },
                        "registration_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "00445790"
                        },
                        "country_code": {
                          "type": "string",
                          "description": "ISO 3166-1 alpha-2。",
                          "example": "GB"
                        },
                        "region": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記機関が地域単位の場合の地域区分コード（例: `US-CA`の場合は`CA`）。それ以外の場合は空です。"
                        },
                        "company_type": {
                          "type": "string",
                          "nullable": true,
                          "example": "Public Limited Company"
                        },
                        "incorporation_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "example": "1947-11-27"
                        },
                        "registered_address": {
                          "type": "string",
                          "nullable": true,
                          "example": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA"
                        },
                        "tax_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "GB412 8925 93"
                        },
                        "risk_level": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記所が報告したリスクレベル（取得できる場合）。"
                        },
                        "verification_status": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記上の認証ステータス（取得できる場合）。"
                        },
                        "is_from_registry": {
                          "type": "boolean",
                          "description": "このエンドポイントでは常に`true`です。プロファイルは公式の登記簿から取得されています。"
                        },
                        "fetch_status": {
                          "type": "string",
                          "enum": [
                            "pending",
                            "resolved"
                          ],
                          "description": "登記取得のライフサイクル。`data_resolved`に反映されます。"
                        },
                        "alternative_names": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合の、別名、商号、旧社名、または原語表記の企業名（テキスト）です。"
                        },
                        "nature_of_business": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合、事業内容の説明または分類コード。"
                        },
                        "registered_capital": {
                          "type": "string",
                          "nullable": true
                        },
                        "registered_capital_amount": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合の、文字列形式の10進数の金額。"
                        },
                        "registered_capital_currency": {
                          "type": "string",
                          "nullable": true,
                          "description": "ISO 4217通貨コード（報告されている場合）。"
                        },
                        "website": {
                          "type": "string",
                          "nullable": true,
                          "example": "https://www.tesco.com/"
                        },
                        "email": {
                          "type": "string",
                          "nullable": true,
                          "example": "customer.service@tesco.co.uk"
                        },
                        "phone": {
                          "type": "string",
                          "nullable": true,
                          "example": "03301231688"
                        },
                        "legal_entity_identifier": {
                          "type": "string",
                          "nullable": true,
                          "description": "LEI（報告されている場合）。"
                        },
                        "location_of_registration": {
                          "type": "string",
                          "nullable": true,
                          "description": "企業が登録されている登記所・法域（報告されている場合）。"
                        },
                        "vat_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "EUのVAT番号。ホスト型の登記ステップで収集された場合、またはその後に編集された場合に設定されます。選択時点では通常まだ設定されていません。VATおよび納税者番号の検証は、エンドユーザーがホスト型フローで登記ステップを送信した時点で実行されます。"
                        },
                        "vat_validation_status": {
                          "type": "string",
                          "enum": [
                            "valid",
                            "invalid",
                            "format_valid",
                            "invalid_format",
                            "could_not_validate",
                            "not_applicable"
                          ],
                          "description": "登記の送信時に、VAT番号（ない場合は`tax_number`）を検証した結果。`valid` / `invalid`：その国の公式登記（EU VIES、ノルウェー、スイス、ブラジル、コロンビア、コスタリカ、エクアドル、パラグアイ。ポーランドは国内のVAT登録簿でも判定）によって判定されます。`format_valid` / `invalid_format`：照会できる登記がない場合に、その国の形式およびチェックディジットのルールによって判定されます。`could_not_validate`：登記を利用できませんでした。`not_applicable`：番号がない、登記もルールもない国である、またはサンドボックスのセッションです。"
                        },
                        "vat_validated_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "確認された番号で、ソース側で認識されている形式のもの（例: フランスのSIRENやオランダのRSINから導出されたVAT番号）。確認が実行されなかった場合は`null`です。"
                        },
                        "vat_validation_source": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "eu_vies",
                            "pl_vat_white_list",
                            "no_brreg",
                            "ch_uid_register",
                            "br_receita_federal",
                            "co_rues",
                            "cr_hacienda",
                            "ec_sri",
                            "py_dnit",
                            "format_rules",
                            null
                          ],
                          "description": "`vat_validation_status`を決定したソース。公式の登記簿、または`format_rules`です。チェックが実行されなかった場合は`null`です。"
                        },
                        "vat_validated_name": {
                          "type": "string",
                          "nullable": true,
                          "description": "番号を検証したソースに登録されている名義（ソースが開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                        },
                        "vat_validated_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "番号を検証した情報源に登録されている住所（情報源が開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                        },
                        "vat_checked_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "チェックの日時。チェックが実行されなかった場合は`null`です。"
                        },
                        "financial_summary": {
                          "type": "object",
                          "nullable": true,
                          "description": "登記所が報告した株式・資本の詳細（通貨、発行済株式総数、株式の種類）（取得できる場合）。"
                        },
                        "officers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "uuid": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "name": {
                                "type": "string",
                                "example": "MELISSA BETHELL"
                              },
                              "designation": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記上の生の役職名（例: `Director`、`Secretary`）。"
                              },
                              "role": {
                                "type": "string",
                                "description": "役職名から導出された正規化された役割。モデルは17種類の値をすべて持ちますが、このエンドポイントでの登記情報の解析では通常、director、non_executive_director、secretary、chairman、company_officerのいずれかが出力されます。",
                                "enum": [
                                  "director",
                                  "non_executive_director",
                                  "secretary",
                                  "chairman",
                                  "ubo",
                                  "shareholder",
                                  "representative",
                                  "founder",
                                  "legal_advisor",
                                  "authorized_signatory",
                                  "trustee",
                                  "beneficiary",
                                  "company_officer",
                                  "settlor",
                                  "protector",
                                  "investor",
                                  "other"
                                ]
                              },
                              "nationality": {
                                "type": "string",
                                "nullable": true
                              },
                              "is_active": {
                                "type": "boolean",
                                "description": "登記簿でその任命が辞任済みとされている場合は`false`。"
                              },
                              "kyc_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "Approved",
                                  "Declined",
                                  "Pending",
                                  null
                                ],
                                "description": "この役員に対してKYCセッションが開始された場合、そのセッションのステータスです。それ以外の場合は`null`です。"
                              },
                              "kyc_session_url": {
                                "type": "string",
                                "nullable": true,
                                "description": "関連するKYCセッションが存在する場合、その認証URL。"
                              },
                              "first_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記機関が明示的に報告した場合の名。氏名からは推測されません。"
                              },
                              "last_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿で明示的に報告されている場合の姓。"
                              },
                              "address": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿に記載されている役員の住所。"
                              },
                              "appointment_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "役員の就任日。",
                                "format": "date"
                              },
                              "termination_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "役職の終了日（報告されている場合）。",
                                "format": "date"
                              },
                              "date_of_birth": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記で報告された完全な生年月日。生年または生年月のみが判明している場合はnullです。",
                                "format": "date"
                              },
                              "date_of_birth_year": {
                                "type": "integer",
                                "nullable": true,
                                "minimum": 1,
                                "maximum": 9999,
                                "description": "登記所が報告した生まれ年。完全な日付が取得できない場合も含みます。"
                              },
                              "date_of_birth_month": {
                                "type": "integer",
                                "nullable": true,
                                "minimum": 1,
                                "maximum": 12,
                                "description": "登記所が報告した生まれ月。年のみ判明している場合はnullです。"
                              }
                            }
                          },
                          "description": "登記から抽出された取締役、秘書役、その他の役員です。"
                        },
                        "beneficial_owners": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "uuid": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "name": {
                                "type": "string"
                              },
                              "first_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "last_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "entity_type": {
                                "type": "string",
                                "enum": [
                                  "person",
                                  "company"
                                ],
                                "description": "所有者が自然人か法人か。"
                              },
                              "roles": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "正規化された役割（例: `ubo`、`shareholder`）。"
                              },
                              "ownership_min_shares": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿が報告する所有比率帯の下限（例: `25%`）。"
                              },
                              "ownership_max_shares": {
                                "type": "string",
                                "nullable": true,
                                "description": "法人登記が報告した所有構造における比率範囲の上限値。"
                              },
                              "is_active": {
                                "type": "boolean"
                              },
                              "kyc_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "Approved",
                                  "Declined",
                                  "Pending",
                                  null
                                ]
                              },
                              "kyc_session_url": {
                                "type": "string",
                                "nullable": true
                              },
                              "effective_ownership_percent": {
                                "type": "number",
                                "nullable": true,
                                "description": "解析済みの所有割合(上限値、ない場合は下限値)。"
                              },
                              "company_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "registration_number": {
                                "type": "string",
                                "nullable": true
                              },
                              "country_of_birth": {
                                "type": "string",
                                "nullable": true
                              },
                              "email": {
                                "type": "string",
                                "nullable": true
                              },
                              "nationality": {
                                "type": "string",
                                "nullable": true
                              },
                              "designation": {
                                "type": "string",
                                "nullable": true
                              },
                              "voting_min_shares": {
                                "type": "string",
                                "nullable": true
                              },
                              "voting_max_shares": {
                                "type": "string",
                                "nullable": true
                              },
                              "date_of_birth": {
                                "type": "string",
                                "nullable": true,
                                "description": "報告されている場合の完全な生年月日。",
                                "format": "date"
                              },
                              "appointment_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "報告されている場合の任命日。",
                                "format": "date"
                              },
                              "shareholding": {
                                "$ref": "#/components/schemas/KYBRegistryShareholding"
                              }
                            }
                          },
                          "description": "登記簿から抽出された実質的支配者または重要な支配権を有する者です。登記簿が所有構造を公開していない場合は空になることがあります。"
                        },
                        "addresses": {
                          "type": "array",
                          "nullable": true,
                          "description": "登記簿に記載されているすべての住所を、1つの標準形式で示します。記載がない場合はnullです。",
                          "items": {
                            "$ref": "#/components/schemas/KYBRegistryAddress"
                          }
                        },
                        "industries": {
                          "type": "array",
                          "nullable": true,
                          "description": "登記上で会社が分類されている事業活動。単一の正規化された形式です。登記に記載がない場合はnullです。",
                          "items": {
                            "$ref": "#/components/schemas/KYBRegistryIndustry"
                          }
                        },
                        "accounts": {
                          "type": "object",
                          "nullable": true,
                          "additionalProperties": true,
                          "description": "登記申告の日付（取得できる場合）。年次報告書と株主総会にはlast_annual_return_dateとlast_agm_dateを使用し、これらは財務諸表とは区別されます。"
                        },
                        "registry_data": {
                          "$ref": "#/components/schemas/KYBRegistryData"
                        },
                        "user_provided_data": {
                          "type": "object",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です（エンドユーザーが登記データを編集する際に、ホスト型のKYBフローで使用されます）。"
                        },
                        "confirmed_by_user_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です。"
                        },
                        "last_console_edit_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "後でコンソールのレビュアーがレコードを編集したときに設定されます。"
                        },
                        "is_editable": {
                          "type": "boolean",
                          "description": "登記情報から取得したデータをホスト型フローやコンソールで引き続き編集できるかどうか。"
                        },
                        "registry_tier_delivered": {
                          "type": "string",
                          "enum": [
                            "basic",
                            "shareholders",
                            "ubo",
                            null
                          ],
                          "description": "トップレベルの`registry_tier_delivered`と同じ。",
                          "nullable": true
                        },
                        "registry_ownership_status": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "not_requested",
                            "delivered",
                            "not_held",
                            "unavailable",
                            "pending",
                            null
                          ],
                          "description": "所有構造データが返された場合は`delivered`、所有構造の登記簿が応答したもののこの企業が掲載されていない場合は`not_held`（`registry_data.ownership_error`を参照）、所有構造のレベルがリクエストされたものの登記簿にこの企業のデータがなかったか照会できなかった場合は`unavailable`（`registry_data.ownership_error`を参照）、所有構造セクションがまだ登記簿から取得されておらずDiditが取得を完了させている途中の場合は`pending`、Liteレベルでは`not_requested`です。"
                        },
                        "ownership": {
                          "$ref": "#/components/schemas/KYBRegistryOwnership"
                        },
                        "registry_tier": {
                          "type": "string",
                          "nullable": true,
                          "description": "ワークフローが指定した登記のレベル: `basic`、`shareholders`または`ubo`。`ownership.tier_requested`にも含まれます。"
                        },
                        "registry_monitoring": {
                          "type": "object",
                          "nullable": true,
                          "description": "その企業の最新の登記モニターです。存在しない場合は`null`です。",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid"
                            },
                            "status": {
                              "type": "string"
                            },
                            "unavailable_reason": {
                              "type": "string",
                              "nullable": true
                            },
                            "enrolled_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "cancelled_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "last_bill_date": {
                              "type": "string",
                              "format": "date",
                              "nullable": true
                            },
                            "next_bill_date": {
                              "type": "string",
                              "format": "date",
                              "nullable": true
                            },
                            "last_event_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "events_count": {
                              "type": "integer"
                            },
                            "watched_fields": {
                              "description": "モニターが監視する企業フィールド。"
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`をそのまま返します。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "description": "送信した`metadata`のエコー。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "examples": {
                  "Resolved company": {
                    "summary": "登記上の完全なプロフィール（役員リストは簡潔にするため省略）",
                    "value": {
                      "request_id": "9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e",
                      "kyb_registry": {
                        "uuid": "f1e2d3c4-b5a6-4789-9c0d-1e2f3a4b5c6d",
                        "node_id": "feature_kyb_registry",
                        "status": "In Review",
                        "registry_status": "active",
                        "data_resolved": true,
                        "company_name": "Tesco PLC",
                        "registration_number": "00445790",
                        "country_code": "GB",
                        "region": "",
                        "company_type": "Public Limited Company",
                        "incorporation_date": "1947-11-27",
                        "registered_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
                        "tax_number": "GB412 8925 93",
                        "risk_level": "low risk",
                        "verification_status": "verified",
                        "is_from_registry": true,
                        "fetch_status": "resolved",
                        "alternative_names": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
                        "nature_of_business": null,
                        "registered_capital": null,
                        "registered_capital_amount": null,
                        "registered_capital_currency": null,
                        "website": "https://www.tesco.com/",
                        "email": "customer.service@tesco.co.uk",
                        "phone": "03301231688",
                        "legal_entity_identifier": null,
                        "location_of_registration": null,
                        "financial_summary": {
                          "currency": "Pound (£)",
                          "total_number_of_shares": "8174378721",
                          "meta_detail": {
                            "Class_Of_Share": "Ordinary"
                          }
                        },
                        "officers": [
                          {
                            "uuid": "a1b2c3d4-e5f6-4789-9a0b-1c2d3e4f5a6b",
                            "name": "CHRISTOPHER JON TAYLOR",
                            "designation": "Secretary",
                            "role": "secretary",
                            "nationality": null,
                            "is_active": true,
                            "kyc_status": null,
                            "kyc_session_url": null
                          },
                          {
                            "uuid": "b2c3d4e5-f6a7-4890-8b1c-2d3e4f5a6b7c",
                            "name": "MELISSA BETHELL",
                            "designation": "Director",
                            "role": "director",
                            "nationality": "British",
                            "is_active": true,
                            "kyc_status": null,
                            "kyc_session_url": null
                          }
                        ],
                        "beneficial_owners": [],
                        "addresses": [
                          {
                            "address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
                            "type": "legal_entity_registry_address",
                            "description": "registered office address"
                          }
                        ],
                        "industries": null,
                        "accounts": {
                          "last_account": "26 February 2025",
                          "next_account": "26 February 2026",
                          "due_by_date": "26 August 2026"
                        },
                        "registry_data": {},
                        "user_provided_data": null,
                        "confirmed_by_user_at": null,
                        "last_console_edit_at": null,
                        "is_editable": true
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:45:00.000000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールド単位の問題はDRFの標準エンベロープを使用します。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing kyb_response_id": {
                    "summary": "`kyb_response_id`は必須です",
                    "value": {
                      "kyb_response_id": [
                        "This field is required."
                      ]
                    }
                  },
                  "save_api_request=false rejected": {
                    "summary": "セレクトは常に保存されます",
                    "value": {
                      "save_api_request": [
                        "KYB registry select must be saved so billing and retrieval can be tracked."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、スクリーニングやプロバイダーの呼び出しが行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "レポートは受け付けられ、まだ処理中です。レポートの準備中は、エンドポイントは202 Accepted、kyb_registry.fetch_status=pending、registry_tier_delivered=nullを返します。request_idを保持し、registry_checks[0].company.fetch_statusが解決されるまでGET /v3/session/{request_id}/decision/を取得してください。Diditはレポートを自動的に完成させ、準備ができた時点で提供されたレベルの料金を請求します。保留中に購入を繰り返さないでください。新しいPOSTごとに別のリクエストが作成されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1v3~1kyb~1shareholders~1/post/responses/200/content/application~1json/schema"
                },
                "examples": {
                  "Pending (registry still resolving)": {
                    "summary": "所有構造レポートはまだ処理中です。保存済みの判定を取得してください",
                    "value": {
                      "request_id": "9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e",
                      "kyb_registry": {
                        "uuid": "7c0a4f7e-2b1d-4f6a-9c3e-8d5b2a1f0e9d",
                        "node_id": "feature_kyb_registry",
                        "status": "Not Finished",
                        "registry_status": null,
                        "data_resolved": false,
                        "company_name": "Example Holdings Limited",
                        "registration_number": "12345678",
                        "country_code": "HK",
                        "region": null,
                        "company_type": null,
                        "incorporation_date": null,
                        "registered_address": null,
                        "tax_number": null,
                        "risk_level": null,
                        "verification_status": null,
                        "is_from_registry": true,
                        "fetch_status": "pending",
                        "alternative_names": null,
                        "nature_of_business": null,
                        "registered_capital": null,
                        "registered_capital_amount": null,
                        "registered_capital_currency": null,
                        "website": null,
                        "email": null,
                        "phone": null,
                        "legal_entity_identifier": null,
                        "location_of_registration": null,
                        "financial_summary": {},
                        "officers": [],
                        "beneficial_owners": [],
                        "addresses": null,
                        "industries": null,
                        "accounts": null,
                        "registry_data": {},
                        "user_provided_data": null,
                        "confirmed_by_user_at": null,
                        "last_console_edit_at": null,
                        "is_editable": true,
                        "registry_tier_delivered": null,
                        "registry_ownership_status": "pending"
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:45:00.000000+00:00",
                      "registry_tier_delivered": null,
                      "registry_tier_requested": "shareholders"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/kyb/ubo/": {
      "post": {
        "summary": "最終的な実質的支配者情報付きのKYB法人登記企業（スタンドアロン）",
        "operationId": "post_v3_kyb_ubo",
        "x-didit-sdk": {
          "resource": "kyb",
          "method": "list_ubos",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [],
        "description": "`POST /v3/kyb/search/`が返した候補1件について、Liteプロファイル、直接の株主、**および所有構造のチェーンをたどって特定した最終的な実質的支配者**（`registry_data.ubo_resolution`に親会社のチェーンが含まれます）を取得します。\n\n**検索との組み合わせ**：同じアプリケーションでの検索が返した候補の`kyb_response_id`を、返されたとおりに渡してください。検索は購入する予定のレベル（`POST /v3/kyb/search/`の`tier`）で行ってください。検索はそのレベルを提供する登記機関チェーンで実行されるため、Liteでの検索結果が空でも、その登記機関に企業の記録がないことの証明にはなりません。その国の所有構造データが別の登記機関にある場合、Diditは登記番号を使ってその登記機関で企業を再検索します。追加料金はかかりません。\n\n**請求**：その国のUBO料金で請求されます。[KYB登記機関の料金](/ja/getting-started/kyb-registry-pricing)を参照してください。提供されるレベルは、その国と登記機関が提供できる最も高いレベルです。特定されたレポートで実質的支配者として自然人が1人も挙げられていない場合はShareholders、所有構造の記録がまったくない場合はLiteになります。請求されたレベルは`registry_tier_delivered`に示されます。残高は、登記機関への呼び出しを行う前にUBO料金と照合されます（不足している場合は`403`）。\n\n**利用条件**：v3のみです。呼び出しごとに企業セッションが作成されます（そのIDが`request_id`です）。\n\n**保留中のレポート**：レポートがまだ準備中の場合、または所有構造セクションがまだ登記機関から取得されていない場合、エンドポイントは202 Accepted、kyb_registry.fetch_status=pending、kyb_registry.registry_ownership_status=pending、registry_tier_delivered=nullを返します。request_idを保持し、registry_checks[0].company.fetch_statusが確定するまでGET /v3/session/{request_id}/decision/で取得してください。Diditはレポートを自動的に完成させ、準備が整った時点で提供したレベルの料金を請求します。保留中は購入を繰り返さないでください。新しいPOSTを送るたびに、別のリクエストが作成されます。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KYBRegistryCandidateRequest"
              },
              "example": {
                "kyb_response_id": "69aeeb95febb0f1704042259",
                "vendor_data": "company-1234"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/kyb/ubo/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"kyb_response_id\": \"69aeeb95febb0f1704042259\",\n    \"vendor_data\": \"company-1234\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.kyb.list_ubos(\n    kyb_response_id=\"69aeeb95febb0f1704042259\",\n    vendor_data=\"company-1234\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.kyb.listUbos({\n  kyb_response_id: \"69aeeb95febb0f1704042259\",\n  vendor_data: \"company-1234\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.ListUBOs(ctx, didit.KYBRegistryCandidateRequest{\n\tKYBResponseID: \"69aeeb95febb0f1704042259\",\n\tVendorData:    didit.String(\"company-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.KYBRegistryCandidateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.kyb().listUbos(KYBRegistryCandidateRequest.builder()\n        .kybResponseId(\"69aeeb95febb0f1704042259\")\n        .vendorData(\"company-1234\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->kyb->listUbos([\n    'kyb_response_id' => '69aeeb95febb0f1704042259',\n    'vendor_data' => 'company-1234',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.kyb.list_ubos(\n  kyb_response_id: \"69aeeb95febb0f1704042259\",\n  vendor_data: \"company-1234\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Kyb.ListUbosAsync(new KYBRegistryCandidateRequest\n{\n    KybResponseId = \"69aeeb95febb0f1704042259\",\n    VendorData = \"company-1234\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "企業レポートが返され、提供されたレベルで請求されました。準備中の所有構造レポートは202を返す場合があります。保存された判定を後から取得できるよう、request_idを保持してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "request_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "この取得のために作成された企業セッションのID。レスポンスの後に登記情報が確定した場合も、保存されたレコード（コンソールで確認可能）は更新され続けます。"
                    },
                    "registry_tier_requested": {
                      "type": "string",
                      "enum": [
                        "basic",
                        "shareholders",
                        "ubo"
                      ],
                      "description": "このエンドポイントが提供するレベル: `basic`（Lite、一部対象のみ）、`shareholders`、`ubo`。"
                    },
                    "registry_tier_delivered": {
                      "type": "string",
                      "enum": [
                        "basic",
                        "shareholders",
                        "ubo",
                        null
                      ],
                      "description": "実際に提供され、請求されたレベル。その国の登記機関が所有構造データを保持していない場合、登記機関にこの企業の所有構造の記録がない場合、または`ubo`リクエストで解決されたレポートが実質的支配者として自然人を1人も挙げていない場合は、リクエストしたレベルより低くなります。",
                      "nullable": true
                    },
                    "kyb_registry": {
                      "type": "object",
                      "description": "法人登記上の企業の完全なプロフィール。",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "description": "この企業レコードに対するDiditのIDです。"
                        },
                        "node_id": {
                          "type": "string",
                          "example": "feature_kyb_registry"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "Not Finished",
                            "Approved",
                            "Declined",
                            "In Review"
                          ],
                          "description": "登記チェックに対するDiditの評価です（例：企業が登記上アクティブでない場合、または所有構造データを導出できなかった場合は`In Review`）。"
                        },
                        "registry_status": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "active",
                            "dissolved",
                            "deregistered",
                            "see full details",
                            "authorised",
                            "appointed representative",
                            "unauthorised",
                            "inactive",
                            "no longer authorised",
                            "closed",
                            "struck off",
                            null
                          ],
                          "description": "登記機関が報告した、正規化された企業ステータス。"
                        },
                        "data_resolved": {
                          "type": "boolean",
                          "description": "法人登記から完全なプロファイルが返されると`true`になります。ポーリング後も法人登記側でまだ処理中だった場合は`false`です。法人登記側の処理が完了すると、保存されたレコードは自動的に補完されます。"
                        },
                        "company_name": {
                          "type": "string",
                          "example": "Tesco PLC"
                        },
                        "registration_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "00445790"
                        },
                        "country_code": {
                          "type": "string",
                          "description": "ISO 3166-1 alpha-2。",
                          "example": "GB"
                        },
                        "region": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記機関が地域単位の場合の地域区分コード（例: `US-CA`の場合は`CA`）。それ以外の場合は空です。"
                        },
                        "company_type": {
                          "type": "string",
                          "nullable": true,
                          "example": "Public Limited Company"
                        },
                        "incorporation_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "example": "1947-11-27"
                        },
                        "registered_address": {
                          "type": "string",
                          "nullable": true,
                          "example": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA"
                        },
                        "tax_number": {
                          "type": "string",
                          "nullable": true,
                          "example": "GB412 8925 93"
                        },
                        "risk_level": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記所が報告したリスクレベル（取得できる場合）。"
                        },
                        "verification_status": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記上の認証ステータス（取得できる場合）。"
                        },
                        "is_from_registry": {
                          "type": "boolean",
                          "description": "このエンドポイントでは常に`true`です。プロファイルは公式の登記簿から取得されています。"
                        },
                        "fetch_status": {
                          "type": "string",
                          "enum": [
                            "pending",
                            "resolved"
                          ],
                          "description": "登記取得のライフサイクル。`data_resolved`に反映されます。"
                        },
                        "alternative_names": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合の、別名、商号、旧社名、または原語表記の企業名（テキスト）です。"
                        },
                        "nature_of_business": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合、事業内容の説明または分類コード。"
                        },
                        "registered_capital": {
                          "type": "string",
                          "nullable": true
                        },
                        "registered_capital_amount": {
                          "type": "string",
                          "nullable": true,
                          "description": "報告されている場合の、文字列形式の10進数の金額。"
                        },
                        "registered_capital_currency": {
                          "type": "string",
                          "nullable": true,
                          "description": "ISO 4217通貨コード（報告されている場合）。"
                        },
                        "website": {
                          "type": "string",
                          "nullable": true,
                          "example": "https://www.tesco.com/"
                        },
                        "email": {
                          "type": "string",
                          "nullable": true,
                          "example": "customer.service@tesco.co.uk"
                        },
                        "phone": {
                          "type": "string",
                          "nullable": true,
                          "example": "03301231688"
                        },
                        "legal_entity_identifier": {
                          "type": "string",
                          "nullable": true,
                          "description": "LEI（報告されている場合）。"
                        },
                        "location_of_registration": {
                          "type": "string",
                          "nullable": true,
                          "description": "企業が登録されている登記所・法域（報告されている場合）。"
                        },
                        "vat_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "EUのVAT番号。ホスト型の登記ステップで収集された場合、またはその後に編集された場合に設定されます。選択時点では通常まだ設定されていません。VATおよび納税者番号の検証は、エンドユーザーがホスト型フローで登記ステップを送信した時点で実行されます。"
                        },
                        "vat_validation_status": {
                          "type": "string",
                          "enum": [
                            "valid",
                            "invalid",
                            "format_valid",
                            "invalid_format",
                            "could_not_validate",
                            "not_applicable"
                          ],
                          "description": "登記の送信時に、VAT番号（ない場合は`tax_number`）を検証した結果。`valid` / `invalid`：その国の公式登記（EU VIES、ノルウェー、スイス、ブラジル、コロンビア、コスタリカ、エクアドル、パラグアイ。ポーランドは国内のVAT登録簿でも判定）によって判定されます。`format_valid` / `invalid_format`：照会できる登記がない場合に、その国の形式およびチェックディジットのルールによって判定されます。`could_not_validate`：登記を利用できませんでした。`not_applicable`：番号がない、登記もルールもない国である、またはサンドボックスのセッションです。"
                        },
                        "vat_validated_number": {
                          "type": "string",
                          "nullable": true,
                          "description": "確認された番号で、ソース側で認識されている形式のもの（例: フランスのSIRENやオランダのRSINから導出されたVAT番号）。確認が実行されなかった場合は`null`です。"
                        },
                        "vat_validation_source": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "eu_vies",
                            "pl_vat_white_list",
                            "no_brreg",
                            "ch_uid_register",
                            "br_receita_federal",
                            "co_rues",
                            "cr_hacienda",
                            "ec_sri",
                            "py_dnit",
                            "format_rules",
                            null
                          ],
                          "description": "`vat_validation_status`を決定したソース。公式の登記簿、または`format_rules`です。チェックが実行されなかった場合は`null`です。"
                        },
                        "vat_validated_name": {
                          "type": "string",
                          "nullable": true,
                          "description": "番号を検証したソースに登録されている名義（ソースが開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                        },
                        "vat_validated_address": {
                          "type": "string",
                          "nullable": true,
                          "description": "番号を検証した情報源に登録されている住所（情報源が開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                        },
                        "vat_checked_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "チェックの日時。チェックが実行されなかった場合は`null`です。"
                        },
                        "financial_summary": {
                          "type": "object",
                          "nullable": true,
                          "description": "登記所が報告した株式・資本の詳細（通貨、発行済株式総数、株式の種類）（取得できる場合）。"
                        },
                        "officers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "uuid": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "name": {
                                "type": "string",
                                "example": "MELISSA BETHELL"
                              },
                              "designation": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記上の生の役職名（例: `Director`、`Secretary`）。"
                              },
                              "role": {
                                "type": "string",
                                "description": "役職名から導出された正規化された役割。モデルは17種類の値をすべて持ちますが、このエンドポイントでの登記情報の解析では通常、director、non_executive_director、secretary、chairman、company_officerのいずれかが出力されます。",
                                "enum": [
                                  "director",
                                  "non_executive_director",
                                  "secretary",
                                  "chairman",
                                  "ubo",
                                  "shareholder",
                                  "representative",
                                  "founder",
                                  "legal_advisor",
                                  "authorized_signatory",
                                  "trustee",
                                  "beneficiary",
                                  "company_officer",
                                  "settlor",
                                  "protector",
                                  "investor",
                                  "other"
                                ]
                              },
                              "nationality": {
                                "type": "string",
                                "nullable": true
                              },
                              "is_active": {
                                "type": "boolean",
                                "description": "登記簿でその任命が辞任済みとされている場合は`false`。"
                              },
                              "kyc_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "Approved",
                                  "Declined",
                                  "Pending",
                                  null
                                ],
                                "description": "この役員に対してKYCセッションが開始された場合、そのセッションのステータスです。それ以外の場合は`null`です。"
                              },
                              "kyc_session_url": {
                                "type": "string",
                                "nullable": true,
                                "description": "関連するKYCセッションが存在する場合、その認証URL。"
                              },
                              "first_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記機関が明示的に報告した場合の名。氏名からは推測されません。"
                              },
                              "last_name": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿で明示的に報告されている場合の姓。"
                              },
                              "address": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿に記載されている役員の住所。"
                              },
                              "appointment_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "役員の就任日。",
                                "format": "date"
                              },
                              "termination_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "役職の終了日（報告されている場合）。",
                                "format": "date"
                              },
                              "date_of_birth": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記で報告された完全な生年月日。生年または生年月のみが判明している場合はnullです。",
                                "format": "date"
                              },
                              "date_of_birth_year": {
                                "type": "integer",
                                "nullable": true,
                                "minimum": 1,
                                "maximum": 9999,
                                "description": "登記所が報告した生まれ年。完全な日付が取得できない場合も含みます。"
                              },
                              "date_of_birth_month": {
                                "type": "integer",
                                "nullable": true,
                                "minimum": 1,
                                "maximum": 12,
                                "description": "登記所が報告した生まれ月。年のみ判明している場合はnullです。"
                              }
                            }
                          },
                          "description": "登記から抽出された取締役、秘書役、その他の役員です。"
                        },
                        "beneficial_owners": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "uuid": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "name": {
                                "type": "string"
                              },
                              "first_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "last_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "entity_type": {
                                "type": "string",
                                "enum": [
                                  "person",
                                  "company"
                                ],
                                "description": "所有者が自然人か法人か。"
                              },
                              "roles": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "正規化された役割（例: `ubo`、`shareholder`）。"
                              },
                              "ownership_min_shares": {
                                "type": "string",
                                "nullable": true,
                                "description": "登記簿が報告する所有比率帯の下限（例: `25%`）。"
                              },
                              "ownership_max_shares": {
                                "type": "string",
                                "nullable": true,
                                "description": "法人登記が報告した所有構造における比率範囲の上限値。"
                              },
                              "is_active": {
                                "type": "boolean"
                              },
                              "kyc_status": {
                                "type": "string",
                                "nullable": true,
                                "enum": [
                                  "Approved",
                                  "Declined",
                                  "Pending",
                                  null
                                ]
                              },
                              "kyc_session_url": {
                                "type": "string",
                                "nullable": true
                              },
                              "effective_ownership_percent": {
                                "type": "number",
                                "nullable": true,
                                "description": "解析済みの所有割合(上限値、ない場合は下限値)。"
                              },
                              "company_name": {
                                "type": "string",
                                "nullable": true
                              },
                              "registration_number": {
                                "type": "string",
                                "nullable": true
                              },
                              "country_of_birth": {
                                "type": "string",
                                "nullable": true
                              },
                              "email": {
                                "type": "string",
                                "nullable": true
                              },
                              "nationality": {
                                "type": "string",
                                "nullable": true
                              },
                              "designation": {
                                "type": "string",
                                "nullable": true
                              },
                              "voting_min_shares": {
                                "type": "string",
                                "nullable": true
                              },
                              "voting_max_shares": {
                                "type": "string",
                                "nullable": true
                              },
                              "date_of_birth": {
                                "type": "string",
                                "nullable": true,
                                "description": "報告されている場合の完全な生年月日。",
                                "format": "date"
                              },
                              "appointment_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "報告されている場合の任命日。",
                                "format": "date"
                              },
                              "shareholding": {
                                "$ref": "#/components/schemas/KYBRegistryShareholding"
                              }
                            }
                          },
                          "description": "登記簿から抽出された実質的支配者または重要な支配権を有する者です。登記簿が所有構造を公開していない場合は空になることがあります。"
                        },
                        "addresses": {
                          "type": "array",
                          "nullable": true,
                          "description": "登記簿に記載されているすべての住所を、1つの標準形式で示します。記載がない場合はnullです。",
                          "items": {
                            "$ref": "#/components/schemas/KYBRegistryAddress"
                          }
                        },
                        "industries": {
                          "type": "array",
                          "nullable": true,
                          "description": "登記上で会社が分類されている事業活動。単一の正規化された形式です。登記に記載がない場合はnullです。",
                          "items": {
                            "$ref": "#/components/schemas/KYBRegistryIndustry"
                          }
                        },
                        "accounts": {
                          "type": "object",
                          "nullable": true,
                          "additionalProperties": true,
                          "description": "登記申告の日付（取得できる場合）。年次報告書と株主総会にはlast_annual_return_dateとlast_agm_dateを使用し、これらは財務諸表とは区別されます。"
                        },
                        "registry_data": {
                          "$ref": "#/components/schemas/KYBRegistryData"
                        },
                        "user_provided_data": {
                          "type": "object",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です（エンドユーザーが登記データを編集する際に、ホスト型のKYBフローで使用されます）。"
                        },
                        "confirmed_by_user_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "このエンドポイントでは常に`null`です。"
                        },
                        "last_console_edit_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "description": "後でコンソールのレビュアーがレコードを編集したときに設定されます。"
                        },
                        "is_editable": {
                          "type": "boolean",
                          "description": "登記情報から取得したデータをホスト型フローやコンソールで引き続き編集できるかどうか。"
                        },
                        "registry_tier_delivered": {
                          "type": "string",
                          "enum": [
                            "basic",
                            "shareholders",
                            "ubo",
                            null
                          ],
                          "description": "トップレベルの`registry_tier_delivered`と同じ。",
                          "nullable": true
                        },
                        "registry_ownership_status": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "not_requested",
                            "delivered",
                            "not_held",
                            "unavailable",
                            "pending",
                            null
                          ],
                          "description": "所有構造データが返された場合は`delivered`、所有構造の登記簿が応答したもののこの企業が掲載されていない場合は`not_held`（`registry_data.ownership_error`を参照）、所有構造のレベルがリクエストされたものの登記簿にこの企業のデータがなかったか照会できなかった場合は`unavailable`（`registry_data.ownership_error`を参照）、所有構造セクションがまだ登記簿から取得されておらずDiditが取得を完了させている途中の場合は`pending`、Liteレベルでは`not_requested`です。"
                        },
                        "ownership": {
                          "$ref": "#/components/schemas/KYBRegistryOwnership"
                        },
                        "registry_tier": {
                          "type": "string",
                          "nullable": true,
                          "description": "ワークフローが指定した登記のレベル: `basic`、`shareholders`または`ubo`。`ownership.tier_requested`にも含まれます。"
                        },
                        "registry_monitoring": {
                          "type": "object",
                          "nullable": true,
                          "description": "その企業の最新の登記モニターです。存在しない場合は`null`です。",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid"
                            },
                            "status": {
                              "type": "string"
                            },
                            "unavailable_reason": {
                              "type": "string",
                              "nullable": true
                            },
                            "enrolled_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "cancelled_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "last_bill_date": {
                              "type": "string",
                              "format": "date",
                              "nullable": true
                            },
                            "next_bill_date": {
                              "type": "string",
                              "format": "date",
                              "nullable": true
                            },
                            "last_event_at": {
                              "type": "string",
                              "format": "date-time",
                              "nullable": true
                            },
                            "events_count": {
                              "type": "integer"
                            },
                            "watched_fields": {
                              "description": "モニターが監視する企業フィールド。"
                            }
                          }
                        }
                      }
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "送信した`vendor_data`をそのまま返します。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true,
                      "description": "送信した`metadata`のエコー。"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "examples": {
                  "Resolved company": {
                    "summary": "登記上の完全なプロフィール（役員リストは簡潔にするため省略）",
                    "value": {
                      "request_id": "9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e",
                      "kyb_registry": {
                        "uuid": "f1e2d3c4-b5a6-4789-9c0d-1e2f3a4b5c6d",
                        "node_id": "feature_kyb_registry",
                        "status": "In Review",
                        "registry_status": "active",
                        "data_resolved": true,
                        "company_name": "Tesco PLC",
                        "registration_number": "00445790",
                        "country_code": "GB",
                        "region": "",
                        "company_type": "Public Limited Company",
                        "incorporation_date": "1947-11-27",
                        "registered_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
                        "tax_number": "GB412 8925 93",
                        "risk_level": "low risk",
                        "verification_status": "verified",
                        "is_from_registry": true,
                        "fetch_status": "resolved",
                        "alternative_names": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
                        "nature_of_business": null,
                        "registered_capital": null,
                        "registered_capital_amount": null,
                        "registered_capital_currency": null,
                        "website": "https://www.tesco.com/",
                        "email": "customer.service@tesco.co.uk",
                        "phone": "03301231688",
                        "legal_entity_identifier": null,
                        "location_of_registration": null,
                        "financial_summary": {
                          "currency": "Pound (£)",
                          "total_number_of_shares": "8174378721",
                          "meta_detail": {
                            "Class_Of_Share": "Ordinary"
                          }
                        },
                        "officers": [
                          {
                            "uuid": "a1b2c3d4-e5f6-4789-9a0b-1c2d3e4f5a6b",
                            "name": "CHRISTOPHER JON TAYLOR",
                            "designation": "Secretary",
                            "role": "secretary",
                            "nationality": null,
                            "is_active": true,
                            "kyc_status": null,
                            "kyc_session_url": null
                          },
                          {
                            "uuid": "b2c3d4e5-f6a7-4890-8b1c-2d3e4f5a6b7c",
                            "name": "MELISSA BETHELL",
                            "designation": "Director",
                            "role": "director",
                            "nationality": "British",
                            "is_active": true,
                            "kyc_status": null,
                            "kyc_session_url": null
                          }
                        ],
                        "beneficial_owners": [],
                        "addresses": [
                          {
                            "address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
                            "type": "legal_entity_registry_address",
                            "description": "registered office address"
                          }
                        ],
                        "industries": null,
                        "accounts": {
                          "last_account": "26 February 2025",
                          "next_account": "26 February 2026",
                          "due_by_date": "26 August 2026"
                        },
                        "registry_data": {
                          "ubo_resolution": {
                            "parent_chain": [],
                            "subsidiaries": [],
                            "unresolved": []
                          }
                        },
                        "user_provided_data": null,
                        "confirmed_by_user_at": null,
                        "last_console_edit_at": null,
                        "is_editable": true
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:45:00.000000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールド単位の問題はDRFの標準エンベロープを使用します。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing kyb_response_id": {
                    "summary": "`kyb_response_id`は必須です",
                    "value": {
                      "kyb_response_id": [
                        "This field is required."
                      ]
                    }
                  },
                  "save_api_request=false rejected": {
                    "summary": "セレクトは常に保存されます",
                    "value": {
                      "save_api_request": [
                        "KYB registry select must be saved so billing and retrieval can be tracked."
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "権限がありません。`x-api-key`ヘッダーがない場合に加え、呼び出し元の組織の残高が呼び出しを賄えない場合にも返されます。誤った、取り消された、または期限切れのキーの場合は`401`が返されます。キーがない場合は`{\"detail\": ...}`とともに`403`が返され、誤った、取り消された、または期限切れのキーの場合は`401`が返されます。クレジット不足の場合は、スクリーニングやプロバイダーの呼び出しが行われる前に`{\"error\": ...}`とともに`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Not enough credits": {
                    "summary": "組織の残高でこの呼び出しの料金を賄えません",
                    "value": {
                      "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。すべてのPOST/PATCH/DELETEエンドポイントは、APIキーごとに1分あたり300件の書き込みリクエストという共通の上限を共有します。レスポンスには`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`、`Retry-After`ヘッダーが含まれます。",
            "content": {
              "application/json": {
                "examples": {
                  "Write rate limit exceeded": {
                    "summary": "現在の1分間に300件を超える書き込みリクエスト",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "レポートは受け付けられ、まだ処理中です。レポートの準備中は、エンドポイントは202 Accepted、kyb_registry.fetch_status=pending、registry_tier_delivered=nullを返します。request_idを保持し、registry_checks[0].company.fetch_statusが解決されるまでGET /v3/session/{request_id}/decision/を取得してください。Diditはレポートを自動的に完成させ、準備ができた時点で提供されたレベルの料金を請求します。保留中に購入を繰り返さないでください。新しいPOSTごとに別のリクエストが作成されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1v3~1kyb~1ubo~1/post/responses/200/content/application~1json/schema"
                },
                "examples": {
                  "Pending (registry still resolving)": {
                    "summary": "所有構造レポートはまだ処理中です。保存済みの判定を取得してください",
                    "value": {
                      "request_id": "9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e",
                      "kyb_registry": {
                        "uuid": "7c0a4f7e-2b1d-4f6a-9c3e-8d5b2a1f0e9d",
                        "node_id": "feature_kyb_registry",
                        "status": "Not Finished",
                        "registry_status": null,
                        "data_resolved": false,
                        "company_name": "Example Holdings Limited",
                        "registration_number": "12345678",
                        "country_code": "HK",
                        "region": null,
                        "company_type": null,
                        "incorporation_date": null,
                        "registered_address": null,
                        "tax_number": null,
                        "risk_level": null,
                        "verification_status": null,
                        "is_from_registry": true,
                        "fetch_status": "pending",
                        "alternative_names": null,
                        "nature_of_business": null,
                        "registered_capital": null,
                        "registered_capital_amount": null,
                        "registered_capital_currency": null,
                        "website": null,
                        "email": null,
                        "phone": null,
                        "legal_entity_identifier": null,
                        "location_of_registration": null,
                        "financial_summary": {},
                        "officers": [],
                        "beneficial_owners": [],
                        "addresses": null,
                        "industries": null,
                        "accounts": null,
                        "registry_data": {},
                        "user_provided_data": null,
                        "confirmed_by_user_at": null,
                        "last_console_edit_at": null,
                        "is_editable": true,
                        "registry_tier_delivered": null,
                        "registry_ownership_status": "pending"
                      },
                      "vendor_data": "company-1234",
                      "metadata": null,
                      "created_at": "2026-06-11T10:45:00.000000+00:00",
                      "registry_tier_delivered": null,
                      "registry_tier_requested": "ubo"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/id-verification/wallets/": {
      "get": {
        "operationId": "list_wallets",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "description": "すべてのDigital IDウォレットと、その開始エンドポイント、対象国、必須フィールド、およびこのアプリケーションがこの環境で現時点で開始できるかどうかです。一覧に掲載されていても、稼働中であるとは限りません。",
        "summary": "Digital IDウォレットの一覧取得",
        "tags": [
          "Digital ID wallets"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletCatalogResponse"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": "認証情報がありません（x-api-keyまたはAuthorization: Bearer）。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request GET \\\n  --url https://verification.didit.me/v3/id-verification/wallets/ \\\n  --header 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.list()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.list();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.List(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().list();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->list();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.list\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.ListAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/id-verification/wallets/verifications/{request_id}/": {
      "get": {
        "operationId": "get_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "retrieve_verification",
          "auth": "api_key",
          "server": true
        },
        "description": "ウォレット認証のステータスと結果です。認証済みの場合は正規化された本人情報とウォレット自体の属性、却下の場合はエラーコード、保留中の場合は次のアクションが含まれます。expires_atを過ぎた認証の判定はtimeoutになります。",
        "summary": "ウォレット認証を取得",
        "parameters": [
          {
            "in": "path",
            "name": "request_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "開始エンドポイントが返したrequest_idです。",
            "required": true
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "ftn",
                      "name": "Finnish Trust Network",
                      "issuing_authority": "Finnish banks and mobile operators (FTN)"
                    },
                    "country": "FIN",
                    "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"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": "認証情報がありません（x-api-keyまたはAuthorization: Bearer）。"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーnot_found：このアプリケーションのウォレット認証に、このrequest_idを持つものはありません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request GET \\\n  --url https://verification.didit.me/v3/id-verification/wallets/verifications/REQUEST_ID/ \\\n  --header 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.retrieve_verification(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.retrieveVerification(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.RetrieveVerification(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().retrieveVerification(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->retrieveVerification('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.retrieve_verification(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.RetrieveVerificationAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/id-verification/wallets/verifications/{request_id}/poll/": {
      "post": {
        "operationId": "poll_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "poll_verification",
          "auth": "api_key",
          "server": true
        },
        "description": "Smart-IDおよびMobile-ID: ユーザーが確認したか、拒否したか、プロンプトを期限切れにしたかをプロバイダーに問い合わせ、確認した場合は署名された本人情報を検証します。リダイレクト型ウォレットはユーザーのブラウザ経由で完了するため、その場合は検証結果を読み取るだけです。処理後の検証の状態を返します。",
        "summary": "ウォレット検証をポーリングする",
        "parameters": [
          {
            "in": "path",
            "name": "request_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "開始エンドポイントが返したrequest_idです。",
            "required": true
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "smart_id",
                      "name": "Smart-ID",
                      "issuing_authority": "SK ID Solutions"
                    },
                    "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"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": "認証情報がありません（x-api-keyまたはAuthorization: Bearer）。"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーnot_found：このアプリケーションのウォレット認証に、このrequest_idを持つものはありません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/verifications/REQUEST_ID/poll/ \\\n  --header 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.poll_verification(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.pollVerification(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.PollVerification(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().pollVerification(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->pollVerification('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.poll_verification(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.PollVerificationAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/id-verification/wallets/verifications/{request_id}/cancel/": {
      "post": {
        "operationId": "cancel_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "cancel_verification",
          "auth": "api_key",
          "server": true
        },
        "description": "保留中の認証を取り消します。キャンセルとして却下され、請求されることはありません。判定済みの認証は変更されずに返されます。Smart-IDおよびMobile-ID：ポーリングがサインインを確認している最中にキャンセルが届いた場合、そのポーリングを数秒待ってから却下します。ユーザーがすでに確認していた場合は認証済みとして返します。ユーザーが現在完了しようとしている認証はキャンセルできません（Retry-Afterを伴う409 verification_in_progress）。その秒数が経過した後に再試行して結果を取得してください。",
        "summary": "ウォレット検証をキャンセル",
        "parameters": [
          {
            "in": "path",
            "name": "request_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "開始エンドポイントが返したrequest_idです。",
            "required": true
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "ftn",
                      "name": "Finnish Trust Network",
                      "issuing_authority": "Finnish banks and mobile operators (FTN)"
                    },
                    "country": "FIN",
                    "status": "Declined",
                    "outcome": "cancelled",
                    "error": "cancelled_by_customer",
                    "interaction": "redirect",
                    "simulated": false,
                    "expires_at": "2026-01-01T10:10:00Z",
                    "next_action": null,
                    "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"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": "認証情報がありません（x-api-keyまたはAuthorization: Bearer）。"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーnot_found：このアプリケーションのウォレット認証に、このrequest_idを持つものはありません。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーverification_in_progress：ユーザーが現在このサインインを完了しようとしています。Retry-Afterヘッダーが再試行のタイミングを示します。再試行すると、判定済みの認証が返されます。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/verifications/REQUEST_ID/cancel/ \\\n  --header 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.cancel_verification(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.cancelVerification(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.CancelVerification(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().cancelVerification(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->cancelVerification('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.cancel_verification(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.CancelVerificationAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/id-verification/wallets/mitid/": {
      "post": {
        "operationId": "start_mitid_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_mitid",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにMitIDのサインイン(Danish Agency for Digital Government、DNK)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "MitID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMitidWalletVerificationStartRequest"
              },
              "example": {
                "country": "DNK",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMitidWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMitidWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "mitid",
                      "name": "MitID",
                      "issuing_authority": "Danish Agency for Digital Government"
                    },
                    "country": "DNK",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/mitid/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"DNK\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_mitid(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"DNK\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startMitid({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"DNK\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartMitid(ctx, didit.IDWalletsStartMitidParams{\n\tBody: didit.DigitalIDWalletAPIMitidWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIMitidWalletVerificationStartCountryEnum(\"DNK\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiMitidWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiMitidWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startMitid(DigitalIdWalletApiMitidWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiMitidWalletVerificationStartCountryEnum.of(\"DNK\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startMitid([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'DNK',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_mitid(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"DNK\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartMitidAsync(new DigitalIdWalletApiMitidWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiMitidWalletVerificationStartCountryEnum(\"DNK\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "mitid"
      }
    },
    "/v3/id-verification/wallets/bankid-se/": {
      "post": {
        "operationId": "start_bankid_se_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_bankid_se",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、BankID (SWE)（Finansiell ID-Teknik/銀行コンソーシアム、SWE）によるサインインを開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザを遷移させるURLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "BankID (SWE)認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidSeWalletVerificationStartRequest"
              },
              "example": {
                "country": "SWE",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidSeWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidSeWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "bankid_se",
                      "name": "BankID",
                      "issuing_authority": "Finansiell ID-Teknik / bank consortium"
                    },
                    "country": "SWE",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/bankid-se/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"SWE\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_bankid_se(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"SWE\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startBankidSe({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"SWE\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartBankidSe(ctx, didit.IDWalletsStartBankidSeParams{\n\tBody: didit.DigitalIDWalletAPIBankidSeWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryEe9enum(\"SWE\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiBankidSeWalletVerificationStartRequest;\nimport me.didit.types.DigitalIdWalletApiCountryEe9Enum;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startBankidSe(DigitalIdWalletApiBankidSeWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryEe9Enum.of(\"SWE\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startBankidSe([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'SWE',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_bankid_se(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"SWE\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartBankidSeAsync(new DigitalIdWalletApiBankidSeWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryEe9Enum(\"SWE\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "bankid_se"
      }
    },
    "/v3/id-verification/wallets/bankid-no/": {
      "post": {
        "operationId": "start_bankid_no_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_bankid_no",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、BankID (NOR)（BankID BankAxept AS、NOR）によるサインインを開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザを遷移させるURLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "BankID (NOR)認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidNoWalletVerificationStartRequest"
              },
              "example": {
                "country": "NOR",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidNoWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidNoWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "bankid_no",
                      "name": "BankID",
                      "issuing_authority": "BankID BankAxept AS"
                    },
                    "country": "NOR",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/bankid-no/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"NOR\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_bankid_no(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"NOR\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startBankidNo({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NOR\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartBankidNo(ctx, didit.IDWalletsStartBankidNoParams{\n\tBody: didit.DigitalIDWalletAPIBankidNoWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryAfcEnum(\"NOR\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiBankidNoWalletVerificationStartRequest;\nimport me.didit.types.DigitalIdWalletApiCountryAfcEnum;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startBankidNo(DigitalIdWalletApiBankidNoWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryAfcEnum.of(\"NOR\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startBankidNo([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'NOR',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_bankid_no(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NOR\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartBankidNoAsync(new DigitalIdWalletApiBankidNoWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryAfcEnum(\"NOR\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "bankid_no"
      }
    },
    "/v3/id-verification/wallets/vipps/": {
      "post": {
        "operationId": "start_vipps_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_vipps",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにVippsによるサインイン（Vipps MobilePay / BankID NO、NOR）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは絶対に読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "Vipps認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiVippsWalletVerificationStartRequest"
              },
              "example": {
                "country": "NOR",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiVippsWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiVippsWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "vipps",
                      "name": "Vipps",
                      "issuing_authority": "Vipps MobilePay / BankID NO"
                    },
                    "country": "NOR",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/vipps/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"NOR\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_vipps(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"NOR\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startVipps({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NOR\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartVipps(ctx, didit.IDWalletsStartVippsParams{\n\tBody: didit.DigitalIDWalletAPIVippsWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryAfcEnum(\"NOR\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiCountryAfcEnum;\nimport me.didit.types.DigitalIdWalletApiVippsWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startVipps(DigitalIdWalletApiVippsWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryAfcEnum.of(\"NOR\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startVipps([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'NOR',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_vipps(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NOR\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartVippsAsync(new DigitalIdWalletApiVippsWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryAfcEnum(\"NOR\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "vipps"
      }
    },
    "/v3/id-verification/wallets/buypass/": {
      "post": {
        "operationId": "start_buypass_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_buypass",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、Buypass ID(Buypass AS、NOR)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "Buypass ID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBuypassWalletVerificationStartRequest"
              },
              "example": {
                "country": "NOR",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBuypassWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBuypassWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "buypass",
                      "name": "Buypass ID",
                      "issuing_authority": "Buypass AS"
                    },
                    "country": "NOR",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/buypass/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"NOR\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_buypass(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"NOR\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startBuypass({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NOR\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartBuypass(ctx, didit.IDWalletsStartBuypassParams{\n\tBody: didit.DigitalIDWalletAPIBuypassWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryAfcEnum(\"NOR\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiBuypassWalletVerificationStartRequest;\nimport me.didit.types.DigitalIdWalletApiCountryAfcEnum;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startBuypass(DigitalIdWalletApiBuypassWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryAfcEnum.of(\"NOR\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startBuypass([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'NOR',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_buypass(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NOR\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartBuypassAsync(new DigitalIdWalletApiBuypassWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryAfcEnum(\"NOR\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "buypass"
      }
    },
    "/v3/id-verification/wallets/itsme/": {
      "post": {
        "operationId": "start_itsme_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_itsme",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにitsmeサインイン（ベルギーのMobile ID。BEL、LUX、NLD）を開始します。課金は1回のみで、本人確認が完了した場合にのみ発生します。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はURLからではなく、必ずGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得してください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション（simulated: true）が返されます。",
        "summary": "itsme認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiItsmeWalletVerificationStartRequest"
              },
              "example": {
                "country": "BEL",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiItsmeWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiItsmeWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "itsme",
                      "name": "itsme",
                      "issuing_authority": "Belgian Mobile ID"
                    },
                    "country": "BEL",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/itsme/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"BEL\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_itsme(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"BEL\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startItsme({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"BEL\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartItsme(ctx, didit.IDWalletsStartItsmeParams{\n\tBody: didit.DigitalIDWalletAPIItsmeWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.DigitalIDWalletAPIItsmeWalletVerificationStartCountryEnum(\"BEL\"),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiItsmeWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiItsmeWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startItsme(DigitalIdWalletApiItsmeWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiItsmeWalletVerificationStartCountryEnum.of(\"BEL\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startItsme([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'BEL',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_itsme(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"BEL\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartItsmeAsync(new DigitalIdWalletApiItsmeWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = \"BEL\",\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "itsme"
      }
    },
    "/v3/id-verification/wallets/idin/": {
      "post": {
        "operationId": "start_idin_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_idin",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにiDINによるサインイン（オランダの銀行 (Currence iDIN)、NLD）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは絶対に読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "iDIN認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdinWalletVerificationStartRequest"
              },
              "example": {
                "country": "NLD",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdinWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdinWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/idin/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"NLD\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_idin(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"NLD\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startIdin({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NLD\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartIdin(ctx, didit.IDWalletsStartIdinParams{\n\tBody: didit.DigitalIDWalletAPIIdinWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIIdinWalletVerificationStartCountryEnum(\"NLD\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiIdinWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiIdinWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startIdin(DigitalIdWalletApiIdinWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiIdinWalletVerificationStartCountryEnum.of(\"NLD\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startIdin([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'NLD',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_idin(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"NLD\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartIdinAsync(new DigitalIdWalletApiIdinWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiIdinWalletVerificationStartCountryEnum(\"NLD\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "idin"
      }
    },
    "/v3/id-verification/wallets/ftn/": {
      "post": {
        "operationId": "start_ftn_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_ftn",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、Finnish Trust Network(フィンランドの銀行および携帯電話事業者(FTN)、FIN)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "Finnish Trust Network認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFtnWalletVerificationStartRequest"
              },
              "example": {
                "country": "FIN",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFtnWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFtnWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "ftn",
                      "name": "Finnish Trust Network",
                      "issuing_authority": "Finnish banks and mobile operators (FTN)"
                    },
                    "country": "FIN",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/ftn/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"FIN\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_ftn(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"FIN\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startFtn({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"FIN\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartFtn(ctx, didit.IDWalletsStartFtnParams{\n\tBody: didit.DigitalIDWalletAPIFtnWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIFtnWalletVerificationStartCountryEnum(\"FIN\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiFtnWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiFtnWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startFtn(DigitalIdWalletApiFtnWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiFtnWalletVerificationStartCountryEnum.of(\"FIN\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startFtn([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'FIN',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_ftn(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"FIN\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartFtnAsync(new DigitalIdWalletApiFtnWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiFtnWalletVerificationStartCountryEnum(\"FIN\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "ftn"
      }
    },
    "/v3/id-verification/wallets/personalausweis/": {
      "post": {
        "operationId": "start_personalausweis_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_personalausweis",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにPersonalausweisによるサインイン（Bundesministerium des Innern (eID)、DEU）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは絶対に読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "Personalausweis認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest"
              },
              "example": {
                "country": "DEU",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "personalausweis",
                      "name": "Personalausweis",
                      "issuing_authority": "Bundesministerium des Innern (eID)"
                    },
                    "country": "DEU",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/personalausweis/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"DEU\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_personalausweis(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"DEU\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startPersonalausweis({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"DEU\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartPersonalausweis(ctx, didit.IDWalletsStartPersonalausweisParams{\n\tBody: didit.DigitalIDWalletAPIPersonalausweisWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIPersonalausweisWalletVerificationStartCountryEnum(\"DEU\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiPersonalausweisWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startPersonalausweis(DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiPersonalausweisWalletVerificationStartCountryEnum.of(\"DEU\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startPersonalausweis([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'DEU',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_personalausweis(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"DEU\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartPersonalausweisAsync(new DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiPersonalausweisWalletVerificationStartCountryEnum(\"DEU\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "personalausweis"
      }
    },
    "/v3/id-verification/wallets/frejaid/": {
      "post": {
        "operationId": "start_frejaid_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_frejaid",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにFreja eIDのサインイン(Freja eID Group、SWE)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "Freja eID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFrejaidWalletVerificationStartRequest"
              },
              "example": {
                "country": "SWE",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFrejaidWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFrejaidWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "frejaid",
                      "name": "Freja eID",
                      "issuing_authority": "Freja eID Group"
                    },
                    "country": "SWE",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/frejaid/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"SWE\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_frejaid(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"SWE\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startFrejaid({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"SWE\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartFrejaid(ctx, didit.IDWalletsStartFrejaidParams{\n\tBody: didit.DigitalIDWalletAPIFrejaidWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryEe9enum(\"SWE\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiCountryEe9Enum;\nimport me.didit.types.DigitalIdWalletApiFrejaidWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startFrejaid(DigitalIdWalletApiFrejaidWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryEe9Enum.of(\"SWE\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startFrejaid([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'SWE',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_frejaid(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"SWE\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartFrejaidAsync(new DigitalIdWalletApiFrejaidWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryEe9Enum(\"SWE\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "frejaid"
      }
    },
    "/v3/id-verification/wallets/uae-pass/": {
      "post": {
        "operationId": "start_uae_pass_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_uae_pass",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにUAE PASSによるサインイン（UAE Digital Government Authority、ARE）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは絶対に読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "UAE PASS認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiUaePassWalletVerificationStartRequest"
              },
              "example": {
                "country": "ARE",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiUaePassWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiUaePassWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "uae_pass",
                      "name": "UAE PASS",
                      "issuing_authority": "UAE Digital Government Authority"
                    },
                    "country": "ARE",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/uae-pass/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"ARE\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_uae_pass(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"ARE\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startUaePass({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"ARE\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartUaePass(ctx, didit.IDWalletsStartUaePassParams{\n\tBody: didit.DigitalIDWalletAPIUaePassWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIUaePassWalletVerificationStartCountryEnum(\"ARE\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiUaePassWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiUaePassWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startUaePass(DigitalIdWalletApiUaePassWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiUaePassWalletVerificationStartCountryEnum.of(\"ARE\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startUaePass([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'ARE',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_uae_pass(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"ARE\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartUaePassAsync(new DigitalIdWalletApiUaePassWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiUaePassWalletVerificationStartCountryEnum(\"ARE\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "uae_pass"
      }
    },
    "/v3/id-verification/wallets/govbr/": {
      "post": {
        "operationId": "start_govbr_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_govbr",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにgov.brによるサインイン（Governo Federal do Brasil、BRA）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは絶対に読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "gov.br認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovbrWalletVerificationStartRequest"
              },
              "example": {
                "country": "BRA",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovbrWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovbrWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "govbr",
                      "name": "gov.br",
                      "issuing_authority": "Governo Federal do Brasil"
                    },
                    "country": "BRA",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/govbr/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"BRA\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_govbr(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"BRA\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startGovbr({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"BRA\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartGovbr(ctx, didit.IDWalletsStartGovbrParams{\n\tBody: didit.DigitalIDWalletAPIGovbrWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIGovbrWalletVerificationStartCountryEnum(\"BRA\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiGovbrWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiGovbrWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startGovbr(DigitalIdWalletApiGovbrWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiGovbrWalletVerificationStartCountryEnum.of(\"BRA\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startGovbr([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'BRA',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_govbr(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"BRA\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartGovbrAsync(new DigitalIdWalletApiGovbrWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiGovbrWalletVerificationStartCountryEnum(\"BRA\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "govbr"
      }
    },
    "/v3/id-verification/wallets/oneid/": {
      "post": {
        "operationId": "start_oneid_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_oneid",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにOneIDのサインイン(OneID (英国の銀行で確認済みの本人情報)、GBR)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "OneID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiOneidWalletVerificationStartRequest"
              },
              "example": {
                "country": "GBR",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiOneidWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiOneidWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "oneid",
                      "name": "OneID",
                      "issuing_authority": "OneID (UK bank-verified identity)"
                    },
                    "country": "GBR",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/oneid/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"GBR\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_oneid(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"GBR\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startOneid({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"GBR\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartOneid(ctx, didit.IDWalletsStartOneidParams{\n\tBody: didit.DigitalIDWalletAPIOneidWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountry520enum(\"GBR\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiCountry520Enum;\nimport me.didit.types.DigitalIdWalletApiOneidWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startOneid(DigitalIdWalletApiOneidWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountry520Enum.of(\"GBR\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startOneid([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'GBR',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_oneid(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"GBR\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartOneidAsync(new DigitalIdWalletApiOneidWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountry520Enum(\"GBR\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "oneid"
      }
    },
    "/v3/id-verification/wallets/govuk-wallet/": {
      "post": {
        "operationId": "start_govuk_wallet_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_govuk_wallet",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにGOV.UK Walletのサインイン(UK Government Digital Service、GBR)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "GOV.UK Wallet認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovukWalletWalletVerificationStartRequest"
              },
              "example": {
                "country": "GBR",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovukWalletWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovukWalletWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "govuk_wallet",
                      "name": "GOV.UK Wallet",
                      "issuing_authority": "UK Government Digital Service"
                    },
                    "country": "GBR",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/govuk-wallet/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"GBR\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_govuk_wallet(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"GBR\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startGovukWallet({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"GBR\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartGovukWallet(ctx, didit.IDWalletsStartGovukWalletParams{\n\tBody: didit.DigitalIDWalletAPIGovukWalletWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountry520enum(\"GBR\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiCountry520Enum;\nimport me.didit.types.DigitalIdWalletApiGovukWalletWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startGovukWallet(DigitalIdWalletApiGovukWalletWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountry520Enum.of(\"GBR\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startGovukWallet([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'GBR',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_govuk_wallet(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"GBR\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartGovukWalletAsync(new DigitalIdWalletApiGovukWalletWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountry520Enum(\"GBR\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "govuk_wallet"
      }
    },
    "/v3/id-verification/wallets/smart-id/": {
      "post": {
        "operationId": "start_smart_id_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_smart_id",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにSmart-IDによるサインイン（SK ID Solutions、EST、LVA、LTU、BEL）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=confirm_in_appと、ユーザーに表示する照合コードが含まれます。ユーザーはアプリでこのコードを確認し、PINを入力します（PINは絶対に収集しないでください）。poll_interval_secondsごとにPOST /v3/id-verification/wallets/verifications/{request_id}/poll/をポーリングするか、Webhookを利用してください。Didit側でもバックグラウンドでポーリングを行います。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "Smart-ID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiSmartIdWalletVerificationStartRequest"
              },
              "example": {
                "country": "EST",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "personal_code": "00000000000"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiSmartIdWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiSmartIdWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "smart_id",
                      "name": "Smart-ID",
                      "issuing_authority": "SK ID Solutions"
                    },
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/smart-id/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"EST\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"personal_code\": \"00000000000\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_smart_id(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"EST\",\n    personal_code=\"00000000000\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startSmartId({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"EST\",\n  personal_code: \"00000000000\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartSmartID(ctx, didit.IDWalletsStartSmartIDParams{\n\tBody: didit.DigitalIDWalletAPISmartIDWalletVerificationStartRequest{\n\t\tVendorData:   didit.String(\"your-customer-reference\"),\n\t\tMetadata:     didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:      didit.DigitalIDWalletAPISmartIDWalletVerificationStartCountryEnum(\"EST\"),\n\t\tPersonalCode: \"00000000000\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiSmartIdWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiSmartIdWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startSmartId(DigitalIdWalletApiSmartIdWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiSmartIdWalletVerificationStartCountryEnum.of(\"EST\"))\n        .personalCode(\"00000000000\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startSmartId([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'EST',\n    'personal_code' => '00000000000',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_smart_id(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"EST\",\n  personal_code: \"00000000000\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartSmartIdAsync(new DigitalIdWalletApiSmartIdWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = \"EST\",\n    PersonalCode = \"00000000000\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "smart_id"
      }
    },
    "/v3/id-verification/wallets/mobile-id/": {
      "post": {
        "operationId": "start_mobile_id_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_mobile_id",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにMobile-IDのサインイン(SK ID Solutionsおよび各国のモバイル通信事業者、EST、LTU)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=confirm_in_appと、ユーザーに表示する照合コードが含まれます。ユーザーはアプリでそのコードを確認し、PINを入力します(PINは決して収集しないでください)。poll_interval_secondsごとにPOST /v3/id-verification/wallets/verifications/{request_id}/poll/をポーリングするか、Webhookを利用してください。Diditもバックグラウンドでポーリングを行います。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "Mobile-ID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMobileIdWalletVerificationStartRequest"
              },
              "example": {
                "country": "EST",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "personal_code": "00000000000",
                "phone_number": "+37200000000"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMobileIdWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMobileIdWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/mobile-id/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"EST\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"personal_code\": \"00000000000\",\n  \"phone_number\": \"+37200000000\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_mobile_id(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"EST\",\n    personal_code=\"00000000000\",\n    phone_number=\"+37200000000\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startMobileId({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"EST\",\n  personal_code: \"00000000000\",\n  phone_number: \"+37200000000\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartMobileID(ctx, didit.IDWalletsStartMobileIDParams{\n\tBody: didit.DigitalIDWalletAPIMobileIDWalletVerificationStartRequest{\n\t\tVendorData:   didit.String(\"your-customer-reference\"),\n\t\tMetadata:     didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:      didit.DigitalIDWalletAPIMobileIDWalletVerificationStartCountryEnum(\"EST\"),\n\t\tPersonalCode: \"00000000000\",\n\t\tPhoneNumber:  \"+37200000000\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiMobileIdWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startMobileId(DigitalIdWalletApiMobileIdWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum.of(\"EST\"))\n        .personalCode(\"00000000000\")\n        .phoneNumber(\"+37200000000\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startMobileId([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'EST',\n    'personal_code' => '00000000000',\n    'phone_number' => '+37200000000',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_mobile_id(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"EST\",\n  personal_code: \"00000000000\",\n  phone_number: \"+37200000000\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartMobileIdAsync(new DigitalIdWalletApiMobileIdWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = \"EST\",\n    PersonalCode = \"00000000000\",\n    PhoneNumber = \"+37200000000\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "mobile_id"
      }
    },
    "/v3/id-verification/wallets/idcard-ee/": {
      "post": {
        "operationId": "start_idcard_ee_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_idcard_ee",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、エストニアIDカード(エストニア警察・国境警備庁、EST)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "エストニアIDカード認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdcardEeWalletVerificationStartRequest"
              },
              "example": {
                "country": "EST",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdcardEeWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdcardEeWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "idcard_ee",
                      "name": "Estonian ID-card",
                      "issuing_authority": "Police and Border Guard Board (Estonia)"
                    },
                    "country": "EST",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/idcard-ee/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"EST\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_idcard_ee(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"EST\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startIdcardEe({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"EST\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartIdcardEe(ctx, didit.IDWalletsStartIdcardEeParams{\n\tBody: didit.DigitalIDWalletAPIIdcardEeWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIIdcardEeWalletVerificationStartCountryEnum(\"EST\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiIdcardEeWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiIdcardEeWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startIdcardEe(DigitalIdWalletApiIdcardEeWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiIdcardEeWalletVerificationStartCountryEnum.of(\"EST\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startIdcardEe([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'EST',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_idcard_ee(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"EST\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartIdcardEeAsync(new DigitalIdWalletApiIdcardEeWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiIdcardEeWalletVerificationStartCountryEnum(\"EST\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "idcard_ee"
      }
    },
    "/v3/id-verification/wallets/eparaksts-mobile/": {
      "post": {
        "operationId": "start_eparaksts_mobile_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_eparaksts_mobile",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにeParaksts mobileによるサインイン（LVRTC (Latvian State Radio and Television Centre)、LVA）を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは絶対に読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "eParaksts mobile認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest"
              },
              "example": {
                "country": "LVA",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "eparaksts_mobile",
                      "name": "eParaksts mobile",
                      "issuing_authority": "LVRTC (Latvian State Radio and Television Centre)"
                    },
                    "country": "LVA",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/eparaksts-mobile/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"LVA\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_eparaksts_mobile(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"LVA\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startEparakstsMobile({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"LVA\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartEparakstsMobile(ctx, didit.IDWalletsStartEparakstsMobileParams{\n\tBody: didit.DigitalIDWalletAPIEparakstsMobileWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIEparakstsMobileWalletVerificationStartCountryEnum(\"LVA\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiEparakstsMobileWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startEparakstsMobile(DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiEparakstsMobileWalletVerificationStartCountryEnum.of(\"LVA\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startEparakstsMobile([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'LVA',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_eparaksts_mobile(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"LVA\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartEparakstsMobileAsync(new DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiEparakstsMobileWalletVerificationStartCountryEnum(\"LVA\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "eparaksts_mobile"
      }
    },
    "/v3/id-verification/wallets/bankid-cz/": {
      "post": {
        "operationId": "start_bankid_cz_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_bankid_cz",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、Bank iD（Bankovní identita, a.s.、CZE）によるサインインを開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザを遷移させるURLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "Bank iD認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidCzWalletVerificationStartRequest"
              },
              "example": {
                "country": "CZE",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidCzWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiBankidCzWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "bankid_cz",
                      "name": "Bank iD",
                      "issuing_authority": "Bankovní identita, a.s."
                    },
                    "country": "CZE",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/bankid-cz/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"CZE\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_bankid_cz(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"CZE\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startBankidCz({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"CZE\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartBankidCz(ctx, didit.IDWalletsStartBankidCzParams{\n\tBody: didit.DigitalIDWalletAPIBankidCzWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryE2dEnum(\"CZE\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiBankidCzWalletVerificationStartRequest;\nimport me.didit.types.DigitalIdWalletApiCountryE2dEnum;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startBankidCz(DigitalIdWalletApiBankidCzWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryE2dEnum.of(\"CZE\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startBankidCz([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'CZE',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_bankid_cz(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"CZE\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartBankidCzAsync(new DigitalIdWalletApiBankidCzWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryE2dEnum(\"CZE\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "bankid_cz"
      }
    },
    "/v3/id-verification/wallets/mojeid/": {
      "post": {
        "operationId": "start_mojeid_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_mojeid",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにMojeIDのサインイン(CZ.NIC、CZE)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "MojeID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMojeidWalletVerificationStartRequest"
              },
              "example": {
                "country": "CZE",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMojeidWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiMojeidWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "mojeid",
                      "name": "MojeID",
                      "issuing_authority": "CZ.NIC"
                    },
                    "country": "CZE",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/mojeid/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"CZE\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_mojeid(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"CZE\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startMojeid({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"CZE\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartMojeid(ctx, didit.IDWalletsStartMojeidParams{\n\tBody: didit.DigitalIDWalletAPIMojeidWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPICountryE2dEnum(\"CZE\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiCountryE2dEnum;\nimport me.didit.types.DigitalIdWalletApiMojeidWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startMojeid(DigitalIdWalletApiMojeidWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiCountryE2dEnum.of(\"CZE\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startMojeid([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'CZE',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_mojeid(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"CZE\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartMojeidAsync(new DigitalIdWalletApiMojeidWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiCountryE2dEnum(\"CZE\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "mojeid"
      }
    },
    "/v3/id-verification/wallets/diia/": {
      "post": {
        "operationId": "start_diia_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_diia",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、Diia(ウクライナデジタル変革省、UKR)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "Diia認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiDiiaWalletVerificationStartRequest"
              },
              "example": {
                "country": "UKR",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiDiiaWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiDiiaWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "diia",
                      "name": "Diia",
                      "issuing_authority": "Ministry of Digital Transformation of Ukraine"
                    },
                    "country": "UKR",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/diia/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"UKR\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_diia(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"UKR\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startDiia({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"UKR\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartDiia(ctx, didit.IDWalletsStartDiiaParams{\n\tBody: didit.DigitalIDWalletAPIDiiaWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIDiiaWalletVerificationStartCountryEnum(\"UKR\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiDiiaWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiDiiaWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startDiia(DigitalIdWalletApiDiiaWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiDiiaWalletVerificationStartCountryEnum.of(\"UKR\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startDiia([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'UKR',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_diia(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"UKR\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartDiiaAsync(new DigitalIdWalletApiDiiaWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiDiiaWalletVerificationStartCountryEnum(\"UKR\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "diia"
      }
    },
    "/v3/id-verification/wallets/franceconnect/": {
      "post": {
        "operationId": "start_franceconnect_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_franceconnect",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、FranceConnect(DINUM(フランス政府)、FRA)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "FranceConnect認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFranceconnectWalletVerificationStartRequest"
              },
              "example": {
                "country": "FRA",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFranceconnectWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiFranceconnectWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "franceconnect",
                      "name": "FranceConnect",
                      "issuing_authority": "DINUM (French state)"
                    },
                    "country": "FRA",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/franceconnect/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"FRA\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_franceconnect(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"FRA\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startFranceconnect({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"FRA\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartFranceconnect(ctx, didit.IDWalletsStartFranceconnectParams{\n\tBody: didit.DigitalIDWalletAPIFranceconnectWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIFranceconnectWalletVerificationStartCountryEnum(\"FRA\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiFranceconnectWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiFranceconnectWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startFranceconnect(DigitalIdWalletApiFranceconnectWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiFranceconnectWalletVerificationStartCountryEnum.of(\"FRA\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startFranceconnect([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'FRA',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_franceconnect(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"FRA\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartFranceconnectAsync(new DigitalIdWalletApiFranceconnectWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiFranceconnectWalletVerificationStartCountryEnum(\"FRA\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "franceconnect"
      }
    },
    "/v3/id-verification/wallets/audkenni/": {
      "post": {
        "operationId": "start_audkenni_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_audkenni",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、Auðkenni（Auðkenni（アイスランドの電子ID）、ISL）によるサインインを開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザを遷移させるURLが含まれます。ユーザーは、request_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション（simulated: true）が返されます。",
        "summary": "Auðkenni認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiAudkenniWalletVerificationStartRequest"
              },
              "example": {
                "country": "ISL",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiAudkenniWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiAudkenniWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "audkenni",
                      "name": "Auðkenni",
                      "issuing_authority": "Auðkenni (Icelandic electronic ID)"
                    },
                    "country": "ISL",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/audkenni/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"ISL\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_audkenni(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"ISL\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startAudkenni({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"ISL\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartAudkenni(ctx, didit.IDWalletsStartAudkenniParams{\n\tBody: didit.DigitalIDWalletAPIAudkenniWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIAudkenniWalletVerificationStartCountryEnum(\"ISL\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiAudkenniWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiAudkenniWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startAudkenni(DigitalIdWalletApiAudkenniWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiAudkenniWalletVerificationStartCountryEnum.of(\"ISL\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startAudkenni([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'ISL',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_audkenni(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"ISL\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartAudkenniAsync(new DigitalIdWalletApiAudkenniWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiAudkenniWalletVerificationStartCountryEnum(\"ISL\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "audkenni"
      }
    },
    "/v3/id-verification/wallets/connectid/": {
      "post": {
        "operationId": "start_connectid_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_connectid",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、ConnectID(Australian Payments Plus、AUS)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "ConnectID認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiConnectidWalletVerificationStartRequest"
              },
              "example": {
                "country": "AUS",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiConnectidWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiConnectidWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "connectid",
                      "name": "ConnectID",
                      "issuing_authority": "Australian Payments Plus"
                    },
                    "country": "AUS",
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/connectid/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"AUS\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_connectid(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"AUS\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startConnectid({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"AUS\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartConnectid(ctx, didit.IDWalletsStartConnectidParams{\n\tBody: didit.DigitalIDWalletAPIConnectidWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.Some(didit.DigitalIDWalletAPIConnectidWalletVerificationStartCountryEnum(\"AUS\")),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiConnectidWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiConnectidWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startConnectid(DigitalIdWalletApiConnectidWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiConnectidWalletVerificationStartCountryEnum.of(\"AUS\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startConnectid([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'AUS',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_connectid(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"AUS\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartConnectidAsync(new DigitalIdWalletApiConnectidWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = new DigitalIdWalletApiConnectidWalletVerificationStartCountryEnum(\"AUS\"),\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "connectid"
      }
    },
    "/v3/id-verification/wallets/eudi/": {
      "post": {
        "operationId": "start_eudi_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_eudi",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずに、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)によるサインインを開始します。料金は本人確認が完了した場合にのみ、1回だけ請求されます。レスポンスにはnext_action.type=redirectと、ユーザーのブラウザの遷移先URLが含まれます。ユーザーはrequest_idとresultが付加されたreturn_urlに戻ります。結果はGET /v3/id-verification/wallets/verifications/{request_id}/またはWebhookから取得し、URLからは決して読み取らないでください。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定論的なシミュレーション(simulated: true)が実行されます。",
        "summary": "EUDI Wallet認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiEudiWalletVerificationStartRequest"
              },
              "example": {
                "country": "AUT",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "return_url": "https://app.example.com/identity/complete"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiEudiWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiEudiWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/eudi/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"AUT\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"return_url\": \"https://app.example.com/identity/complete\"\n}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.id_wallets.start_eudi(\n    vendor_data=\"your-customer-reference\",\n    metadata={\"reference\": \"example\"},\n    country=\"AUT\",\n    return_url=\"https://app.example.com/identity/complete\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.idWallets.startEudi({\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"AUT\",\n  return_url: \"https://app.example.com/identity/complete\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDWallets.StartEudi(ctx, didit.IDWalletsStartEudiParams{\n\tBody: didit.DigitalIDWalletAPIEudiWalletVerificationStartRequest{\n\t\tVendorData: didit.String(\"your-customer-reference\"),\n\t\tMetadata:   didit.Some(map[string]any{\"reference\": \"example\"}),\n\t\tCountry:    didit.DigitalIDWalletAPIEudiWalletVerificationStartCountryEnum(\"AUT\"),\n\t\tReturnURL:  \"https://app.example.com/identity/complete\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.DigitalIdWalletApiEudiWalletVerificationStartCountryEnum;\nimport me.didit.types.DigitalIdWalletApiEudiWalletVerificationStartRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.idWallets().startEudi(DigitalIdWalletApiEudiWalletVerificationStartRequest.builder()\n        .vendorData(\"your-customer-reference\")\n        .metadata(Map.of(\"reference\", \"example\"))\n        .country(DigitalIdWalletApiEudiWalletVerificationStartCountryEnum.of(\"AUT\"))\n        .returnUrl(\"https://app.example.com/identity/complete\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->idWallets->startEudi([\n    'vendor_data' => 'your-customer-reference',\n    'metadata' => ['reference' => 'example'],\n    'country' => 'AUT',\n    'return_url' => 'https://app.example.com/identity/complete',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.id_wallets.start_eudi(\n  vendor_data: \"your-customer-reference\",\n  metadata: { reference: \"example\" },\n  country: \"AUT\",\n  return_url: \"https://app.example.com/identity/complete\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.IdWallets.StartEudiAsync(new DigitalIdWalletApiEudiWalletVerificationStartRequest\n{\n    VendorData = \"your-customer-reference\",\n    Metadata = new Dictionary<string, object> { [\"reference\"] = \"example\" },\n    Country = \"AUT\",\n    ReturnUrl = \"https://app.example.com/identity/complete\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-wallet-id": "eudi"
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/teams/": {
      "get": {
        "summary": "レビューチームを一覧表示",
        "description": "対象アプリケーションに対する`list:cases`が必要です。",
        "operationId": "list_case_teams",
        "x-didit-sdk": {
          "resource": "cases.teams",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CaseReviewTeam"
                      }
                    },
                    "count": {
                      "type": "integer",
                      "description": "一致件数です。上限は100です。上限を超えて続けるにはnextをたどってください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.teams.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.teams.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.Teams.ListAutoPaging(ctx, didit.CasesTeamsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().teams().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->teams->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.teams.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.Teams.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "summary": "レビューチームを作成",
        "description": "対象アプリケーションに対する`write:cases`が必要です。",
        "operationId": "create_case_teams",
        "x-didit-sdk": {
          "resource": "cases.teams",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "responses": {
          "201": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseReviewTeam"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseReviewTeamCreate"
              },
              "example": {
                "name": "AML analysts",
                "members": [
                  {
                    "user_id": "9a000000-0000-4000-8000-0000000000aa",
                    "capacity": 10
                  }
                ]
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.teams.create(\n    name=\"AML analysts\",\n    members=[{\n        \"user_id\": \"9a000000-0000-4000-8000-0000000000aa\",\n        \"capacity\": 10,\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.teams.create({\n  name: \"AML analysts\",\n  members: [{\n    user_id: \"9a000000-0000-4000-8000-0000000000aa\",\n    capacity: 10,\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Teams.Create(ctx, didit.CaseReviewTeamCreate{\n\tName: \"AML analysts\",\n\tMembers: []didit.CaseReviewTeamMemberParam{{\n\t\tUserID:   \"9a000000-0000-4000-8000-0000000000aa\",\n\t\tCapacity: didit.Int(10),\n\t}},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CaseReviewTeamCreate;\nimport me.didit.types.CaseReviewTeamMember;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().teams().create(CaseReviewTeamCreate.builder()\n        .name(\"AML analysts\")\n        .members(List.of(CaseReviewTeamMember.builder()\n                .userId(\"9a000000-0000-4000-8000-0000000000aa\")\n                .capacity(10L)\n                .build()))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->teams->create([\n    'name' => 'AML analysts',\n    'members' => [[\n        'user_id' => '9a000000-0000-4000-8000-0000000000aa',\n        'capacity' => 10,\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.teams.create(\n  name: \"AML analysts\",\n  members: [{\n    user_id: \"9a000000-0000-4000-8000-0000000000aa\",\n    capacity: 10,\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Teams.CreateAsync(new CaseReviewTeamCreate\n{\n    Name = \"AML analysts\",\n    Members = new CaseReviewTeamMember[]\n    {\n        new()\n        {\n            UserId = \"9a000000-0000-4000-8000-0000000000aa\",\n            Capacity = 10,\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/fraud/checks/{check_id}/": {
      "get": {
        "operationId": "root_retrieve",
        "x-didit-sdk": {
          "resource": "fraud_checks",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "description": "以前に作成したチェックを`check_id`で取得します。",
        "summary": "不正チェックを取得する",
        "parameters": [
          {
            "in": "path",
            "name": "check_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudCheckResponse"
                }
              }
            },
            "description": ""
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudClientCredentialsErrorMessage"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "tags": [
          "Fraud Check"
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.fraud_checks.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.fraudChecks.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FraudChecks.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.fraudChecks().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->fraudChecks->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.fraud_checks.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.FraudChecks.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/requests/": {
      "get": {
        "operationId": "organization_application_cases_requests_list",
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "結果の並べ替えに使用するフィールド。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "description": "1ページあたりに返す結果の件数です。",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "description": "結果を返す開始インデックスです。",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingPaginatedCaseRequestList"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.requests.list(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.requests.list(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.Requests.ListAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasesRequestsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().requests().list(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->requests->list('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.requests.list(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.Requests.ListAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "operationId": "organization_application_cases_requests_create",
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseRequestConfirmRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseRequestConfirmRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseRequestConfirmRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "400": {
            "description": "入力が無効である、サポートされていない目的である、認証済みの連絡先が利用できない、または変更不可のレスポンスがすでに存在します。"
          },
          "409": {
            "description": "プレビューが変更されたか期限切れになりました。確定する前に再度プレビューしてください。"
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingCaseRequest"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "署名済みのプレビューを、内容を変えずに15分以内に確認してください。固定テンプレートと、ケース対象者に属するOTP認証済みの連絡先のみが受け付けられます。リクエストIDにより、再試行は冪等になります。配信はキューに登録されます。SENT、SIMULATED、UNKNOWNはそれぞれ異なる結果です。対応が必要なリクエストは、ケースをAwaiting userに設定します。レビューの更新では、ステータスは変更されません。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.requests.create(\n    \"11111111-2222-3333-4444-555555555555\",\n    contact_id=\"11111111-2222-3333-4444-555555555555\",\n    purpose=\"identity_document\",\n    request_id=\"11111111-2222-3333-4444-555555555555\",\n    expires_at=\"2026-01-15T10:00:00Z\",\n    preview_token=\"your-preview-token\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.requests.create(\"11111111-2222-3333-4444-555555555555\", {\n  contact_id: \"11111111-2222-3333-4444-555555555555\",\n  purpose: \"identity_document\",\n  request_id: \"11111111-2222-3333-4444-555555555555\",\n  expires_at: \"2026-01-15T10:00:00Z\",\n  preview_token: \"your-preview-token\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Requests.Create(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CustomerMessagingCaseRequestConfirmRequest{\n\tContactID:    \"11111111-2222-3333-4444-555555555555\",\n\tPurpose:      didit.CustomerMessagingPurposeEnum(\"identity_document\"),\n\tRequestID:    \"11111111-2222-3333-4444-555555555555\",\n\tExpiresAt:    time.Date(2026, 1, 15, 10, 0, 0, 0, time.UTC),\n\tPreviewToken: \"your-preview-token\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.OffsetDateTime;\nimport me.didit.Didit;\nimport me.didit.types.CustomerMessagingCaseRequestConfirmRequest;\nimport me.didit.types.CustomerMessagingPurposeEnum;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().requests().create(\"11111111-2222-3333-4444-555555555555\", CustomerMessagingCaseRequestConfirmRequest.builder()\n        .contactId(\"11111111-2222-3333-4444-555555555555\")\n        .purpose(CustomerMessagingPurposeEnum.of(\"identity_document\"))\n        .requestId(\"11111111-2222-3333-4444-555555555555\")\n        .expiresAt(OffsetDateTime.parse(\"2026-01-15T10:00:00Z\"))\n        .previewToken(\"your-preview-token\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->requests->create('11111111-2222-3333-4444-555555555555', [\n    'contact_id' => '11111111-2222-3333-4444-555555555555',\n    'purpose' => 'identity_document',\n    'request_id' => '11111111-2222-3333-4444-555555555555',\n    'expires_at' => '2026-01-15T10:00:00Z',\n    'preview_token' => 'your-preview-token',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.requests.create(\n  \"11111111-2222-3333-4444-555555555555\",\n  contact_id: \"11111111-2222-3333-4444-555555555555\",\n  purpose: \"identity_document\",\n  request_id: \"11111111-2222-3333-4444-555555555555\",\n  expires_at: \"2026-01-15T10:00:00Z\",\n  preview_token: \"your-preview-token\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Requests.CreateAsync(\"11111111-2222-3333-4444-555555555555\", new CustomerMessagingCaseRequestConfirmRequest\n{\n    ContactId = \"11111111-2222-3333-4444-555555555555\",\n    Purpose = \"identity_document\",\n    RequestId = \"11111111-2222-3333-4444-555555555555\",\n    ExpiresAt = DateTimeOffset.Parse(\"2026-01-15T10:00:00Z\"),\n    PreviewToken = \"your-preview-token\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/fraud/checks/": {
      "post": {
        "operationId": "create_fraud_check",
        "x-didit-sdk": {
          "resource": "fraud_checks",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "description": "1つ以上の型付き識別子を送信すると、正規化、最新のエンリッチメント、国と識別子の種類が対象となる場合の権威あるソースによる検証、独立したリスク次元、推奨事項を1つのレスポンスで受け取れます。\n\nこれらのプロファイルは識別子チェックに対応しています。セルフィーに基づく本人紐付け（`biometric_identity`）には、プロファイルバージョン`2026-09-14.2`とブラジルのCPFが必要です。ユーザーの同意があり、かつ組織にその利用資格がある場合にのみ実行されます。それ以前のバージョンでは`not_available_in_profile_version`として報告されます。実行できないモジュールは、決定論的な理由とともにスキップとして報告されます。応答できなかったソースが本人不一致として報告されることはありません。",
        "summary": "不正チェックを実行",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FraudCheckRequestRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FraudCheckRequestRequest"
              },
              "example": {
                "client_reference": "review-attempt-001",
                "subject": {
                  "identifiers": [
                    {
                      "type": "email",
                      "value": "applicant@example.com"
                    }
                  ],
                  "attributes": {
                    "first_name": "Alex",
                    "last_name": "Example"
                  }
                },
                "checks": {
                  "include": [
                    "networks_same_org",
                    "networks_cross_org",
                    "email_risk"
                  ]
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FraudCheckRequestRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudCheckResponse"
                }
              }
            },
            "description": ""
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudClientCredentialsErrorMessage"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": ""
          },
          "409": {
            "description": "競合（課金なし）：`client_reference`が異なるリクエスト本文ですでに使用されている、同じ`client_reference`のチェックがまだ実行中である（同じリファレンスで`Retry-After`秒後に再試行してください）、またはこのチェックの記録先である認証がチェック完了前に削除された、のいずれかです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                },
                "examples": {
                  "different_body": {
                    "summary": "異なるボディで参照が再利用された",
                    "value": {
                      "error": "client_reference has already been used with a different request body."
                    }
                  },
                  "still_running": {
                    "summary": "この参照番号のチェックはまだ実行中です",
                    "value": {
                      "error": "A check with this client_reference is already running. Retry with the same reference later."
                    }
                  },
                  "verification_deleted": {
                    "summary": "チェックが完了する前に認証が削除されました",
                    "value": {
                      "error": "This verification was deleted before the check completed."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "同じ`client_reference`のチェックがまだ実行中の場合に送信される、再試行までに待機する秒数。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "tags": [
          "Fraud Check"
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.fraud_checks.create(\n    client_reference=\"review-attempt-001\",\n    subject={\n        \"identifiers\": [{\n            \"type\": \"email\",\n            \"value\": \"applicant@example.com\",\n        }],\n        \"attributes\": {\n            \"first_name\": \"Alex\",\n            \"last_name\": \"Example\",\n        },\n    },\n    checks={\n        \"include\": [\"networks_same_org\", \"networks_cross_org\", \"email_risk\"],\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.fraudChecks.create({\n  client_reference: \"review-attempt-001\",\n  subject: {\n    identifiers: [{\n      type: \"email\",\n      value: \"applicant@example.com\",\n    }],\n    attributes: {\n      first_name: \"Alex\",\n      last_name: \"Example\",\n    },\n  },\n  checks: {\n    include: [\"networks_same_org\", \"networks_cross_org\", \"email_risk\"],\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FraudChecks.Create(ctx, didit.FraudCheckRequestRequest{\n\tClientReference: didit.String(\"review-attempt-001\"),\n\tSubject: didit.FraudCheckSubjectRequest{\n\t\tIdentifiers: []didit.FraudCheckIdentifierRequest{{\n\t\t\tType:  didit.FraudTypeEnum(\"email\"),\n\t\t\tValue: \"applicant@example.com\",\n\t\t}},\n\t\tAttributes: didit.Some(didit.FraudCheckAttributesRequest{\n\t\t\tFirstName: didit.String(\"Alex\"),\n\t\t\tLastName:  didit.String(\"Example\"),\n\t\t}),\n\t},\n\tChecks: didit.Some(didit.FraudCheckModuleSelectionRequest{\n\t\tInclude: didit.Some([]didit.FraudExcludeEnum{didit.FraudExcludeEnum(\"networks_same_org\"), didit.FraudExcludeEnum(\"networks_cross_org\"), didit.FraudExcludeEnum(\"email_risk\")}),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.FraudCheckAttributesRequest;\nimport me.didit.types.FraudCheckIdentifierRequest;\nimport me.didit.types.FraudCheckModuleSelectionRequest;\nimport me.didit.types.FraudCheckRequestRequest;\nimport me.didit.types.FraudCheckSubjectRequest;\nimport me.didit.types.FraudExcludeEnum;\nimport me.didit.types.FraudTypeEnum;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.fraudChecks().create(FraudCheckRequestRequest.builder()\n        .clientReference(\"review-attempt-001\")\n        .subject(FraudCheckSubjectRequest.builder()\n                .identifiers(List.of(FraudCheckIdentifierRequest.builder()\n                        .type(FraudTypeEnum.of(\"email\"))\n                        .value(\"applicant@example.com\")\n                        .build()))\n                .attributes(FraudCheckAttributesRequest.builder()\n                        .firstName(\"Alex\")\n                        .lastName(\"Example\")\n                        .build())\n                .build())\n        .checks(FraudCheckModuleSelectionRequest.builder()\n                .include(List.of(FraudExcludeEnum.of(\"networks_same_org\"), FraudExcludeEnum.of(\"networks_cross_org\"), FraudExcludeEnum.of(\"email_risk\")))\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->fraudChecks->create([\n    'client_reference' => 'review-attempt-001',\n    'subject' => [\n        'identifiers' => [[\n            'type' => 'email',\n            'value' => 'applicant@example.com',\n        ]],\n        'attributes' => [\n            'first_name' => 'Alex',\n            'last_name' => 'Example',\n        ],\n    ],\n    'checks' => [\n        'include' => ['networks_same_org', 'networks_cross_org', 'email_risk'],\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.fraud_checks.create(\n  client_reference: \"review-attempt-001\",\n  subject: {\n    identifiers: [{\n      type: \"email\",\n      value: \"applicant@example.com\",\n    }],\n    attributes: {\n      first_name: \"Alex\",\n      last_name: \"Example\",\n    },\n  },\n  checks: {\n    include: [\"networks_same_org\", \"networks_cross_org\", \"email_risk\"],\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.FraudChecks.CreateAsync(new FraudCheckRequestRequest\n{\n    ClientReference = \"review-attempt-001\",\n    Subject = new()\n    {\n        Identifiers = new FraudCheckIdentifierRequest[]\n        {\n            new()\n            {\n                Type = \"email\",\n                Value = \"applicant@example.com\",\n            },\n        },\n        Attributes = new FraudCheckAttributesRequest\n        {\n            FirstName = \"Alex\",\n            LastName = \"Example\",\n        },\n    },\n    Checks = new FraudCheckModuleSelectionRequest\n    {\n        Include = new FraudExcludeEnum[] { \"networks_same_org\", \"networks_cross_org\", \"email_risk\" },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/requests/{request_uuid}/cancel/": {
      "post": {
        "operationId": "organization_application_cases_requests_cancel_create",
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "cancel",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "request_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingCaseRequest"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "400": {
            "description": "入力が無効である、サポートされていない目的である、認証済みの連絡先が利用できない、または変更不可のレスポンスがすでに存在します。"
          },
          "409": {
            "description": "プレビューが変更されたか期限切れになりました。確定する前に再度プレビューしてください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.requests.cancel(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.requests.cancel(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Requests.Cancel(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().requests().cancel(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->requests->cancel('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.requests.cancel(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Requests.CancelAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/requests/options/": {
      "get": {
        "operationId": "organization_application_cases_requests_options_retrieve",
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "retrieve_options",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingCaseRequestOptions"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.requests.retrieve_options(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.requests.retrieveOptions(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Requests.RetrieveOptions(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().requests().retrieveOptions(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->requests->retrieveOptions('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.requests.retrieve_options(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Requests.RetrieveOptionsAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/requests/{request_uuid}/attachment/": {
      "get": {
        "operationId": "organization_application_cases_requests_attachment_retrieve",
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "retrieve_attachment",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "request_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\ncontent = client.cases.requests.retrieve_attachment(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nwith open(\"download.png\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst content = await didit.cases.requests.retrieveAttachment(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nawait writeFile(\"download.png\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresp, err := client.Cases.Requests.RetrieveAttachment(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.png\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().requests().retrieveAttachment(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\")\n        .writeTo(Path.of(\"download.png\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$content = $didit->cases->requests->retrieveAttachment('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555');\n$content->saveTo('download.png');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ncontent = didit.cases.requests.retrieve_attachment(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nFile.binwrite(\"download.png\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar content = await client.Cases.Requests.RetrieveAttachmentAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nawait content.SaveToAsync(\"download.png\");"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/routing-rules/{record_uuid}/history/": {
      "get": {
        "operationId": "list_case_routing_rule_history",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "list_history",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "record_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "結果の並べ替えに使用するフィールド。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "description": "1ページあたりに返す結果の件数です。",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "description": "結果を返す開始インデックスです。",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "tags": [
          "Case Assignment"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingPublicationPaginatedPolicyRevisionList"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "ケースへのアクセス権が必要です。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.routing_rules.list_history(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.routingRules.listHistory(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.RoutingRules.ListHistoryAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasesRoutingRulesListHistoryParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().routingRules().listHistory(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->routingRules->listHistory('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.routing_rules.list_history(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.RoutingRules.ListHistoryAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/resubmission-preview/": {
      "post": {
        "summary": "再提出メールをプレビューする",
        "description": "KYCまたはKYBの再提出時に送信されるメールを、セッションを変更せずに生成します。チェックのリセット、有効期限の延長、チェックの実行、メールの送信は行いません。`write:sessions`権限(スコープ付きAPIキーの場合は判定への書き込みアクセス)と、ステータスが`Approved`、`Declined`、`In Review`、`Kyc Expired`、`Abandoned`のいずれかであるセッションが必要です。サーバーは選択されたワークフローのステップを検証し、適用される検証済みのホワイトラベル送信者とブランディングを使って、翻訳済みの固定テンプレートをレンダリングします。リクエストで件名、メッセージ本文、アクションURLを設定することはできません。\n\n`email_address`は任意です。指定しない場合、メールは本人のアドレスに送信されます。フロー内のメールアドレス認証ステップで本人が認証したアドレスが使われ、それがない場合はセッション作成時に`contact_details`で指定されたアドレスが使われます。指定したアドレスが優先されます(`recipient_source: request`)。アドレスが不明で、かつ指定もしない場合、`recipient`と`preview_token`は空文字列となり、メールは送信できません。\n\nレスポンスには、受信者とその取得元、送信者、件名、HTML、言語、解決されたステップ、確定時にメールが送信されるかどうか(`will_be_sent`、`not_sent_reason`)、署名付きの`preview_token`が含まれます。選択されたすべてのステップが本人の操作なしで実行される場合、`requires_user_action`は`false`になります。この場合、再提出は自動的に完了し、メールは送信されません(`not_sent_reason: no_user_action`)。\n\nこのプレビューは、セッションの状態を確保するものでも、配信を許可するものでもありません。内容を確認した後、[セッションステータスの更新](/ja/sessions-api/update-status)を呼び出し、`new_status: Resubmitted`、プレビューしたものと同じ`nodes_to_resubmit`と`email_language`、`send_email: true`、`recipient`の値を設定した`email_address`、`preview_token`の値を設定した`email_preview_token`を指定してください。このレシートの有効期限は15分です。レシートを指定した場合、入力、メッセージ内容、送信者、セッションの状態のいずれかが変更されていると、変更や送信が行われる前に`409`が返されます。既存の連携ではレシートを省略できます。競合が発生した場合は、プレビューを再生成してください。レスポンスは機密性の高い認証コンテンツとして扱ってください。レスポンスには`Cache-Control: no-store`が付与されます。HTMLはサンドボックス化されたフレーム内でレンダリングし、アプリケーションのDOMに直接レンダリングしないでください。",
        "operationId": "post_v3_session_resubmission_preview",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "preview_resubmission",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "更新する検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。サービスは両方のセッションタイプにわたってIDを解決します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "nodes_to_resubmit": {
                    "type": "array",
                    "description": "プレビューするステップ。再提出と同じ検証、選択、ワークフローの順序が使われます。省略すると、再提出が必要な記録済みの試行が自動的に選択されます。",
                    "items": {
                      "type": "object",
                      "required": [
                        "node_id",
                        "feature"
                      ],
                      "properties": {
                        "node_id": {
                          "type": "string",
                          "description": "セッションのワークフロー定義に記載されているノード識別子(例:`feature_ocr`、`feature_liveness`)。",
                          "example": "feature_ocr"
                        },
                        "feature": {
                          "type": "string",
                          "description": "ノードの機能タイプです。エイリアス`ID_VERIFICATION`、`POA`、`PHONE`、`EMAIL`は、サーバー側でそれぞれ`OCR`、`PROOF_OF_ADDRESS`、`PHONE_VERIFICATION`、`EMAIL_VERIFICATION`に正規化されます。`KYB_REGISTRY`、`KYB_KEY_PEOPLE`、`KYB`はスキーマ検証を通過しますが、例に示すビジネスルール上の`400`で常に拒否されます。",
                          "enum": [
                            "OCR",
                            "OCR_BACK",
                            "NFC",
                            "AML",
                            "FACE",
                            "LIVENESS",
                            "FACE_MATCH",
                            "IP_ANALYSIS",
                            "AGE_ESTIMATION",
                            "PROOF_OF_ADDRESS",
                            "PHONE_VERIFICATION",
                            "EMAIL_VERIFICATION",
                            "FACE_SEARCH",
                            "DATABASE_VALIDATION",
                            "QUESTIONNAIRE",
                            "DOCUMENT_AI",
                            "KYB_DOCUMENTS",
                            "ID_VERIFICATION",
                            "POA",
                            "PHONE",
                            "EMAIL",
                            "KYB_REGISTRY",
                            "KYB_KEY_PEOPLE",
                            "KYB",
                            "GEOLOCATION"
                          ],
                          "example": "OCR"
                        }
                      }
                    }
                  },
                  "email_address": {
                    "type": "string",
                    "format": "email",
                    "description": "任意。本人のアドレスではなく、このアドレスにメールを送信します。指定しない場合、受信者はフロー内で本人が認証したアドレス、それがなければ`contact_details`で指定されたアドレスになります。この呼び出しではメールは送信されません。",
                    "example": "user@example.com"
                  },
                  "email_language": {
                    "type": "string",
                    "description": "通知メールの言語。スキーマ上は任意の文字列を受け付けますが、対応していないコードは通知なく英語(`en`)にフォールバックします。",
                    "default": "en",
                    "example": "en"
                  }
                }
              },
              "examples": {
                "Person's Own Address": {
                  "summary": "本人の住所に対する住所証明の再提出をプレビューする",
                  "value": {
                    "nodes_to_resubmit": [
                      {
                        "node_id": "feature_poa_1",
                        "feature": "POA"
                      }
                    ],
                    "email_language": "en"
                  }
                },
                "Named Recipient": {
                  "summary": "指定したアドレス宛てのメールをプレビューする",
                  "value": {
                    "nodes_to_resubmit": [
                      {
                        "node_id": "feature_ocr",
                        "feature": "OCR"
                      }
                    ],
                    "email_address": "person@example.com",
                    "email_language": "en"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "プレビューのみです。セッションは変更されず、メールも送信されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "recipient",
                    "recipient_source",
                    "sender",
                    "sender_name",
                    "sender_email",
                    "sender_kind",
                    "subject",
                    "html",
                    "text",
                    "language",
                    "will_be_sent",
                    "not_sent_reason",
                    "preview_token",
                    "nodes_to_resubmit",
                    "requires_user_action"
                  ],
                  "properties": {
                    "recipient": {
                      "type": "string",
                      "description": "メールの送信先アドレス。その人物のアドレスが不明な場合は空文字列です。その場合はメールを送信できず、`preview_token`も空になります。確認時に`email_address`として渡してください。",
                      "example": "person@example.com"
                    },
                    "recipient_source": {
                      "type": "string",
                      "enum": [
                        "email_verification",
                        "contact_details",
                        "request",
                        ""
                      ],
                      "description": "`recipient`の取得元。`request`：指定した`email_address`。`email_verification`：フローのメールアドレス認証ステップで本人が認証したアドレス。`contact_details`：セッション作成時に`contact_details`で指定されたアドレス。アドレスがない場合は空文字列です。",
                      "example": "email_verification"
                    },
                    "sender": {
                      "type": "string",
                      "description": "メールの送信時に使われる`From`ヘッダーです。",
                      "example": "Example App <no-reply@mail.example.com>"
                    },
                    "sender_name": {
                      "type": "string",
                      "description": "`sender`の表示名の部分です。",
                      "example": "Example App"
                    },
                    "sender_email": {
                      "type": "string",
                      "format": "email",
                      "description": "`sender`のアドレス部分。",
                      "example": "no-reply@mail.example.com"
                    },
                    "sender_kind": {
                      "type": "string",
                      "enum": [
                        "customer",
                        "didit"
                      ],
                      "description": "`customer`: メールはアプリケーションの検証済み送信元ドメインから送信されます（ホワイトラベル）。`didit`: メールはDidit独自の送信元から送信されます。",
                      "example": "customer"
                    },
                    "subject": {
                      "type": "string",
                      "description": "送信されたとおりの件名。",
                      "example": "Action Required: Complete your verification in Example App"
                    },
                    "html": {
                      "type": "string",
                      "description": "送信されるとおりのメールのHTMLで、ロゴはデータURLとして埋め込まれています。サンドボックス化されたフレーム内でレンダリングし、アプリケーションのDOMに直接レンダリングしないでください。",
                      "example": "<!DOCTYPE html><html><body>...</body></html>"
                    },
                    "text": {
                      "type": "string",
                      "description": "コンパクトなプレビュー用の、メール本文のプレーンテキストです。本人のメッセージスレッドに保存されている内容と同じです（本人が受け取るメールはHTMLのままです）。",
                      "example": "Almost there\n\nSome steps need to be completed again.\nHere’s what to fix:\n\nhttps://verify.didit.me/session/abc123"
                    },
                    "language": {
                      "type": "string",
                      "description": "メールの記述言語です。指定した`email_language`が提供されていない場合は英語(`en`)です。",
                      "example": "en"
                    },
                    "will_be_sent": {
                      "type": "boolean",
                      "description": "`send_email: true`で変更を確定したときにこのメールが送信されるかどうかです。`not_sent_reason`が設定されている場合は`false`です。",
                      "example": true
                    },
                    "not_sent_reason": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "no_user_action",
                        "no_recipient",
                        "sandbox",
                        null
                      ],
                      "description": "確定してもメールが送信されない理由、または送信される場合は`null`。`no_user_action`：選択されたすべてのステップが本人の操作なしで実行されるため、再提出は自動的に完了し、メールは送信されません。`no_recipient`：本人のアドレスが不明で、あなたも指定していません。`sandbox`：受信者がサンドボックスでのメール配信をオプトインしていないサンドボックスセッションのため、送信はシミュレーションのみです。",
                      "example": null
                    },
                    "nodes_to_resubmit": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "node_id",
                          "feature"
                        ],
                        "properties": {
                          "node_id": {
                            "type": "string",
                            "description": "セッションのワークフロー定義に記載されているノード識別子(例:`feature_ocr`、`feature_liveness`)。",
                            "example": "feature_ocr"
                          },
                          "feature": {
                            "type": "string",
                            "description": "ノードの機能タイプです。エイリアス`ID_VERIFICATION`、`POA`、`PHONE`、`EMAIL`は、サーバー側でそれぞれ`OCR`、`PROOF_OF_ADDRESS`、`PHONE_VERIFICATION`、`EMAIL_VERIFICATION`に正規化されます。`KYB_REGISTRY`、`KYB_KEY_PEOPLE`、`KYB`はスキーマ検証を通過しますが、例に示すビジネスルール上の`400`で常に拒否されます。",
                            "enum": [
                              "OCR",
                              "OCR_BACK",
                              "NFC",
                              "AML",
                              "FACE",
                              "LIVENESS",
                              "FACE_MATCH",
                              "IP_ANALYSIS",
                              "AGE_ESTIMATION",
                              "PROOF_OF_ADDRESS",
                              "PHONE_VERIFICATION",
                              "EMAIL_VERIFICATION",
                              "FACE_SEARCH",
                              "DATABASE_VALIDATION",
                              "QUESTIONNAIRE",
                              "DOCUMENT_AI",
                              "KYB_DOCUMENTS",
                              "ID_VERIFICATION",
                              "POA",
                              "PHONE",
                              "EMAIL",
                              "KYB_REGISTRY",
                              "KYB_KEY_PEOPLE",
                              "KYB",
                              "GEOLOCATION"
                            ],
                            "example": "OCR"
                          }
                        }
                      }
                    },
                    "requires_user_action": {
                      "type": "boolean",
                      "description": "選択したチェックのうち少なくとも1つがユーザーの操作を必要とするかどうかです。ワークフローの最終結果を予測するものではありません。"
                    },
                    "preview_token": {
                      "type": "string",
                      "description": "このメールに対する署名付きレシートで、有効期間は15分です。[セッションステータスを更新](/ja/sessions-api/update-status)に`email_preview_token`として渡してください。受信者がいない場合は空文字列です。",
                      "example": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
                    }
                  }
                },
                "examples": {
                  "Will Be Sent": {
                    "summary": "デフォルトの受信者：フロー内で検証されたアドレス",
                    "value": {
                      "recipient": "person@example.com",
                      "recipient_source": "email_verification",
                      "sender": "Example App <no-reply@mail.example.com>",
                      "sender_name": "Example App",
                      "sender_email": "no-reply@mail.example.com",
                      "sender_kind": "customer",
                      "subject": "Action Required: Complete your verification in Example App",
                      "html": "<!DOCTYPE html><html><body>...</body></html>",
                      "language": "en",
                      "will_be_sent": true,
                      "not_sent_reason": null,
                      "nodes_to_resubmit": [
                        {
                          "node_id": "feature_poa_1",
                          "feature": "PROOF_OF_ADDRESS"
                        }
                      ],
                      "requires_user_action": true,
                      "preview_token": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
                    }
                  },
                  "No User Action": {
                    "summary": "バックエンドステップのみが選択されるため、メールは送信されません",
                    "value": {
                      "recipient": "person@example.com",
                      "recipient_source": "contact_details",
                      "sender": "Example App <no-reply@mail.example.com>",
                      "sender_name": "Example App",
                      "sender_email": "no-reply@mail.example.com",
                      "sender_kind": "customer",
                      "subject": "Action Required: Complete your verification in Example App",
                      "html": "<!DOCTYPE html><html><body>...</body></html>",
                      "language": "en",
                      "will_be_sent": false,
                      "not_sent_reason": "no_user_action",
                      "nodes_to_resubmit": [
                        {
                          "node_id": "feature_aml",
                          "feature": "AML"
                        }
                      ],
                      "requires_user_action": false,
                      "preview_token": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "常に`no-store`です。プレビューには認証内容が含まれるため、キャッシュしてはなりません。",
                "schema": {
                  "type": "string",
                  "example": "no-store"
                }
              }
            }
          },
          "400": {
            "description": "セッションがこのエンドポイントで受け付けるステータスではない、すでに`Resubmitted`である、選択したステップを再提出できない、またはフィールドが無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Wrong Current Status": {
                    "summary": "セッションが、このエンドポイントで受け付けるステータスではありません",
                    "value": {
                      "detail": "Only sessions with status Approved, Declined, In Review, Kyc Expired, Abandoned, Resubmitted can be updated. Current status: In Progress"
                    }
                  },
                  "Already Resubmitted": {
                    "summary": "セッションはすでにResubmittedです",
                    "value": [
                      "The new status is the same as the current status."
                    ]
                  },
                  "Nothing To Resubmit": {
                    "summary": "自動選択で再提出が必要なステップが見つかりませんでした",
                    "value": {
                      "nodes_to_resubmit": "No features found that need resubmission. All features are already approved."
                    }
                  },
                  "Invalid Email": {
                    "summary": "email_addressがメールアドレスではありません",
                    "value": {
                      "email_address": [
                        "Enter a valid email address."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がない、呼び出し元に`write:sessions`権限がない、スコープ付きAPIキーにこのエンドポイントに必要なアクセス権がない、または`session_id`が別のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "呼び出し元にwrite:sessions権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped Key Without Access": {
                    "summary": "このアクセス権を持たないスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`を持つKYCまたはKYBセッションが存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "不明なsession_id",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "再提出するステップがすべてバックエンドのみのステップ（AML、DATABASE_VALIDATION、IP_ANALYSIS）であり、このセッションは過去30秒以内にバックエンドのみのステップですでに再提出されているため、Update Session Statusは再提出を拒否します。`Retry-After`の間隔が経過してから再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Backend-only resubmit throttled": {
                    "value": {
                      "detail": "This session was already resubmitted for backend-only features within the last 30 seconds; repeating it cannot change the outcome. Wait before resubmitting again."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.preview_resubmission(\n    \"11111111-2222-3333-4444-555555555555\",\n    nodes_to_resubmit=[{\n        \"node_id\": \"feature_poa_1\",\n        \"feature\": \"POA\",\n    }],\n    email_language=\"en\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.previewResubmission(\"11111111-2222-3333-4444-555555555555\", {\n  nodes_to_resubmit: [{\n    node_id: \"feature_poa_1\",\n    feature: \"POA\",\n  }],\n  email_language: \"en\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.PreviewResubmission(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsPreviewResubmissionParams{\n\tNodesToResubmit: didit.Some([]didit.SessionsPreviewResubmissionParamsNodesToResubmit{{\n\t\tNodeID:  \"feature_poa_1\",\n\t\tFeature: \"POA\",\n\t}}),\n\tEmailLanguage: didit.String(\"en\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.SessionsPreviewResubmissionParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().previewResubmission(\"11111111-2222-3333-4444-555555555555\", SessionsPreviewResubmissionParams.builder()\n        .nodesToResubmit(List.of(SessionsPreviewResubmissionParams.NodesToResubmit.builder()\n                .nodeId(\"feature_poa_1\")\n                .feature(SessionsPreviewResubmissionParams.NodesToResubmit.Feature.of(\"POA\"))\n                .build()))\n        .emailLanguage(\"en\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->previewResubmission('11111111-2222-3333-4444-555555555555', [\n    'nodes_to_resubmit' => [[\n        'node_id' => 'feature_poa_1',\n        'feature' => 'POA',\n    ]],\n    'email_language' => 'en',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.preview_resubmission(\n  \"11111111-2222-3333-4444-555555555555\",\n  nodes_to_resubmit: [{\n    node_id: \"feature_poa_1\",\n    feature: \"POA\",\n  }],\n  email_language: \"en\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.PreviewResubmissionAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsPreviewResubmissionParams\n{\n    NodesToResubmit = new SessionsPreviewResubmissionParamsNodesToResubmit[]\n    {\n        new()\n        {\n            NodeId = \"feature_poa_1\",\n            Feature = \"POA\",\n        },\n    },\n    EmailLanguage = \"en\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/routing-rules/{record_uuid}/": {
      "get": {
        "summary": "ルーティングルールを取得",
        "description": "対象アプリケーションに対する`read:cases`が必要です。",
        "operationId": "retrieve_case_routing_rules",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "record_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseRoutingRule"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          },
          "404": {
            "description": "このアプリケーションにレコードが見つかりません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "patch": {
        "summary": "ルーティングルールを更新",
        "description": "対象アプリケーションに対する`write:cases`が必要です。",
        "operationId": "update_case_routing_rules",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "record_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseRoutingRule"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          },
          "404": {
            "description": "このアプリケーションにレコードが見つかりません。"
          },
          "409": {
            "description": "expected_version以降にルーティングルールが変更されました。再試行する前に最新のルールを確認してください。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseRoutingRuleUpdate"
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    name=\"your-name\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.update(\"11111111-2222-3333-4444-555555555555\", {\n  name: \"your-name\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CaseRoutingRuleUpdate{\n\tName: didit.String(\"your-name\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CaseRoutingRuleUpdate;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().update(\"11111111-2222-3333-4444-555555555555\", CaseRoutingRuleUpdate.builder()\n        .name(\"your-name\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->update('11111111-2222-3333-4444-555555555555', [\n    'name' => 'your-name',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  name: \"your-name\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new CaseRoutingRuleUpdate\n{\n    Name = \"your-name\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/case-requests/{request_uuid}/": {
      "get": {
        "operationId": "case_requests_retrieve",
        "x-didit-sdk": {
          "resource": "case_requests",
          "method": "retrieve",
          "auth": "device_token",
          "server": false
        },
        "parameters": [
          {
            "in": "path",
            "name": "request_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingCaseRequestPublic"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          }
        },
        "security": [
          {
            "CaseRequestToken": []
          }
        ],
        "description": "リクエスト固有のトークンを使用して、1件の顧客リクエストにアクセスします。非公開のケースの調査結果、元の本人情報、受信者の宛先は返されません。対応が必要なリクエストは7日後に期限切れになります。キャンセルまたはケースの解決により、リンクは無効になります。回答は変更できず、レビュアーによる評価の証拠として残ります。回答によって元の認証が承認または更新されることはありません。"
      },
      "post": {
        "operationId": "case_requests_create",
        "x-didit-sdk": {
          "resource": "case_requests",
          "method": "respond",
          "auth": "device_token",
          "server": false
        },
        "parameters": [
          {
            "in": "path",
            "name": "request_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseCustomerResponseRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseCustomerResponseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingCaseCustomerResponseResult"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "400": {
            "description": "入力が無効である、サポートされていない目的である、認証済みの連絡先が利用できない、または変更不可のレスポンスがすでに存在します。"
          },
          "409": {
            "description": "プレビューが変更されたか期限切れになりました。確定する前に再度プレビューしてください。"
          }
        },
        "security": [
          {
            "CaseRequestToken": []
          }
        ],
        "description": "リクエスト固有のトークンを使用して、1件の顧客リクエストにアクセスします。非公開のケースの調査結果、元の本人情報、受信者の宛先は返されません。対応が必要なリクエストは7日後に期限切れになります。キャンセルまたはケースの解決により、リンクは無効になります。回答は変更できず、レビュアーによる評価の証拠として残ります。回答によって元の認証が承認または更新されることはありません。"
      }
    },
    "/v3/fraud/checks/plan/": {
      "post": {
        "operationId": "plan_create",
        "x-didit-sdk": {
          "resource": "fraud_checks",
          "method": "plan",
          "auth": "api_key",
          "server": true
        },
        "description": "選択したチェックを実行せずに検証し、料金を見積もります。セッションの作成や請求は行われません。",
        "summary": "不正チェックを計画する",
        "tags": [
          "Fraud Check"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/FraudCheckRequestRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FraudCheckRequestRequest"
              },
              "example": {
                "client_reference": "review-attempt-001",
                "subject": {
                  "identifiers": [
                    {
                      "type": "email",
                      "value": "applicant@example.com"
                    }
                  ],
                  "attributes": {
                    "first_name": "Alex",
                    "last_name": "Example"
                  }
                },
                "checks": {
                  "include": [
                    "networks_same_org",
                    "networks_cross_org",
                    "email_risk"
                  ]
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/FraudCheckRequestRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudCheckPlan"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FraudBadRequestErrorMessage"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.fraud_checks.plan(\n    client_reference=\"review-attempt-001\",\n    subject={\n        \"identifiers\": [{\n            \"type\": \"email\",\n            \"value\": \"applicant@example.com\",\n        }],\n        \"attributes\": {\n            \"first_name\": \"Alex\",\n            \"last_name\": \"Example\",\n        },\n    },\n    checks={\n        \"include\": [\"networks_same_org\", \"networks_cross_org\", \"email_risk\"],\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.fraudChecks.plan({\n  client_reference: \"review-attempt-001\",\n  subject: {\n    identifiers: [{\n      type: \"email\",\n      value: \"applicant@example.com\",\n    }],\n    attributes: {\n      first_name: \"Alex\",\n      last_name: \"Example\",\n    },\n  },\n  checks: {\n    include: [\"networks_same_org\", \"networks_cross_org\", \"email_risk\"],\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FraudChecks.Plan(ctx, didit.FraudCheckRequestRequest{\n\tClientReference: didit.String(\"review-attempt-001\"),\n\tSubject: didit.FraudCheckSubjectRequest{\n\t\tIdentifiers: []didit.FraudCheckIdentifierRequest{{\n\t\t\tType:  didit.FraudTypeEnum(\"email\"),\n\t\t\tValue: \"applicant@example.com\",\n\t\t}},\n\t\tAttributes: didit.Some(didit.FraudCheckAttributesRequest{\n\t\t\tFirstName: didit.String(\"Alex\"),\n\t\t\tLastName:  didit.String(\"Example\"),\n\t\t}),\n\t},\n\tChecks: didit.Some(didit.FraudCheckModuleSelectionRequest{\n\t\tInclude: didit.Some([]didit.FraudExcludeEnum{didit.FraudExcludeEnum(\"networks_same_org\"), didit.FraudExcludeEnum(\"networks_cross_org\"), didit.FraudExcludeEnum(\"email_risk\")}),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.FraudCheckAttributesRequest;\nimport me.didit.types.FraudCheckIdentifierRequest;\nimport me.didit.types.FraudCheckModuleSelectionRequest;\nimport me.didit.types.FraudCheckRequestRequest;\nimport me.didit.types.FraudCheckSubjectRequest;\nimport me.didit.types.FraudExcludeEnum;\nimport me.didit.types.FraudTypeEnum;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.fraudChecks().plan(FraudCheckRequestRequest.builder()\n        .clientReference(\"review-attempt-001\")\n        .subject(FraudCheckSubjectRequest.builder()\n                .identifiers(List.of(FraudCheckIdentifierRequest.builder()\n                        .type(FraudTypeEnum.of(\"email\"))\n                        .value(\"applicant@example.com\")\n                        .build()))\n                .attributes(FraudCheckAttributesRequest.builder()\n                        .firstName(\"Alex\")\n                        .lastName(\"Example\")\n                        .build())\n                .build())\n        .checks(FraudCheckModuleSelectionRequest.builder()\n                .include(List.of(FraudExcludeEnum.of(\"networks_same_org\"), FraudExcludeEnum.of(\"networks_cross_org\"), FraudExcludeEnum.of(\"email_risk\")))\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->fraudChecks->plan([\n    'client_reference' => 'review-attempt-001',\n    'subject' => [\n        'identifiers' => [[\n            'type' => 'email',\n            'value' => 'applicant@example.com',\n        ]],\n        'attributes' => [\n            'first_name' => 'Alex',\n            'last_name' => 'Example',\n        ],\n    ],\n    'checks' => [\n        'include' => ['networks_same_org', 'networks_cross_org', 'email_risk'],\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.fraud_checks.plan(\n  client_reference: \"review-attempt-001\",\n  subject: {\n    identifiers: [{\n      type: \"email\",\n      value: \"applicant@example.com\",\n    }],\n    attributes: {\n      first_name: \"Alex\",\n      last_name: \"Example\",\n    },\n  },\n  checks: {\n    include: [\"networks_same_org\", \"networks_cross_org\", \"email_risk\"],\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.FraudChecks.PlanAsync(new FraudCheckRequestRequest\n{\n    ClientReference = \"review-attempt-001\",\n    Subject = new()\n    {\n        Identifiers = new FraudCheckIdentifierRequest[]\n        {\n            new()\n            {\n                Type = \"email\",\n                Value = \"applicant@example.com\",\n            },\n        },\n        Attributes = new FraudCheckAttributesRequest\n        {\n            FirstName = \"Alex\",\n            LastName = \"Example\",\n        },\n    },\n    Checks = new FraudCheckModuleSelectionRequest\n    {\n        Include = new FraudExcludeEnum[] { \"networks_same_org\", \"networks_cross_org\", \"email_risk\" },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/routing-rules/": {
      "get": {
        "summary": "ルーティングルールを一覧表示",
        "description": "対象アプリケーションに対する`list:cases`が必要です。",
        "operationId": "list_case_routing_rules",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CaseRoutingRule"
                      }
                    },
                    "count": {
                      "type": "integer",
                      "description": "一致件数です。上限は100です。上限を超えて続けるにはnextをたどってください。"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.routing_rules.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.routingRules.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.RoutingRules.ListAutoPaging(ctx, didit.CasesRoutingRulesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().routingRules().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->routingRules->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.routing_rules.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.RoutingRules.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "summary": "ルーティングルールを作成",
        "description": "対象アプリケーションに対する`write:cases`が必要です。publish=falseを設定すると未公開のドラフトが作成されます。公開すると最初の本番バージョンが作成されます。一度も公開されていないドラフトを破棄すると、そのドラフトは削除されます。",
        "operationId": "create_case_routing_rules",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "responses": {
          "201": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseRoutingRule"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseRoutingRuleCreate"
              },
              "example": {
                "name": "AML screening alerts",
                "conditions": [
                  {
                    "field": "source",
                    "operator": "equals",
                    "value": "AML_SCREENING"
                  }
                ],
                "blueprint": "b1de0000-0000-4000-8000-000000000002"
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.create(\n    name=\"AML screening alerts\",\n    conditions=[{\n        \"field\": \"source\",\n        \"operator\": \"equals\",\n        \"value\": \"AML_SCREENING\",\n    }],\n    blueprint=\"b1de0000-0000-4000-8000-000000000002\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.create({\n  name: \"AML screening alerts\",\n  conditions: [{\n    field: \"source\",\n    operator: \"equals\",\n    value: \"AML_SCREENING\",\n  }],\n  blueprint: \"b1de0000-0000-4000-8000-000000000002\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.Create(ctx, didit.CaseRoutingRuleCreate{\n\tName: \"AML screening alerts\",\n\tConditions: []didit.CaseRoutingConditionParam{{\n\t\tField:    \"source\",\n\t\tOperator: \"equals\",\n\t\tValue:    \"AML_SCREENING\",\n\t}},\n\tBlueprint: \"b1de0000-0000-4000-8000-000000000002\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.CaseRoutingCondition;\nimport me.didit.types.CaseRoutingRuleCreate;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().create(CaseRoutingRuleCreate.builder()\n        .name(\"AML screening alerts\")\n        .conditions(List.of(CaseRoutingCondition.builder()\n                .field(CaseRoutingCondition.Field.of(\"source\"))\n                .operator(CaseRoutingCondition.Operator.of(\"equals\"))\n                .value(CaseRoutingCondition.Value.ofString(\"AML_SCREENING\"))\n                .build()))\n        .blueprint(\"b1de0000-0000-4000-8000-000000000002\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->create([\n    'name' => 'AML screening alerts',\n    'conditions' => [[\n        'field' => 'source',\n        'operator' => 'equals',\n        'value' => 'AML_SCREENING',\n    ]],\n    'blueprint' => 'b1de0000-0000-4000-8000-000000000002',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.create(\n  name: \"AML screening alerts\",\n  conditions: [{\n    field: \"source\",\n    operator: \"equals\",\n    value: \"AML_SCREENING\",\n  }],\n  blueprint: \"b1de0000-0000-4000-8000-000000000002\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.CreateAsync(new CaseRoutingRuleCreate\n{\n    Name = \"AML screening alerts\",\n    Conditions = new CaseRoutingCondition[]\n    {\n        new()\n        {\n            Field = \"source\",\n            Operator = \"equals\",\n            Value = \"AML_SCREENING\",\n        },\n    },\n    Blueprint = \"b1de0000-0000-4000-8000-000000000002\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/routing-rules/{record_uuid}/publish/": {
      "post": {
        "operationId": "publish_case_routing_rule",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "publish",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "record_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Assignment"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftPreconditionRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftPreconditionRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftPreconditionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingPublicationCaseRoutingRule"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "ケースへのアクセス権が必要です。"
          },
          "409": {
            "description": "公開済みのバージョンまたはドラフトのリビジョンが変更されました。再試行する前に再読み込みしてください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.publish(\n    \"11111111-2222-3333-4444-555555555555\",\n    expected_version=0,\n    expected_revision=\"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.publish(\"11111111-2222-3333-4444-555555555555\", {\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.Publish(ctx, \"11111111-2222-3333-4444-555555555555\", didit.RoutingPublicationPolicyDraftPreconditionRequest{\n\tExpectedVersion:  0,\n\tExpectedRevision: didit.String(\"11111111-2222-3333-4444-555555555555\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.RoutingPublicationPolicyDraftPreconditionRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().publish(\"11111111-2222-3333-4444-555555555555\", RoutingPublicationPolicyDraftPreconditionRequest.builder()\n        .expectedVersion(0L)\n        .expectedRevision(\"11111111-2222-3333-4444-555555555555\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->publish('11111111-2222-3333-4444-555555555555', [\n    'expected_version' => 0,\n    'expected_revision' => '11111111-2222-3333-4444-555555555555',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.publish(\n  \"11111111-2222-3333-4444-555555555555\",\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.PublishAsync(\"11111111-2222-3333-4444-555555555555\", new RoutingPublicationPolicyDraftPreconditionRequest\n{\n    ExpectedVersion = 0,\n    ExpectedRevision = \"11111111-2222-3333-4444-555555555555\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/{blueprint_uuid}/publish/": {
      "post": {
        "operationId": "publish_case_blueprint",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "publish",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "blueprint_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftPreconditionRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftPreconditionRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftPreconditionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CasePublicationCaseBlueprint"
                }
              }
            },
            "description": ""
          },
          "409": {
            "description": "公開済みバージョンまたは保存済みの下書きリビジョンが変更されました。再試行する前に再読み込みしてください。"
          },
          "403": {
            "description": "必要なケース権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.publish(\n    \"11111111-2222-3333-4444-555555555555\",\n    expected_version=0,\n    expected_revision=\"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.publish(\"11111111-2222-3333-4444-555555555555\", {\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.Publish(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasePublicationPolicyDraftPreconditionRequest{\n\tExpectedVersion:  0,\n\tExpectedRevision: didit.String(\"11111111-2222-3333-4444-555555555555\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasePublicationPolicyDraftPreconditionRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().publish(\"11111111-2222-3333-4444-555555555555\", CasePublicationPolicyDraftPreconditionRequest.builder()\n        .expectedVersion(0L)\n        .expectedRevision(\"11111111-2222-3333-4444-555555555555\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->publish('11111111-2222-3333-4444-555555555555', [\n    'expected_version' => 0,\n    'expected_revision' => '11111111-2222-3333-4444-555555555555',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.publish(\n  \"11111111-2222-3333-4444-555555555555\",\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.PublishAsync(\"11111111-2222-3333-4444-555555555555\", new CasePublicationPolicyDraftPreconditionRequest\n{\n    ExpectedVersion = 0,\n    ExpectedRevision = \"11111111-2222-3333-4444-555555555555\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/requests/preview/": {
      "post": {
        "operationId": "organization_application_cases_requests_preview_create",
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "preview",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseRequestPreviewRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseRequestPreviewRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessagingCaseRequestPreviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerMessagingCaseRequestPreviewResponse"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "400": {
            "description": "入力が無効である、サポートされていない目的である、認証済みの連絡先が利用できない、または変更不可のレスポンスがすでに存在します。"
          },
          "409": {
            "description": "プレビューが変更されたか期限切れになりました。確定する前に再度プレビューしてください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "送信やケースの変更を行わずに、本番環境のメールをレンダリングします。正確な受信者、送信者、件名、本文、および署名付きのpreview_tokenを返します。確定するには、15分以内に同じcontact_id、purpose、language、request_id、expires_at、preview_tokenを送信してください。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.requests.preview(\n    \"11111111-2222-3333-4444-555555555555\",\n    contact_id=\"11111111-2222-3333-4444-555555555555\",\n    purpose=\"identity_document\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.requests.preview(\"11111111-2222-3333-4444-555555555555\", {\n  contact_id: \"11111111-2222-3333-4444-555555555555\",\n  purpose: \"identity_document\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Requests.Preview(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CustomerMessagingCaseRequestPreviewRequest{\n\tContactID: \"11111111-2222-3333-4444-555555555555\",\n\tPurpose:   didit.CustomerMessagingPurposeEnum(\"identity_document\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CustomerMessagingCaseRequestPreviewRequest;\nimport me.didit.types.CustomerMessagingPurposeEnum;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().requests().preview(\"11111111-2222-3333-4444-555555555555\", CustomerMessagingCaseRequestPreviewRequest.builder()\n        .contactId(\"11111111-2222-3333-4444-555555555555\")\n        .purpose(CustomerMessagingPurposeEnum.of(\"identity_document\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->requests->preview('11111111-2222-3333-4444-555555555555', [\n    'contact_id' => '11111111-2222-3333-4444-555555555555',\n    'purpose' => 'identity_document',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.requests.preview(\n  \"11111111-2222-3333-4444-555555555555\",\n  contact_id: \"11111111-2222-3333-4444-555555555555\",\n  purpose: \"identity_document\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Requests.PreviewAsync(\"11111111-2222-3333-4444-555555555555\", new CustomerMessagingCaseRequestPreviewRequest\n{\n    ContactId = \"11111111-2222-3333-4444-555555555555\",\n    Purpose = \"identity_document\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/action-receipts/": {
      "get": {
        "operationId": "action_receipts_retrieve",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "list_action_receipts",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "offset",
            "schema": {
              "type": "integer",
              "maximum": 1000000,
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseActionCaseActionReceiptPage"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "サブジェクトアクションの受領記録を新しい順に一覧表示します。1ページあたりの件数は最大20件です。次のページにはnext_offsetを使用します。入力されたメモのテキストは履歴に公開されません。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.list_action_receipts(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.listActionReceipts(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.ListActionReceipts(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasesListActionReceiptsParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().listActionReceipts(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->listActionReceipts('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.list_action_receipts(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ListActionReceiptsAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/notes/{note_uuid}/": {
      "delete": {
        "operationId": "delete_network_note",
        "x-didit-sdk": {
          "resource": "networks.notes",
          "method": "delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "summary": "自分のネットワークメモを削除",
        "description": "write:networks権限と、そのノートの認証済み作成者であることが必要です。削除は元に戻せません。関連するアカウントと認証データには影響しません。",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ネットワークのUUID。"
          },
          {
            "name": "note_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Authorization",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Bearer <token>形式のコンソールユーザーアクセストークン。"
          }
        ],
        "responses": {
          "204": {
            "description": "メモを削除しました。"
          },
          "401": {
            "description": "認証が必要です。"
          },
          "403": {
            "description": "権限またはNetworksへのアクセス権がありません。"
          },
          "404": {
            "description": "ネットワークまたはメモがこのアプリケーションから参照できません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\nclient = Didit()\n\nclient.networks.notes.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n    extra_headers={\"Authorization\": \"Bearer YOUR_CONSOLE_USER_TOKEN\"},\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nconst didit = new Didit({\n  fetch: (url, init) => {\n    const headers = new Headers(init?.headers);\n    headers.set(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\");\n    return fetch(url, { ...init, headers });\n  },\n});\n\nawait didit.networks.notes.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nclient := didit.NewClient()\n\nif err := client.Networks.Notes.Delete(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\", didit.NetworksNotesDeleteParams{\n\tAuthorization: \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n}); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.core.RequestOptions;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nDidit client = new Didit();\n\nclient.networks().notes().delete(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\", RequestOptions.builder()\n        .header(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\")\n        .build());"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\n$didit = new DiditClient();\n\n$didit->networks->notes->delete('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555', [\n    'authorization' => 'Bearer YOUR_CONSOLE_USER_TOKEN',\n]);"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\ndidit = Didit::Client.new\n\ndidit.networks.notes.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n  request_options: { extra_headers: { \"Authorization\" => \"Bearer YOUR_CONSOLE_USER_TOKEN\" } }\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nusing var client = new DiditClient();\n\nawait client.Networks.Notes.DeleteAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\", requestOptions: new RequestOptions\n{\n    Headers = new Dictionary<string, string>\n    {\n        [\"Authorization\"] = \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n    },\n});"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/action-receipts/{receipt_uuid}/retry/": {
      "post": {
        "operationId": "action_receipts_retry_create",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "retry_action_receipt",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "receipt_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseActionCaseActionReceipt"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "保存された入力を使用して、失敗したこのサブジェクトアクションのみを再試行します。現在の書き込み権限が確認されます。適用済みのアクションは、再実行されることなくその受領情報を返します。ケースのクローズとは独立しています。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.retry_action_receipt(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.retryActionReceipt(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RetryActionReceipt(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().retryActionReceipt(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->retryActionReceipt('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.retry_action_receipt(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RetryActionReceiptAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/{blueprint_uuid}/draft/": {
      "get": {
        "operationId": "get_case_blueprint_draft",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "retrieve_draft",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "blueprint_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CasePublicationPolicyDraftResponse"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "必要なケース権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.retrieve_draft(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.retrieveDraft(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.RetrieveDraft(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().retrieveDraft(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->retrieveDraft('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.retrieve_draft(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.RetrieveDraftAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "put": {
        "operationId": "save_case_blueprint_draft",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "save_draft",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "blueprint_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftWriteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftWriteRequest"
              },
              "example": {
                "expected_version": 1,
                "expected_revision": "4e5f0000-0000-4000-8000-000000000003",
                "changes": {
                  "max_active_cases": 20
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftWriteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CasePublicationPolicyDraft"
                }
              }
            },
            "description": ""
          },
          "409": {
            "description": "公開済みバージョンまたは保存済みの下書きリビジョンが変更されました。再試行する前に再読み込みしてください。"
          },
          "403": {
            "description": "必要なケース権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.blueprints.save_draft(\n    \"11111111-2222-3333-4444-555555555555\",\n    expected_version=1,\n    expected_revision=\"4e5f0000-0000-4000-8000-000000000003\",\n    changes={\"max_active_cases\": 20},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.blueprints.saveDraft(\"11111111-2222-3333-4444-555555555555\", {\n  expected_version: 1,\n  expected_revision: \"4e5f0000-0000-4000-8000-000000000003\",\n  changes: { max_active_cases: 20 },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Blueprints.SaveDraft(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasePublicationPolicyDraftWriteRequest{\n\tExpectedVersion:  1,\n\tExpectedRevision: didit.String(\"4e5f0000-0000-4000-8000-000000000003\"),\n\tChanges:          map[string]any{\"max_active_cases\": 20},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.CasePublicationPolicyDraftWriteRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().blueprints().saveDraft(\"11111111-2222-3333-4444-555555555555\", CasePublicationPolicyDraftWriteRequest.builder()\n        .expectedVersion(1L)\n        .expectedRevision(\"4e5f0000-0000-4000-8000-000000000003\")\n        .changes(Map.of(\"max_active_cases\", 20))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->blueprints->saveDraft('11111111-2222-3333-4444-555555555555', [\n    'expected_version' => 1,\n    'expected_revision' => '4e5f0000-0000-4000-8000-000000000003',\n    'changes' => ['max_active_cases' => 20],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.blueprints.save_draft(\n  \"11111111-2222-3333-4444-555555555555\",\n  expected_version: 1,\n  expected_revision: \"4e5f0000-0000-4000-8000-000000000003\",\n  changes: { max_active_cases: 20 }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Blueprints.SaveDraftAsync(\"11111111-2222-3333-4444-555555555555\", new CasePublicationPolicyDraftWriteRequest\n{\n    ExpectedVersion = 1,\n    ExpectedRevision = \"4e5f0000-0000-4000-8000-000000000003\",\n    Changes = new Dictionary<string, object> { [\"max_active_cases\"] = 20 },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "operationId": "discard_case_blueprint_draft",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "discard_draft",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "blueprint_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "204": {
            "description": "レスポンスボディなし"
          },
          "409": {
            "description": "公開済みバージョンまたは保存済みの下書きリビジョンが変更されました。再試行する前に再読み込みしてください。"
          },
          "403": {
            "description": "必要なケース権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CasePublicationPolicyDraftPreconditionRequest"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.cases.blueprints.discard_draft(\n    \"11111111-2222-3333-4444-555555555555\",\n    expected_version=0,\n    expected_revision=\"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.cases.blueprints.discardDraft(\"11111111-2222-3333-4444-555555555555\", {\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\",\n});"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.Cases.Blueprints.DiscardDraft(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasePublicationPolicyDraftPreconditionRequest{\n\tExpectedVersion:  0,\n\tExpectedRevision: didit.String(\"11111111-2222-3333-4444-555555555555\"),\n}); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CasePublicationPolicyDraftPreconditionRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().blueprints().discardDraft(\"11111111-2222-3333-4444-555555555555\", CasePublicationPolicyDraftPreconditionRequest.builder()\n        .expectedVersion(0L)\n        .expectedRevision(\"11111111-2222-3333-4444-555555555555\")\n        .build());"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->cases->blueprints->discardDraft('11111111-2222-3333-4444-555555555555', [\n    'expected_version' => 0,\n    'expected_revision' => '11111111-2222-3333-4444-555555555555',\n]);"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.blueprints.discard_draft(\n  \"11111111-2222-3333-4444-555555555555\",\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\"\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Cases.Blueprints.DiscardDraftAsync(\"11111111-2222-3333-4444-555555555555\", new CasePublicationPolicyDraftPreconditionRequest\n{\n    ExpectedVersion = 0,\n    ExpectedRevision = \"11111111-2222-3333-4444-555555555555\",\n});"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/teams/{record_uuid}/": {
      "get": {
        "summary": "レビューチームを取得",
        "description": "対象アプリケーションに対する`read:cases`が必要です。",
        "operationId": "retrieve_case_teams",
        "x-didit-sdk": {
          "resource": "cases.teams",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "record_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseReviewTeam"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          },
          "404": {
            "description": "このアプリケーションにレコードが見つかりません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.teams.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.teams.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Teams.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().teams().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->teams->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.teams.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Teams.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "patch": {
        "summary": "レビューチームを更新",
        "description": "対象アプリケーションに対する`write:cases`が必要です。",
        "operationId": "update_case_teams",
        "x-didit-sdk": {
          "resource": "cases.teams",
          "method": "update",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "record_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseReviewTeam"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          },
          "404": {
            "description": "このアプリケーションにレコードが見つかりません。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseReviewTeamUpdate"
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.teams.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    name=\"your-name\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.teams.update(\"11111111-2222-3333-4444-555555555555\", {\n  name: \"your-name\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Teams.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CaseReviewTeamUpdate{\n\tName: didit.String(\"your-name\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CaseReviewTeamUpdate;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().teams().update(\"11111111-2222-3333-4444-555555555555\", CaseReviewTeamUpdate.builder()\n        .name(\"your-name\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->teams->update('11111111-2222-3333-4444-555555555555', [\n    'name' => 'your-name',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.teams.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  name: \"your-name\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Teams.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new CaseReviewTeamUpdate\n{\n    Name = \"your-name\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/report/": {
      "get": {
        "operationId": "download_network_report",
        "x-didit-sdk": {
          "resource": "networks",
          "method": "download_report",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "summary": "ネットワークの証拠レポートをダウンロード",
        "description": "現在の組織ネットワーク、観測されたアカウント間の接続、シグナル参照、レビューステータスをまとめたPDFをダウンロードします。read:networksが必要です。グローバルインテリジェンスと非公開のアナリストメモは含まれません。各アカウントリストおよびシグナルリストは最大500件までで、内容が不完全な場合はレポートにその旨が記載されます。このリクエストによってネットワークのステータスは変更されません。エラーはJSONで返されます。",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ネットワークのUUID。"
          },
          {
            "name": "Authorization",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Bearer <token>形式のコンソールユーザーアクセストークン。"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークのエビデンスレポート。Cache-Control: no-store。",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "認証が必要です。"
          },
          "403": {
            "description": "権限またはNetworksへのアクセス権がありません。"
          },
          "404": {
            "description": "ネットワークまたはメモがこのアプリケーションから参照できません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\nclient = Didit()\n\ncontent = client.networks.download_report(\n    \"11111111-2222-3333-4444-555555555555\",\n    extra_headers={\"Authorization\": \"Bearer YOUR_CONSOLE_USER_TOKEN\"},\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nconst didit = new Didit({\n  fetch: (url, init) => {\n    const headers = new Headers(init?.headers);\n    headers.set(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\");\n    return fetch(url, { ...init, headers });\n  },\n});\n\nconst content = await didit.networks.downloadReport(\"11111111-2222-3333-4444-555555555555\");\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nclient := didit.NewClient()\n\nresp, err := client.Networks.DownloadReport(ctx, \"11111111-2222-3333-4444-555555555555\", didit.NetworksDownloadReportParams{\n\tAuthorization: \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.core.RequestOptions;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nDidit client = new Didit();\n\nclient.networks().downloadReport(\"11111111-2222-3333-4444-555555555555\", RequestOptions.builder()\n        .header(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\")\n        .build())\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\n$didit = new DiditClient();\n\n$content = $didit->networks->downloadReport('11111111-2222-3333-4444-555555555555', [\n    'authorization' => 'Bearer YOUR_CONSOLE_USER_TOKEN',\n]);\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\ndidit = Didit::Client.new\n\ncontent = didit.networks.download_report(\n  \"11111111-2222-3333-4444-555555555555\",\n  request_options: { extra_headers: { \"Authorization\" => \"Bearer YOUR_CONSOLE_USER_TOKEN\" } }\n)\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nusing var client = new DiditClient();\n\nvar content = await client.Networks.DownloadReportAsync(\"11111111-2222-3333-4444-555555555555\", requestOptions: new RequestOptions\n{\n    Headers = new Dictionary<string, string>\n    {\n        [\"Authorization\"] = \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n    },\n});\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/notes/": {
      "get": {
        "operationId": "list_network_notes",
        "x-didit-sdk": {
          "resource": "networks.notes",
          "method": "list",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "summary": "非公開のネットワークメモを一覧表示",
        "description": "read:networksを持つコンソールユーザーは、アプリケーションから参照可能なネットワークのメモを閲覧できます。メモは組織内にとどまり、共有インテリジェンスには提供されません。新しいメモから順に表示されます。",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ネットワークのUUID。"
          },
          {
            "name": "Authorization",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Bearer <token>形式のコンソールユーザーアクセストークン。"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 30
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "メモのページ。件数の上限は100件です。続きを取得するにはnextを使用してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/NetworkNote"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証が必要です。"
          },
          "403": {
            "description": "権限またはNetworksへのアクセス権がありません。"
          },
          "404": {
            "description": "ネットワークまたはメモがこのアプリケーションから参照できません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\nclient = Didit()\n\nfor item in client.networks.notes.list(\n    \"11111111-2222-3333-4444-555555555555\",\n    extra_headers={\"Authorization\": \"Bearer YOUR_CONSOLE_USER_TOKEN\"},\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nconst didit = new Didit({\n  fetch: (url, init) => {\n    const headers = new Headers(init?.headers);\n    headers.set(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\");\n    return fetch(url, { ...init, headers });\n  },\n});\n\nfor await (const item of didit.networks.notes.list(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nclient := didit.NewClient()\n\niter := client.Networks.Notes.ListAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.NetworksNotesListParams{\n\tAuthorization: \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.core.RequestOptions;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nDidit client = new Didit();\n\nfor (var item : client.networks().notes().list(\"11111111-2222-3333-4444-555555555555\", RequestOptions.builder()\n        .header(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\")\n        .build())) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\n$didit = new DiditClient();\n\nforeach ($didit->networks->notes->list('11111111-2222-3333-4444-555555555555', [\n    'authorization' => 'Bearer YOUR_CONSOLE_USER_TOKEN',\n]) as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\ndidit = Didit::Client.new\n\ndidit.networks.notes.list(\n  \"11111111-2222-3333-4444-555555555555\",\n  request_options: { extra_headers: { \"Authorization\" => \"Bearer YOUR_CONSOLE_USER_TOKEN\" } }\n).auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Networks.Notes.ListAsync(\"11111111-2222-3333-4444-555555555555\", requestOptions: new RequestOptions\n{\n    Headers = new Dictionary<string, string>\n    {\n        [\"Authorization\"] = \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n    },\n}))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      },
      "post": {
        "operationId": "create_network_note",
        "x-didit-sdk": {
          "resource": "networks.notes",
          "method": "create",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Networks"
        ],
        "summary": "非公開のネットワークメモを追加",
        "description": "write:networks権限を持つコンソールユーザーが必要です。作成者は認証済みユーザーから割り当てられます。ノートごとに新しいランダムなUUIDをclient_referenceとして指定してください。レスポンスが不確実な場合は、重複を避けるために同じボディとリファレンスで再試行してください。別のボディ、作成者、またはネットワークに同じリファレンスを再利用すると409が返されます。ネットワークが統合されると、ノートは存続する調査に引き継がれます。",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "ネットワークのUUID。"
          },
          {
            "name": "Authorization",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Bearer <token>形式のコンソールユーザーアクセストークン。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "comment",
                  "client_reference"
                ],
                "properties": {
                  "comment": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "client_reference": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "保存された非公開メモ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkNote"
                }
              }
            }
          },
          "200": {
            "description": "保存された非公開メモ。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkNote"
                }
              }
            }
          },
          "400": {
            "description": "メモが無効であるか、空です。"
          },
          "409": {
            "description": "この参照はすでに別のメモに使用されています。"
          },
          "401": {
            "description": "認証が必要です。"
          },
          "403": {
            "description": "権限またはNetworksへのアクセス権がありません。"
          },
          "404": {
            "description": "ネットワークまたはメモがこのアプリケーションから参照できません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\nclient = Didit()\n\nresult = client.networks.notes.create(\n    \"11111111-2222-3333-4444-555555555555\",\n    comment=\"your-comment\",\n    client_reference=\"11111111-2222-3333-4444-555555555555\",\n    extra_headers={\"Authorization\": \"Bearer YOUR_CONSOLE_USER_TOKEN\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nconst didit = new Didit({\n  fetch: (url, init) => {\n    const headers = new Headers(init?.headers);\n    headers.set(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\");\n    return fetch(url, { ...init, headers });\n  },\n});\n\nconst result = await didit.networks.notes.create(\"11111111-2222-3333-4444-555555555555\", {\n  comment: \"your-comment\",\n  client_reference: \"11111111-2222-3333-4444-555555555555\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nclient := didit.NewClient()\n\nresult, err := client.Networks.Notes.Create(ctx, \"11111111-2222-3333-4444-555555555555\", didit.NetworksNotesCreateParams{\n\tComment:         \"your-comment\",\n\tClientReference: \"11111111-2222-3333-4444-555555555555\",\n\tAuthorization:   \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.core.RequestOptions;\nimport me.didit.types.NetworksNotesCreateParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nDidit client = new Didit();\n\nvar result = client.networks().notes().create(\"11111111-2222-3333-4444-555555555555\", NetworksNotesCreateParams.builder()\n        .comment(\"your-comment\")\n        .clientReference(\"11111111-2222-3333-4444-555555555555\")\n        .build(), RequestOptions.builder()\n        .header(\"Authorization\", \"Bearer YOUR_CONSOLE_USER_TOKEN\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\n$didit = new DiditClient();\n\n$result = $didit->networks->notes->create('11111111-2222-3333-4444-555555555555', [\n    'comment' => 'your-comment',\n    'client_reference' => '11111111-2222-3333-4444-555555555555',\n    'authorization' => 'Bearer YOUR_CONSOLE_USER_TOKEN',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\n# Also needs a console user's access token.\ndidit = Didit::Client.new\n\nresult = didit.networks.notes.create(\n  \"11111111-2222-3333-4444-555555555555\",\n  comment: \"your-comment\",\n  client_reference: \"11111111-2222-3333-4444-555555555555\",\n  request_options: { extra_headers: { \"Authorization\" => \"Bearer YOUR_CONSOLE_USER_TOKEN\" } }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n// Also needs a console user's access token.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.Notes.CreateAsync(\"11111111-2222-3333-4444-555555555555\", new NetworksNotesCreateParams\n{\n    Comment = \"your-comment\",\n    ClientReference = \"11111111-2222-3333-4444-555555555555\",\n}, requestOptions: new RequestOptions\n{\n    Headers = new Dictionary<string, string>\n    {\n        [\"Authorization\"] = \"Bearer YOUR_CONSOLE_USER_TOKEN\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/routing-rules/{record_uuid}/draft/": {
      "get": {
        "operationId": "get_case_routing_rule_draft",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "retrieve_draft",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "record_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Assignment"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingPublicationPolicyDraftResponse"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "ケースへのアクセス権が必要です。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.retrieve_draft(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.retrieveDraft(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.RetrieveDraft(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().retrieveDraft(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->retrieveDraft('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.retrieve_draft(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.RetrieveDraftAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "put": {
        "operationId": "save_case_routing_rule_draft",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "save_draft",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "record_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Assignment"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftWriteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftWriteRequest"
              },
              "example": {
                "expected_version": 1,
                "expected_revision": "4e5f0000-0000-4000-8000-000000000003",
                "changes": {
                  "priority": 10
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftWriteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingPublicationPolicyDraft"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "ケースへのアクセス権が必要です。"
          },
          "409": {
            "description": "公開済みのバージョンまたはドラフトのリビジョンが変更されました。再試行する前に再読み込みしてください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.save_draft(\n    \"11111111-2222-3333-4444-555555555555\",\n    expected_version=1,\n    expected_revision=\"4e5f0000-0000-4000-8000-000000000003\",\n    changes={\"priority\": 10},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.saveDraft(\"11111111-2222-3333-4444-555555555555\", {\n  expected_version: 1,\n  expected_revision: \"4e5f0000-0000-4000-8000-000000000003\",\n  changes: { priority: 10 },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.SaveDraft(ctx, \"11111111-2222-3333-4444-555555555555\", didit.RoutingPublicationPolicyDraftWriteRequest{\n\tExpectedVersion:  1,\n\tExpectedRevision: didit.String(\"4e5f0000-0000-4000-8000-000000000003\"),\n\tChanges:          map[string]any{\"priority\": 10},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.RoutingPublicationPolicyDraftWriteRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().saveDraft(\"11111111-2222-3333-4444-555555555555\", RoutingPublicationPolicyDraftWriteRequest.builder()\n        .expectedVersion(1L)\n        .expectedRevision(\"4e5f0000-0000-4000-8000-000000000003\")\n        .changes(Map.of(\"priority\", 10))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->saveDraft('11111111-2222-3333-4444-555555555555', [\n    'expected_version' => 1,\n    'expected_revision' => '4e5f0000-0000-4000-8000-000000000003',\n    'changes' => ['priority' => 10],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.save_draft(\n  \"11111111-2222-3333-4444-555555555555\",\n  expected_version: 1,\n  expected_revision: \"4e5f0000-0000-4000-8000-000000000003\",\n  changes: { priority: 10 }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.SaveDraftAsync(\"11111111-2222-3333-4444-555555555555\", new RoutingPublicationPolicyDraftWriteRequest\n{\n    ExpectedVersion = 1,\n    ExpectedRevision = \"4e5f0000-0000-4000-8000-000000000003\",\n    Changes = new Dictionary<string, object> { [\"priority\"] = 10 },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "operationId": "discard_case_routing_rule_draft",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "discard_draft",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "record_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Assignment"
        ],
        "responses": {
          "204": {
            "description": "レスポンスボディなし"
          },
          "403": {
            "description": "ケースへのアクセス権が必要です。"
          },
          "409": {
            "description": "公開済みのバージョンまたはドラフトのリビジョンが変更されました。再試行する前に再読み込みしてください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraftPreconditionRequest"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.cases.routing_rules.discard_draft(\n    \"11111111-2222-3333-4444-555555555555\",\n    expected_version=0,\n    expected_revision=\"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.cases.routingRules.discardDraft(\"11111111-2222-3333-4444-555555555555\", {\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\",\n});"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nif err := client.Cases.RoutingRules.DiscardDraft(ctx, \"11111111-2222-3333-4444-555555555555\", didit.RoutingPublicationPolicyDraftPreconditionRequest{\n\tExpectedVersion:  0,\n\tExpectedRevision: didit.String(\"11111111-2222-3333-4444-555555555555\"),\n}); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.RoutingPublicationPolicyDraftPreconditionRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.cases().routingRules().discardDraft(\"11111111-2222-3333-4444-555555555555\", RoutingPublicationPolicyDraftPreconditionRequest.builder()\n        .expectedVersion(0L)\n        .expectedRevision(\"11111111-2222-3333-4444-555555555555\")\n        .build());"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->cases->routingRules->discardDraft('11111111-2222-3333-4444-555555555555', [\n    'expected_version' => 0,\n    'expected_revision' => '11111111-2222-3333-4444-555555555555',\n]);"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.routing_rules.discard_draft(\n  \"11111111-2222-3333-4444-555555555555\",\n  expected_version: 0,\n  expected_revision: \"11111111-2222-3333-4444-555555555555\"\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Cases.RoutingRules.DiscardDraftAsync(\"11111111-2222-3333-4444-555555555555\", new RoutingPublicationPolicyDraftPreconditionRequest\n{\n    ExpectedVersion = 0,\n    ExpectedRevision = \"11111111-2222-3333-4444-555555555555\",\n});"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/duplicates/": {
      "post": {
        "operationId": "duplicates_create",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "find_duplicates",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          }
        ],
        "tags": [
          "Case Management"
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CaseDuplicateCaseDuplicateQueryRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseDuplicateCaseDuplicateQueryRequest"
              },
              "example": {
                "subject": {
                  "type": "user",
                  "uuid": "5b9a0000-0000-4000-8000-00000000f00d"
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CaseDuplicateCaseDuplicateQueryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseDuplicateCaseDuplicatePage"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "手動でケースを作成する前に、対象者または所有するソースレコードの既存のケースを確認します。対応中と解決済みの両方の調査が返されます。各ページには最大20件のケースが含まれます。別のページを取得するにはnext_offsetを使用します。",
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.find_duplicates(\n    subject={\n        \"type\": \"user\",\n        \"uuid\": \"5b9a0000-0000-4000-8000-00000000f00d\",\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.findDuplicates({\n  subject: {\n    type: \"user\",\n    uuid: \"5b9a0000-0000-4000-8000-00000000f00d\",\n  },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.FindDuplicates(ctx, didit.CaseDuplicateCaseDuplicateQueryRequest{\n\tSubject: didit.Some(didit.CaseDuplicateCaseSubjectInputRequest{\n\t\tType: didit.CaseDuplicateTypeEnum(\"user\"),\n\t\tUUID: \"5b9a0000-0000-4000-8000-00000000f00d\",\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CaseDuplicateCaseDuplicateQueryRequest;\nimport me.didit.types.CaseDuplicateCaseSubjectInputRequest;\nimport me.didit.types.CaseDuplicateTypeEnum;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().findDuplicates(CaseDuplicateCaseDuplicateQueryRequest.builder()\n        .subject(CaseDuplicateCaseSubjectInputRequest.builder()\n                .type(CaseDuplicateTypeEnum.of(\"user\"))\n                .uuid(\"5b9a0000-0000-4000-8000-00000000f00d\")\n                .build())\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->findDuplicates([\n    'subject' => [\n        'type' => 'user',\n        'uuid' => '5b9a0000-0000-4000-8000-00000000f00d',\n    ],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.find_duplicates(\n  subject: {\n    type: \"user\",\n    uuid: \"5b9a0000-0000-4000-8000-00000000f00d\",\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.FindDuplicatesAsync(new CaseDuplicateCaseDuplicateQueryRequest\n{\n    Subject = new CaseDuplicateCaseSubjectInputRequest\n    {\n        Type = \"user\",\n        Uuid = \"5b9a0000-0000-4000-8000-00000000f00d\",\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/routing-rules/preview/": {
      "post": {
        "summary": "テストケースのルーティング",
        "description": "対象アプリケーションに対する`read:cases`が必要です。現在のルール、または指定したドラフトを、現在のレビュアーのアクセス権、稼働状況、スキル、処理能力に照らして評価します。ドラフトの保存やレビュアーの処理能力の確保は行いません。",
        "operationId": "preview_case_routing",
        "x-didit-sdk": {
          "resource": "cases.routing_rules",
          "method": "preview",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseRoutingPreview"
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseRoutingPreviewRequest"
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.routing_rules.preview(\n    source=\"MANUAL\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.routingRules.preview({\n  source: \"MANUAL\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.RoutingRules.Preview(ctx, didit.CaseRoutingPreviewRequest{\n\tSource: \"MANUAL\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.CaseRoutingPreviewRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().routingRules().preview(CaseRoutingPreviewRequest.builder()\n        .source(CaseRoutingPreviewRequest.Source.of(\"MANUAL\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->routingRules->preview([\n    'source' => 'MANUAL',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.routing_rules.preview(source: \"MANUAL\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.RoutingRules.PreviewAsync(new CaseRoutingPreviewRequest\n{\n    Source = \"MANUAL\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/reviewers/": {
      "get": {
        "summary": "割り当て可能なケースレビュアーの一覧を取得",
        "description": "対象アプリケーションに対する`list:cases`が必要です。",
        "operationId": "list_case_reviewers",
        "x-didit-sdk": {
          "resource": "cases",
          "method": "list_reviewers",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Case Assignment"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "user_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "email": {
                            "type": "string",
                            "format": "email"
                          },
                          "name": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "入力が無効です。"
          },
          "403": {
            "description": "権限が不足しています。"
          },
          "503": {
            "description": "レビュアーのアクセス権を確認できませんでした。しばらくしてから再試行してください。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.list_reviewers()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.listReviewers();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.ListReviewers(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().listReviewers();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->listReviewers();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.list_reviewers\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.ListReviewersAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/blueprints/{blueprint_uuid}/history/": {
      "get": {
        "operationId": "list_case_blueprint_history",
        "x-didit-sdk": {
          "resource": "cases.blueprints",
          "method": "list_history",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "blueprint_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true
          },
          {
            "name": "ordering",
            "required": false,
            "in": "query",
            "description": "結果の並べ替えに使用するフィールド。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "description": "1ページあたりに返す結果の件数です。",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "description": "結果を返す開始インデックスです。",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "tags": [
          "Case Management"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CasePublicationPaginatedPolicyRevisionList"
                }
              }
            },
            "description": ""
          },
          "403": {
            "description": "必要なケース権限がありません。"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nfor item in client.cases.blueprints.list_history(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nfor await (const item of didit.cases.blueprints.listHistory(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Cases.Blueprints.ListHistoryAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.CasesBlueprintsListHistoryParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nfor (var item : client.cases().blueprints().listHistory(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\nforeach ($didit->cases->blueprints->listHistory('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.cases.blueprints.list_history(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Cases.Blueprints.ListHistoryAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/signatures/{nodeId}/documents/{documentId}/file/": {
      "get": {
        "summary": "署名済み書類をダウンロード",
        "description": "電子署名ステップの1つの書類について、署名済みPDFをダウンロードします。判定内の`signatures[].documents[]`にある`signed_file`のパスを使用してください。このPDFには、署名者に表示された書類に署名者のフィールド値が刻印されたものと、証拠ページ（`signature_evidence_page`が無効の場合を除く）が含まれます。Advanced (AES)のPDFにはタイムスタンプ付きのPAdES署名も含まれます。SimpleのPDFにはデジタル署名、シール、タイムスタンプはありません。Diditはファイルを返す前に`sha256_signed`と照合して確認します。\n\nユーザー認証 (KYC)と法人確認 (KYB)のセッションで利用できます。`read:sessions`が必要で、APIキーで利用できます。[電子署名レポート](/ja/core-technology/electronic-signature/report-electronic-signature#署名済み書類のダウンロード)を参照してください。",
        "operationId": "get_v3_session_signature_document_file",
        "x-didit-sdk": {
          "resource": "sessions.signatures",
          "method": "download_document",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー認証（KYC）または法人確認（KYB）のセッションです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "nodeId",
            "in": "path",
            "required": true,
            "description": "電子署名ステップ: `signatures[]`内の項目の`node_id`。",
            "schema": {
              "type": "string",
              "example": "feature_signature"
            }
          },
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "description": "`signatures[].documents[]`内の書類の`id`。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "署名済みのPDF。",
            "headers": {
              "Content-Disposition": {
                "description": "ファイル名付きの添付ファイル。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"agreement-signed.pdf\""
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか、その認証情報ではこのセッションを読み取れません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "You do not have permission to perform this action."
                }
              }
            }
          },
          "404": {
            "description": "一致する署名済み書類がありません。セッション、ステップ、または書類が存在しないか、削除されているか、まだ署名されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not signed yet": {
                    "summary": "署名者が署名していません",
                    "value": {
                      "code": "signature_not_signed",
                      "detail": "signature_not_signed"
                    }
                  },
                  "Unknown document": {
                    "summary": "このステップにそのような書類はありません",
                    "value": {
                      "code": "signature_not_found",
                      "detail": "signature_not_found"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "保存されたファイルが記録されたSHA-256と一致しなくなっています。何も返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Changed file": {
                    "summary": "保存されたファイルがハッシュと一致しません",
                    "value": {
                      "code": "signature_document_changed",
                      "detail": "signature_document_changed"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.sessions.signatures.download_document(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"feature_signature\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.sessions.signatures.downloadDocument(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.Signatures.DownloadDocument(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().signatures().downloadDocument(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\")\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->sessions->signatures->downloadDocument('11111111-2222-3333-4444-555555555555', 'feature_signature', '11111111-2222-3333-4444-555555555555');\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.sessions.signatures.download_document(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Sessions.Signatures.DownloadDocumentAsync(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\");\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/signatures/{nodeId}/evidence/": {
      "get": {
        "summary": "署名の証拠をダウンロード",
        "description": "署名者の証拠PDFをダウンロードします。このPDFには、署名のレベルと形式、署名者、IPアドレス、元のSHA-256とフィールド値を含む各書類、署名済みの各ファイルのSHA-256が含まれ、Advanced (AES)署名の場合はさらに、検証済みの本人確認セッション、コードによる確認、証明書、タイムスタンプが含まれます。`signatures[]`内の署名者の項目にある`evidence_file`のパスを使用してください。\n\n法人確認のステップに複数の署名者がいる場合は、必ず`signature_id`を指定してください。指定しない場合、このルートはそのステップの署名者のうち1人を選択します。`read:sessions`が必要で、APIキーで利用できます。",
        "operationId": "get_v3_session_signature_evidence",
        "x-didit-sdk": {
          "resource": "sessions.signatures",
          "method": "download_evidence",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー認証（KYC）または法人確認（KYB）のセッションです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "nodeId",
            "in": "path",
            "required": true,
            "description": "電子署名ステップ: `signatures[]`内の項目の`node_id`。",
            "schema": {
              "type": "string",
              "example": "feature_signature"
            }
          },
          {
            "name": "signature_id",
            "in": "query",
            "required": false,
            "description": "`signatures[]`内の署名者の項目の`id`。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "証拠PDFです。",
            "headers": {
              "Content-Disposition": {
                "description": "ファイル名付きの添付ファイル。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"signature-evidence.pdf\""
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか、その認証情報ではこのセッションを読み取れません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "You do not have permission to perform this action."
                }
              }
            }
          },
          "404": {
            "description": "一致する証跡がありません。セッション、ステップ、または署名者が存在しないか、削除されているか、署名していません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not signed yet": {
                    "summary": "署名者が署名していません",
                    "value": {
                      "code": "signature_not_signed",
                      "detail": "signature_not_signed"
                    }
                  },
                  "Unknown signer": {
                    "summary": "このステップにそのような署名はありません",
                    "value": {
                      "code": "signature_not_found",
                      "detail": "signature_not_found"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "保存されたファイルが記録されたSHA-256と一致しなくなっています。何も返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Changed file": {
                    "summary": "保存されたファイルがハッシュと一致しません",
                    "value": {
                      "code": "signature_document_changed",
                      "detail": "signature_document_changed"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.sessions.signatures.download_evidence(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"feature_signature\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.sessions.signatures.downloadEvidence(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n);\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.Signatures.DownloadEvidence(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", didit.SessionsSignaturesDownloadEvidenceParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().signatures().downloadEvidence(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\")\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->sessions->signatures->downloadEvidence('11111111-2222-3333-4444-555555555555', 'feature_signature');\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.sessions.signatures.download_evidence(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\"\n)\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Sessions.Signatures.DownloadEvidenceAsync(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\");\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/signatures/{nodeId}/fields/{fieldId}/image/": {
      "get": {
        "summary": "署名画像をダウンロード",
        "description": "署名者がフィールドに適用した署名またはイニシャルをPNGでダウンロードします。`signatures[].documents[].fields[]`内のフィールドの`image_url`を使用してください。`read:sessions`が必要で、APIキーで利用できます。",
        "operationId": "get_v3_session_signature_field_image",
        "x-didit-sdk": {
          "resource": "sessions.signatures",
          "method": "download_field_image",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー認証（KYC）または法人確認（KYB）のセッションです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "nodeId",
            "in": "path",
            "required": true,
            "description": "電子署名ステップ: `signatures[]`内の項目の`node_id`。",
            "schema": {
              "type": "string",
              "example": "feature_signature"
            }
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "この署名者のコピー上のフィールドで、フィールドの`image_url`に示されるとおりです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "画像です。",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "保存された画像が記録されたSHA-256と一致しなくなっています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": "signature_document_changed",
                  "detail": "signature_document_changed"
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか、その認証情報ではこのセッションを読み取れません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "You do not have permission to perform this action."
                }
              }
            }
          },
          "404": {
            "description": "一致する画像がありません。セッション、ステップ、またはフィールドが存在しないか、削除されているか、適用された署名またはイニシャルがありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Unknown field": {
                    "summary": "そのようなフィールドはありません",
                    "value": {
                      "code": "signature_field_not_found",
                      "detail": "signature_field_not_found"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.sessions.signatures.download_field_image(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"feature_signature\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nwith open(\"download.png\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.sessions.signatures.downloadFieldImage(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nawait writeFile(\"download.png\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.Signatures.DownloadFieldImage(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.png\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().signatures().downloadFieldImage(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\")\n        .writeTo(Path.of(\"download.png\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->sessions->signatures->downloadFieldImage('11111111-2222-3333-4444-555555555555', 'feature_signature', '11111111-2222-3333-4444-555555555555');\n$content->saveTo('download.png');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.sessions.signatures.download_field_image(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nFile.binwrite(\"download.png\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Sessions.Signatures.DownloadFieldImageAsync(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\");\nawait content.SaveToAsync(\"download.png\");"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/signatures/{nodeId}/validate/": {
      "post": {
        "summary": "署名を再度検証",
        "description": "電子署名ステップの署名済み書類を再チェックします。Diditは署名済みPDFをすべて読み直してSHA-256を確認し、高度電子署名（AES）の場合はPAdES署名、証明書、失効情報、タイムスタンプを検証します（シンプル署名にはデジタル署名がないため、ファイルの完全性のみを確認します）。その後、結果を各署名者の`validation`に保存し、更新された項目を返します。再署名は一切行われません。1人の署名者を確認するには`signature_id`を送信します。指定しない場合はステップのすべての署名者が確認され、いずれかの署名者が未署名であれば呼び出しは失敗します。\n\n`write:sessions`が必要です。APIキーで利用できます。コンソールでは**Validate again**ボタンに相当します。",
        "operationId": "post_v3_session_signature_validate",
        "x-didit-sdk": {
          "resource": "sessions.signatures",
          "method": "validate",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー認証（KYC）または法人確認（KYB）のセッションです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "nodeId",
            "in": "path",
            "required": true,
            "description": "電子署名ステップ: `signatures[]`内の項目の`node_id`。",
            "schema": {
              "type": "string",
              "example": "feature_signature"
            }
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "signature_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "`signatures[]`内の署名者1人分の項目の`id`。"
                  }
                }
              },
              "example": {
                "signature_id": "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "チェックされた署名者と、更新された`validation`。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "signatures": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/SignatureResult"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "保存されている署名済みPDFが、署名時に記録されたSHA-256と一致しなくなっています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Document changed": {
                    "summary": "署名済みファイルがハッシュと一致しなくなっています",
                    "value": {
                      "code": "signature_document_changed",
                      "detail": "signature_document_changed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がないか、その認証情報ではこのセッションを読み取れません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "You do not have permission to perform this action."
                }
              }
            }
          },
          "404": {
            "description": "一致する署名がありません。セッション、ステップ、または署名者が存在しないか、削除されています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Unknown signer": {
                    "summary": "このステップにそのような署名はありません",
                    "value": {
                      "code": "signature_not_found",
                      "detail": "signature_not_found"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "このステップの署名者が署名していないため、検証する対象がありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not signed": {
                    "summary": "まだ署名していない署名者がいます",
                    "value": {
                      "code": "signature_not_signed",
                      "detail": "signature_not_signed"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.signatures.validate(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"feature_signature\",\n    signature_id=\"0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.signatures.validate(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n  {\n    signature_id: \"0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10\",\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Signatures.Validate(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", didit.SessionsSignaturesValidateParams{\n\tSignatureID: didit.String(\"0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsSignaturesValidateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().signatures().validate(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\", SessionsSignaturesValidateParams.builder()\n        .signatureId(\"0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->signatures->validate('11111111-2222-3333-4444-555555555555', 'feature_signature', [\n    'signature_id' => '0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.signatures.validate(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"feature_signature\",\n  signature_id: \"0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Signatures.ValidateAsync(\"11111111-2222-3333-4444-555555555555\", \"feature_signature\", new SessionsSignaturesValidateParams\n{\n    SignatureId = \"0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/document-ai/{sessionId}/documents/{documentUuid}/": {
      "patch": {
        "summary": "Document AIの書類を更新",
        "description": "KYCまたはKYBセッションで、アップロードされた1件の書類からDocument AIが抽出したフィールドを修正するか、そのレビューステータスを設定するか、またはその両方を行います。`extracted_data`はJSONオブジェクトである必要があり、キーごとにマージされます。送信したキーは保存済みの値を置き換え（`null`として送信したキーは`null`として保存されます）、送信しなかったキーは値が保持されます。書類のステータスは、セッションの判定におけるワークフローノードのDocument AI結果に反映されますが、セッションのステータス自体は再計算されません。何も変更しない呼び出しを含め、成功した呼び出しのたびに、トリガー`manual_review`の`data.updated`[Webhook](https://docs.didit.me/ja/integration/webhooks)が送信されます。スコープ付きのAPIキーには`decisions: write`が必要です。詳しくは[Document AI](https://docs.didit.me/ja/core-technology/document-ai/overview)を参照してください。",
        "operationId": "patch_v3_document_ai_document",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_document_ai_data",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。サーバーは両方のセッションタイプにわたってIDを解決します。正しい形式のUUIDである必要があります。形式が不正な値はルートに一致せず、HTMLの`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "description": "Document AI書類のUUID (`GET /v3/session/{sessionId}/decision/`内の`document_ai_documents[].items[].uuid`) です。パスで指定したセッションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "44444444-5555-6666-7777-888888888888"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "extracted_data": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "フィールドキー(書類に設定したキー)とその修正後の値。JSONオブジェクトである必要があり、保存済みのデータにキー単位でマージされます。`null`を送信すると`400`が返るため、送信せずに省略してください。",
                    "example": {
                      "invoice_number": "INV-2026-0042"
                    }
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "Approved",
                      "Declined",
                      "In Review",
                      "Not Finished"
                    ],
                    "description": "書類の新しいレビューステータス。",
                    "example": "Approved"
                  }
                }
              },
              "example": {
                "extracted_data": {
                  "invoice_number": "INV-2026-0042"
                },
                "status": "Approved"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/document-ai/11111111-2222-3333-4444-555555555555/documents/44444444-5555-6666-7777-888888888888/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"extracted_data\": {\"invoice_number\": \"INV-2026-0042\"}, \"status\": \"Approved\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_document_ai_data(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"44444444-5555-6666-7777-888888888888\",\n    extracted_data={\"invoice_number\": \"INV-2026-0042\"},\n    status=\"Approved\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateDocumentAiData(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"44444444-5555-6666-7777-888888888888\",\n  {\n    extracted_data: { invoice_number: \"INV-2026-0042\" },\n    status: \"Approved\",\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateDocumentAiData(ctx, \"11111111-2222-3333-4444-555555555555\", \"44444444-5555-6666-7777-888888888888\", didit.SessionsUpdateDocumentAiDataParams{\n\tExtractedData: didit.Some(map[string]any{\"invoice_number\": \"INV-2026-0042\"}),\n\tStatus:        didit.Some(didit.SessionsUpdateDocumentAiDataParamsStatus(\"Approved\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SessionsUpdateDocumentAiDataParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateDocumentAiData(\"11111111-2222-3333-4444-555555555555\", \"44444444-5555-6666-7777-888888888888\", SessionsUpdateDocumentAiDataParams.builder()\n        .extractedData(Map.of(\"invoice_number\", \"INV-2026-0042\"))\n        .status(SessionsUpdateDocumentAiDataParams.Status.of(\"Approved\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateDocumentAiData('11111111-2222-3333-4444-555555555555', '44444444-5555-6666-7777-888888888888', [\n    'extracted_data' => ['invoice_number' => 'INV-2026-0042'],\n    'status' => 'Approved',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_document_ai_data(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"44444444-5555-6666-7777-888888888888\",\n  extracted_data: { invoice_number: \"INV-2026-0042\" },\n  status: \"Approved\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateDocumentAiDataAsync(\"11111111-2222-3333-4444-555555555555\", \"44444444-5555-6666-7777-888888888888\", new SessionsUpdateDocumentAiDataParams\n{\n    ExtractedData = new Dictionary<string, object> { [\"invoice_number\"] = \"INV-2026-0042\" },\n    Status = new SessionsUpdateDocumentAiDataParamsStatus(\"Approved\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "書類を更新しました。マージ後の書類を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "uuid",
                    "document_key",
                    "original_filename",
                    "file_url",
                    "status",
                    "extracted_data"
                  ],
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "書類の識別子。"
                    },
                    "document_key": {
                      "type": "string",
                      "description": "このアップロードに対応する設定済みの書類。"
                    },
                    "original_filename": {
                      "type": "string",
                      "nullable": true,
                      "description": "書類のアップロード時のファイル名。"
                    },
                    "file_url": {
                      "type": "string",
                      "nullable": true,
                      "description": "アップロードされたファイルの保存パス。ダウンロードリンクではありません。ファイルをダウンロードするには、セッションの判定から署名付きの`file_url`を取得してください。"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "Not Finished",
                        "Approved",
                        "Declined",
                        "In Review",
                        "Resub Requested"
                      ],
                      "description": "書類のレビューステータス。"
                    },
                    "extracted_data": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "マージ後に抽出されたすべてのフィールドです。フィールドキーをキーとします。"
                    }
                  }
                },
                "example": {
                  "uuid": "44444444-5555-6666-7777-888888888888",
                  "document_key": "invoice",
                  "original_filename": "invoice-2026-09.pdf",
                  "file_url": "document_ai/11111111-2222-3333-4444-555555555555-66666666-7777-8888-9999-000000000000.pdf",
                  "status": "Approved",
                  "extracted_data": {
                    "invoice_number": "INV-2026-0042",
                    "total_amount": 1250.0,
                    "issue_date": "2026-09-01"
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。書類を検索する前にチェックされます。`status`が許可された値のいずれでもない場合、または`extracted_data`が`null`として送信された場合に返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid status": {
                    "summary": "statusがenumに含まれていません",
                    "value": {
                      "status": [
                        "\"Rejected\" is not a valid choice."
                      ]
                    }
                  },
                  "Null extracted_data": {
                    "summary": "extracted_dataがnullです",
                    "value": {
                      "extracted_data": [
                        "This field may not be null."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーの制限外であるか、このUUIDの現在の書類がセッションに属していません。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーの制限外です（直前に削除されたセッションにも返されます）",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "Unknown document": {
                    "summary": "documentUuidがセッションに属していません",
                    "value": {
                      "detail": "Document AI document not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/aml/dataset-freshness/": {
      "get": {
        "summary": "AMLデータセットの鮮度を取得",
        "description": "AMLスクリーニングの基盤となるデータセットがどの程度最新かを、ソースファミリー(`sanctions`、`pep`、`warnings`、`adverse_media`)ごとに、[継続的なAMLモニタリング](https://docs.didit.me/ja/core-technology/aml-screening/continuous-monitoring-aml-screening#モニタリングが実行されたことを証明する)の監査証拠としてレポートします。回答はプラットフォーム全体に共通です。パスにセッションはなく、ボディに顧客データはなく、すべてのアプリケーションで同じ回答になります。\n\n受け付けられたキーに対しては常に`200`を返します。まず`availability`を確認してください。`available`でない場合、`dataset_freshness`は`null`です。日付が推定されることはありません。どのデータセットも日付を報告しなかったファミリーは`sources`に含まれず、一部のデータセットのみが日付を報告したファミリーは`oldest_updated_at: null`になります。測定値は呼び出しごとではなく、継続的なモニタリングの実行中に取得されます。`captured_at`がその時刻を示します。\n\nスコープ付きAPIキーには`sessions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーは、このエンドポイントを呼び出せません。料金は発生しません。",
        "operationId": "get_aml_dataset_freshness",
        "x-didit-sdk": {
          "resource": "aml",
          "method": "retrieve_dataset_freshness",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "parameters": [],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/aml/dataset-freshness/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.aml.retrieve_dataset_freshness()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.aml.retrieveDatasetFreshness();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.AML.RetrieveDatasetFreshness(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.aml().retrieveDatasetFreshness();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->aml->retrieveDatasetFreshness();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.aml.retrieve_dataset_freshness\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Aml.RetrieveDatasetFreshnessAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "最新のデータセット鮮度の測定値、または理由付きの`null`です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "dataset_freshness",
                    "availability"
                  ],
                  "properties": {
                    "dataset_freshness": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/AMLDatasetFreshness"
                        }
                      ],
                      "nullable": true,
                      "description": "最新の測定値です。`availability`が`available`でない場合は`null`です。"
                    },
                    "availability": {
                      "type": "string",
                      "enum": [
                        "available",
                        "not_configured",
                        "not_yet_collected"
                      ],
                      "description": "読み取り値が存在する場合は`available`、この環境でデータセットの日付が収集されていない場合は`not_configured`、収集は設定済みだが読み取り値がまだない場合は`not_yet_collected`です。"
                    }
                  }
                },
                "examples": {
                  "Available": {
                    "value": {
                      "dataset_freshness": {
                        "captured_at": "2026-10-17T06:00:12.345678+00:00",
                        "provider": "aml_data_source",
                        "catalog_version": "20261017054500-abc",
                        "sources": {
                          "sanctions": {
                            "last_updated_at": "2026-10-17T04:10:00+00:00",
                            "oldest_updated_at": "2026-10-15T22:30:00+00:00",
                            "dataset_count": 48,
                            "dated_dataset_count": 48
                          },
                          "pep": {
                            "last_updated_at": "2026-10-16T23:05:00+00:00",
                            "oldest_updated_at": null,
                            "dataset_count": 12,
                            "dated_dataset_count": 11
                          }
                        }
                      },
                      "availability": "available"
                    }
                  },
                  "Not collected yet": {
                    "value": {
                      "dataset_freshness": null,
                      "availability": "not_yet_collected"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。キーがない場合は汎用メッセージが返され、誤った、失効した、または期限切れのキーには`401`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without sessions read": {
                    "value": {
                      "detail": "This API key has no read access to sessions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/lists/": {
      "get": {
        "summary": "リストを一覧表示",
        "description": "アプリケーションのリストを新しい順に返します。対象は、Diditが用意するシステムリスト（エントリタイプごとに1つのブロックリスト、**High Risk Countries**カスタムリスト、およびシステム許可リストがある場合はそれ）と、お客様が作成した許可リストおよびカスタムリストです。`list_type`と`entry_type`でフィルターできます。削除されたリストは表示されません。結果は`limit`と`offset`でページ分割されます。スコープ付きAPIキーには`workflows: read`が必要です。各リストタイプの役割については[リスト](https://docs.didit.me/ja/management-api/lists/overview)を参照してください。",
        "operationId": "list_lists",
        "x-didit-sdk": {
          "resource": "lists",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_type",
            "in": "query",
            "required": false,
            "description": "このタイプのリストのみ。",
            "schema": {
              "type": "string",
              "enum": [
                "blocklist",
                "allowlist",
                "custom"
              ]
            }
          },
          {
            "name": "entry_type",
            "in": "query",
            "required": false,
            "description": "このエントリタイプのリストのみ。",
            "schema": {
              "type": "string",
              "enum": [
                "face",
                "document",
                "phone",
                "email",
                "ip_address",
                "device_fingerprint",
                "wallet_address",
                "bank_account",
                "country",
                "user",
                "business",
                "key"
              ]
            }
          },
          {
            "name": "ordering",
            "in": "query",
            "required": false,
            "description": "並び順: `-created_at`(新しい順、デフォルト)または`created_at`(古い順)。",
            "schema": {
              "type": "string",
              "enum": [
                "-created_at",
                "created_at"
              ],
              "default": "-created_at"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "ページサイズ。デフォルトは50です。1000000を超える値は`400`を返します。0、負の値、数値以外の値の場合は50が使用されます。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "返す最初の項目の0始まりのインデックスです。`next`をたどる方法を推奨します。1000000を超える値は`400`を返し、負の値または数値以外の値は0として扱われます。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/lists/?list_type=blocklist' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.lists.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.lists.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Lists.ListAutoPaging(ctx, didit.ListsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.lists().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->lists->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.lists.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Lists.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "リストのページ。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "フィルターに一致するリストの総数。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ComplianceList"
                      }
                    }
                  }
                },
                "examples": {
                  "Lists": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "22222222-3333-4444-5555-666666666666",
                          "name": "Trusted office IPs",
                          "description": "Office egress ranges",
                          "list_type": "allowlist",
                          "entry_type": "ip_address",
                          "is_system": false,
                          "entry_count": 3,
                          "last_entry_added_at": "2026-10-02T08:15:27.501334Z",
                          "created_at": "2026-09-30T13:20:45.889120Z",
                          "updated_at": "2026-09-30T13:20:45.889120Z"
                        },
                        {
                          "uuid": "11111111-2222-3333-4444-555555555555",
                          "name": "Face Blocklist",
                          "description": "Blocked biometric faces. When a face matching an entry in this list is detected during liveness verification, the session will be automatically declined.",
                          "list_type": "blocklist",
                          "entry_type": "face",
                          "is_system": true,
                          "entry_count": 12,
                          "last_entry_added_at": "2026-10-09T16:42:03.118204Z",
                          "created_at": "2026-01-14T10:02:11.402917Z",
                          "updated_at": "2026-01-14T10:02:11.402917Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "クエリパラメーターが無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown list type": {
                    "value": {
                      "list_type": [
                        "\"denylist\" is not a valid choice."
                      ]
                    }
                  },
                  "Unsupported ordering": {
                    "value": {
                      "ordering": [
                        "\"name\" is not a valid choice."
                      ]
                    }
                  },
                  "Limit too large": {
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: read`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no read access to workflows."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "APIキーあたり毎分600リクエストの共有読み取り制限を超えました。再試行する前に`Retry-After`に従ってください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "リストを作成",
        "description": "APIキーが属するアプリケーションに、許可リストまたはカスタムリストを作成します。ブロックリストは作成できません。Diditはエントリータイプごとにシステムブロックリストを1つ用意しており、[リストエントリーを作成](https://docs.didit.me/ja/management-api/lists/create-entry)でそこに追加します。`entry_type`は作成後に変更できず、エントリー値の検証方法と照合方法を決定します。許可リストのエントリーは一致した項目を信頼済みとしてマークします（たとえば、顔の許可リストでは重複顔のアクションがスキップされます）が、ブロックリストとの一致を上書きすることはありません。どのリストも`value_type: \"list\"`を使ってワークフローまたは取引ルールの条件から参照できます。スコープ付きAPIキーには`workflows: write`が必要です。",
        "operationId": "create_list",
        "x-didit-sdk": {
          "resource": "lists",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "list_type",
                  "entry_type"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255,
                    "description": "リスト名です。システムリストを含め、アプリケーションの他のすべてのリストの名前と異なる必要があります。"
                  },
                  "description": {
                    "type": "string",
                    "default": "",
                    "description": "任意の自由記述の説明です。"
                  },
                  "list_type": {
                    "type": "string",
                    "enum": [
                      "allowlist",
                      "custom"
                    ],
                    "description": "`allowlist`または`custom`。`blocklist`は`400`で拒否されます。"
                  },
                  "entry_type": {
                    "type": "string",
                    "enum": [
                      "face",
                      "document",
                      "phone",
                      "email",
                      "ip_address",
                      "device_fingerprint",
                      "wallet_address",
                      "bank_account",
                      "country",
                      "user",
                      "business",
                      "key"
                    ],
                    "description": "リストが保持する内容です。`face`、`document`（書類番号）、`phone`、`email`、`ip_address`（IPアドレスまたはCIDR範囲）、`device_fingerprint`、`wallet_address`、`bank_account`、`country`（ISO 3166-1 alpha-3）、`user`または`business`（お客様の`vendor_data`）、`key`（任意の文字列）のいずれかです。エントリの値の検証方法と照合方法はこれによって決まります。後から変更することはできません。"
                  }
                }
              },
              "examples": {
                "IP allowlist": {
                  "value": {
                    "name": "Trusted office IPs",
                    "description": "Office egress ranges",
                    "list_type": "allowlist",
                    "entry_type": "ip_address"
                  }
                },
                "Custom country list": {
                  "value": {
                    "name": "Enhanced due diligence countries",
                    "list_type": "custom",
                    "entry_type": "country"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/lists/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"Trusted office IPs\",\n    \"description\": \"Office egress ranges\",\n    \"list_type\": \"allowlist\",\n    \"entry_type\": \"ip_address\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.lists.create(\n    name=\"Trusted office IPs\",\n    description=\"Office egress ranges\",\n    list_type=\"allowlist\",\n    entry_type=\"ip_address\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.lists.create({\n  name: \"Trusted office IPs\",\n  description: \"Office egress ranges\",\n  list_type: \"allowlist\",\n  entry_type: \"ip_address\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Create(ctx, didit.ListsCreateParams{\n\tName:        \"Trusted office IPs\",\n\tDescription: didit.String(\"Office egress ranges\"),\n\tListType:    \"allowlist\",\n\tEntryType:   \"ip_address\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.ListsCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.lists().create(ListsCreateParams.builder()\n        .name(\"Trusted office IPs\")\n        .description(\"Office egress ranges\")\n        .listType(ListsCreateParams.ListType.of(\"allowlist\"))\n        .entryType(ListsCreateParams.EntryType.of(\"ip_address\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->lists->create([\n    'name' => 'Trusted office IPs',\n    'description' => 'Office egress ranges',\n    'list_type' => 'allowlist',\n    'entry_type' => 'ip_address',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.lists.create(\n  name: \"Trusted office IPs\",\n  description: \"Office egress ranges\",\n  list_type: \"allowlist\",\n  entry_type: \"ip_address\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Lists.CreateAsync(new ListsCreateParams\n{\n    Name = \"Trusted office IPs\",\n    Description = \"Office egress ranges\",\n    ListType = \"allowlist\",\n    EntryType = \"ip_address\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "リストが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceList"
                },
                "examples": {
                  "New allowlist": {
                    "value": {
                      "uuid": "22222222-3333-4444-5555-666666666666",
                      "name": "Trusted office IPs",
                      "description": "Office egress ranges",
                      "list_type": "allowlist",
                      "entry_type": "ip_address",
                      "is_system": false,
                      "entry_count": 0,
                      "last_entry_added_at": null,
                      "created_at": "2026-10-12T09:15:44.031876Z",
                      "updated_at": "2026-10-12T09:15:44.031876Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ボディが無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Blocklist refused": {
                    "value": {
                      "list_type": [
                        "Cannot create additional blocklist lists. System blocklists are auto-created for each application."
                      ]
                    }
                  },
                  "Duplicate name": {
                    "value": {
                      "name": [
                        "A list with this name already exists for this application."
                      ]
                    }
                  },
                  "Missing fields": {
                    "value": {
                      "name": [
                        "This field is required."
                      ],
                      "list_type": [
                        "This field is required."
                      ],
                      "entry_type": [
                        "This field is required."
                      ]
                    }
                  },
                  "Unknown entry type": {
                    "value": {
                      "entry_type": [
                        "\"iban\" is not a valid choice."
                      ]
                    }
                  },
                  "Name too long": {
                    "value": {
                      "name": [
                        "Ensure this field has no more than 255 characters."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/lists/{list_uuid}/": {
      "get": {
        "summary": "リストを取得",
        "description": "アプリケーションのリストを1件、そのエントリー数と最新のエントリーが追加された日時とともに返します。別のアプリケーションのリスト、または削除されたリストの場合は`404`が返されます。このエンドポイントが返すのはリストのみです。リストの値を読み取るには[リストエントリーの一覧取得](https://docs.didit.me/ja/management-api/lists/list-entries)を使用してください。スコープ付きAPIキーには`workflows: read`が必要です。",
        "operationId": "get_list",
        "x-didit-sdk": {
          "resource": "lists",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "リストのUUIDです。List listsまたはCreate a listで返される値を指定します。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.lists.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.lists.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.lists().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->lists->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.lists.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Lists.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "リストです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceList"
                },
                "examples": {
                  "System face blocklist": {
                    "value": {
                      "uuid": "11111111-2222-3333-4444-555555555555",
                      "name": "Face Blocklist",
                      "description": "Blocked biometric faces. When a face matching an entry in this list is detected during liveness verification, the session will be automatically declined.",
                      "list_type": "blocklist",
                      "entry_type": "face",
                      "is_system": true,
                      "entry_count": 12,
                      "last_entry_added_at": "2026-10-09T16:42:03.118204Z",
                      "created_at": "2026-01-14T10:02:11.402917Z",
                      "updated_at": "2026-01-14T10:02:11.402917Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: read`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no read access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのリストがAPIキーのアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No List matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "APIキーあたり毎分600リクエストの共有読み取り制限を超えました。再試行する前に`Retry-After`に従ってください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "リストを更新",
        "description": "リストの名前または説明を変更します。読み取られるのは`name`と`description`のみで、その他のフィールドは無視されます。そのため、`list_type`と`entry_type`は作成時の値のまま変わりません。システムリストは変更できず、`400`を返します。レスポンスには`name`と`description`のみが含まれます。リスト全体を取得するには[リストを取得](https://docs.didit.me/ja/management-api/lists/get)を呼び出してください。スコープ付きAPIキーには`workflows: write`が必要です。",
        "operationId": "update_list",
        "x-didit-sdk": {
          "resource": "lists",
          "method": "update",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "リストのUUIDです。List listsまたはCreate a listで返される値を指定します。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255,
                    "description": "新しい名前。アプリケーション内の他のすべてのリストの名前と異なる必要があります。"
                  },
                  "description": {
                    "type": "string",
                    "description": "新しい説明。クリアするには空文字列を送信します。"
                  }
                }
              },
              "examples": {
                "Rename": {
                  "value": {
                    "name": "Trusted office and VPN IPs"
                  }
                },
                "Rename and describe": {
                  "value": {
                    "name": "Trusted office and VPN IPs",
                    "description": "Office egress ranges and the corporate VPN"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"name\": \"Trusted office and VPN IPs\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.lists.update(\n    \"11111111-2222-3333-4444-555555555555\",\n    name=\"Trusted office and VPN IPs\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.lists.update(\"11111111-2222-3333-4444-555555555555\", {\n  name: \"Trusted office and VPN IPs\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.ListsUpdateParams{\n\tName: didit.String(\"Trusted office and VPN IPs\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.ListsUpdateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.lists().update(\"11111111-2222-3333-4444-555555555555\", ListsUpdateParams.builder()\n        .name(\"Trusted office and VPN IPs\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->lists->update('11111111-2222-3333-4444-555555555555', [\n    'name' => 'Trusted office and VPN IPs',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.lists.update(\n  \"11111111-2222-3333-4444-555555555555\",\n  name: \"Trusted office and VPN IPs\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Lists.UpdateAsync(\"11111111-2222-3333-4444-555555555555\", new ListsUpdateParams\n{\n    Name = \"Trusted office and VPN IPs\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "リストが更新されました。編集可能なフィールドのみが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "description"
                  ],
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "更新後のリストの名前です。"
                    },
                    "description": {
                      "type": "string",
                      "description": "更新後のリストの説明です。"
                    }
                  }
                },
                "examples": {
                  "Renamed": {
                    "value": {
                      "name": "Trusted office and VPN IPs",
                      "description": "Office egress ranges"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "このリストはシステムリストであるか、本文が無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "System list": {
                    "value": {
                      "non_field_errors": [
                        "System lists cannot be modified."
                      ]
                    }
                  },
                  "Duplicate name": {
                    "value": {
                      "name": [
                        "A list with this name already exists for this application."
                      ]
                    }
                  },
                  "Blank name": {
                    "value": {
                      "name": [
                        "This field may not be blank."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのリストがAPIキーのアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No List matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "delete": {
        "summary": "リストを削除",
        "description": "許可リストまたはカスタムリストを、そのエントリとともに削除します。削除は元に戻せません。リストとそのエントリはどの読み取りにも表示されなくなり、以降、そのリストを参照するワークフローおよび取引ルールの条件は、それを空のリストとして評価します。すでに評価済みのセッションと取引は結果を保持し、その名前は新しいリストに再利用できます。システムリストは削除できず、`400`を返します。システムリストを空にするには、[そのエントリを削除](https://docs.didit.me/ja/management-api/lists/delete-entry)してください。スコープ付きAPIキーには`workflows: write`が必要です。",
        "operationId": "delete_list",
        "x-didit-sdk": {
          "resource": "lists",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "リストのUUIDです。List listsまたはCreate a listで返される値を指定します。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.lists.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.lists.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Lists.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.lists().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->lists->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.lists.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Lists.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ],
        "responses": {
          "204": {
            "description": "リストとそのエントリーが削除されました。本文はありません。"
          },
          "400": {
            "description": "このリストはシステムリストです。",
            "content": {
              "application/json": {
                "examples": {
                  "System list": {
                    "value": {
                      "detail": "System lists cannot be deleted."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのリストがAPIキーのアプリケーションに存在しないか、すでに削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No List matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/lists/{list_uuid}/entries/": {
      "get": {
        "summary": "リストのエントリを一覧表示",
        "description": "1つのリストの現在のエントリを新しい順に返します。`search`はエントリの`value`または`display_label`の一部に大文字と小文字を区別せずに一致し、`reference_session_id`は個人の認証セッション1件から取得したエントリに結果を絞り込みます。`metadata`内の画像URLは呼び出しのたびに再発行される有効期間の短い署名付きURLです。`media: read`を持たないスコープ付きAPIキーには、その代わりに`null`が返されます。スコープ付きAPIキーには`workflows: read`が必要です。",
        "operationId": "list_list_entries",
        "x-didit-sdk": {
          "resource": "lists.entries",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "リストのUUIDです。List listsまたはCreate a listで返される値を指定します。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "エントリーの`value`または`display_label`に含まれている必要がある、大文字・小文字を区別しないテキスト。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference_session_id",
            "in": "query",
            "required": false,
            "description": "この本人認証セッションから取得されたエントリのみ。例えば、そのセッションの顔のうちどれがすでに登録されているかを確認する場合に使用します。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "ページサイズ。デフォルトは50です。1000000を超える値は`400`を返します。0、負の値、数値以外の値の場合は50が使用されます。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "返す最初の項目の0始まりのインデックスです。`next`をたどる方法を推奨します。1000000を超える値は`400`を返し、負の値または数値以外の値は0として扱われます。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/entries/?search=example.com' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.lists.entries.list(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.lists.entries.list(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Lists.Entries.ListAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.ListsEntriesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.lists().entries().list(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->lists->entries->list('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.lists.entries.list(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Lists.Entries.ListAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "エントリーのページ（新しい順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "フィルターに一致するエントリーの総数。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ComplianceListEntry"
                      }
                    }
                  }
                },
                "examples": {
                  "Entries": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "bbbbbbbb-cccc-dddd-eeee-ffffffffffff",
                          "value": "X1234567",
                          "display_label": "Jane Doe - X1234567",
                          "comment": "",
                          "added_by": "api",
                          "reference_session_id": "33333333-4444-5555-6666-777777777777",
                          "reference_session_number": 1042,
                          "reference_session_type": "kyc",
                          "reference_object_uuid": "66666666-7777-8888-9999-000000000000",
                          "metadata": {
                            "full_name": "Jane Doe",
                            "issuing_state": "ESP",
                            "document_type": "ID",
                            "region": "",
                            "document_number": "X1234567"
                          },
                          "created_at": "2026-10-12T10:06:12.774915Z"
                        },
                        {
                          "uuid": "eeeeeeee-ffff-0000-1111-222222222222",
                          "value": "y7654321",
                          "display_label": "",
                          "comment": "Reported by a partner",
                          "added_by": "api",
                          "reference_session_id": null,
                          "reference_session_number": null,
                          "reference_session_type": null,
                          "reference_object_uuid": null,
                          "metadata": null,
                          "created_at": "2026-10-03T07:48:30.552810Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "クエリパラメーターが無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid session id": {
                    "value": {
                      "reference_session_id": [
                        "Must be a valid UUID."
                      ]
                    }
                  },
                  "Limit too large": {
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: read`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no read access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのリストがAPIキーのアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "List not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "APIキーあたり毎分600リクエストの共有読み取り制限を超えました。再試行する前に`Retry-After`に従ってください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "リストエントリを作成",
        "description": "リストにエントリを1件追加します。方法は3つあります。`value`で指定する方法、`reference_session_id`で検証セッションから追加する方法（Diditはリストのエントリ種別に対応するセッションの最新レコードから値を読み取り、エントリをそのレコードに紐付けます）、または`value`に加えて取引、ユーザー、企業を参照する`reference_object_uuid`と`metadata.reference_type`を指定する方法です。システムの顔、書類、電話番号、メールアドレスのブロックリストでは、セッションから読み取ったレコードもブロックリスト登録済みとしてフラグ付けされるため、一致する新規セッションは却下されます。システムのユーザーおよび企業のブロックリストでは、一致するユーザーまたは企業が`BLOCKED`に設定されます。すでに完了したセッションと取引は変更されません。スコープ付きAPIキーには`workflows: write`が必要です。各方法については[リストエントリの作成](https://docs.didit.me/ja/management-api/lists/create-entry)を参照してください。",
        "operationId": "create_list_entry",
        "x-didit-sdk": {
          "resource": "lists.entries",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "追加先のリストのUUIDです。画像としてしか持っていない顔の場合は、代わりにUpload a face to a listを使用してください。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "`value`、`reference_session_id`、またはその両方を送信します。適用されるフィールドはリストの`entry_type`によって異なります。",
                "properties": {
                  "value": {
                    "type": "string",
                    "description": "リストに追加する値。リストの`entry_type`に照らして検証されます。`email`は有効なメールアドレス、`phone`は有効な国際電話番号（E.164形式で保存）、`ip_address`はIPアドレスまたはCIDR範囲（例: `10.0.0.0/8`）、`device_fingerprint`は英字、数字、`-`、`_`、`:`、`.`からなる8文字以上（複数の異なるデバイスから報告されたフィンガープリントはブロックリストで拒否されます）、`country`はISO 3166-1 alpha-2またはalpha-3コード（alpha-3で保存）、`user`と`business`は`vendor_data`、その他のタイプは空でない文字列です。電話番号と国コードを除き小文字で保存され、リスト内で各値は1回のみ保持されます（大文字と小文字は区別しません）。`reference_session_id`を送信しない限り必須です。書類撮影の`face_image_source`を指定する場合は空のままにする必要があります。"
                  },
                  "reference_session_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "値の取得元となる、アプリケーションの個人または企業の認証セッション。Diditはそのセッションにおけるリストのエントリータイプ（`face`、`document`、`phone`、`email`、`ip_address`または`device_fingerprint`）の最新レコードを読み取り、エントリーをセッションとそのレコードに紐付け、書類の場合は`display_label`と`metadata`を入力します。`device_fingerprint`のブロックリストでは、デバイスクラスのフィンガープリントしか持たないセッション、または複数のデバイスで完了したセッションは拒否されます。正確なフィンガープリントを`value`として送信してください。その他のエントリータイプの場合、またはセッションに該当するレコードがない場合は、`value`も送信してください。その場合は送信した`value`が保存され、エントリーは引き続きセッションに紐付けられます。"
                  },
                  "reference_object_uuid": {
                    "type": "string",
                    "format": "uuid",
                    "description": "エントリーがセッションに由来しない場合に、そのエントリーが表すレコードのUUID。取引のUUID、またはユーザーや企業の`didit_internal_id`を指定します。`metadata.reference_type`と組み合わせて使用します。`reference_session_id`がレコードを提供する場合は、セッションのレコードで置き換えられます。"
                  },
                  "face_image_source": {
                    "type": "string",
                    "enum": [
                      "liveness",
                      "front_image_camera_front",
                      "back_image_camera_front"
                    ],
                    "default": "liveness",
                    "description": "`reference_session_id`を使用する顔リストの場合: セッションのどの画像から顔を取得するかを指定します。`liveness`（デフォルト）はライブネスのセルフィーです。`front_image_camera_front`と`back_image_camera_front`は、ユーザーが書類の表面または裏面を撮影している間にフロントカメラが撮影したセルフィーです。これらはシステムの顔ブロックリストでのみ、`reference_session_id`と空の`value`を指定した場合に受け付けられます。各セルフィーは1回のみ追加でき、鮮明な顔が1つ写っている必要があります。"
                  },
                  "reference_node_id": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 100,
                    "description": "書類撮影の`face_image_source`を使用する場合：本人確認ノードが複数あるワークフローで、セルフィーを使用する本人確認ノード。デフォルトは、その画像を持つ最新の本人確認です。`liveness`との併用は拒否されます。"
                  },
                  "display_label": {
                    "type": "string",
                    "maxLength": 512,
                    "description": "人が読めるラベル。空の場合、Diditは可能であればセッションから生成します（例：保有者の氏名と書類番号）。"
                  },
                  "comment": {
                    "type": "string",
                    "description": "掲載理由などの自由記述のメモ。"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "エントリとともに保存され、保存されたとおりに返される自由形式のJSON。コンソールが元のデータにリンクできるよう、`reference_type`と`reference_id`を使用してください。`reference_image_url`と`front_image_url`はDiditのみが設定するもので、送信しても破棄されます。セッションから読み込まれたエントリでは、Diditのキーがお客様のキーとマージされます。",
                    "properties": {
                      "reference_type": {
                        "type": "string",
                        "enum": [
                          "transaction",
                          "vendor_user",
                          "vendor_business"
                        ],
                        "description": "`reference_object_uuid`が指す対象。"
                      },
                      "reference_id": {
                        "type": "string",
                        "description": "ソースレコードの識別子。"
                      }
                    }
                  }
                }
              },
              "examples": {
                "By value": {
                  "value": {
                    "value": "+14155552671",
                    "comment": "Reported fraud"
                  }
                },
                "From a session": {
                  "value": {
                    "reference_session_id": "33333333-4444-5555-6666-777777777777"
                  }
                },
                "Face from a document-capture selfie": {
                  "value": {
                    "reference_session_id": "33333333-4444-5555-6666-777777777777",
                    "face_image_source": "front_image_camera_front"
                  }
                },
                "From a transaction": {
                  "value": {
                    "value": "0x52908400098527886E0F7030069857D2E4169EE7",
                    "reference_object_uuid": "55555555-6666-7777-8888-999999999999",
                    "comment": "Linked to a chargeback",
                    "metadata": {
                      "reference_type": "transaction",
                      "reference_id": "55555555-6666-7777-8888-999999999999"
                    }
                  }
                },
                "Country": {
                  "value": {
                    "value": "PRK",
                    "comment": "Sanctioned jurisdiction"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/entries/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"value\": \"+14155552671\", \"comment\": \"Reported fraud\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.lists.entries.create(\n    \"11111111-2222-3333-4444-555555555555\",\n    value=\"+14155552671\",\n    comment=\"Reported fraud\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.lists.entries.create(\"11111111-2222-3333-4444-555555555555\", {\n  value: \"+14155552671\",\n  comment: \"Reported fraud\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Entries.Create(ctx, \"11111111-2222-3333-4444-555555555555\", didit.ListsEntriesCreateParams{\n\tValue:   didit.String(\"+14155552671\"),\n\tComment: didit.String(\"Reported fraud\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.ListsEntriesCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.lists().entries().create(\"11111111-2222-3333-4444-555555555555\", ListsEntriesCreateParams.builder()\n        .value(\"+14155552671\")\n        .comment(\"Reported fraud\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->lists->entries->create('11111111-2222-3333-4444-555555555555', [\n    'value' => '+14155552671',\n    'comment' => 'Reported fraud',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.lists.entries.create(\n  \"11111111-2222-3333-4444-555555555555\",\n  value: \"+14155552671\",\n  comment: \"Reported fraud\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Lists.Entries.CreateAsync(\"11111111-2222-3333-4444-555555555555\", new ListsEntriesCreateParams\n{\n    Value = \"+14155552671\",\n    Comment = \"Reported fraud\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "エントリが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceListEntry"
                },
                "examples": {
                  "By value": {
                    "value": {
                      "uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                      "value": "+14155552671",
                      "display_label": "",
                      "comment": "Reported fraud",
                      "added_by": "api",
                      "reference_session_id": null,
                      "reference_session_number": null,
                      "reference_session_type": null,
                      "reference_object_uuid": null,
                      "metadata": null,
                      "created_at": "2026-10-12T10:04:51.220391Z"
                    }
                  },
                  "Document from a session": {
                    "value": {
                      "uuid": "bbbbbbbb-cccc-dddd-eeee-ffffffffffff",
                      "value": "X1234567",
                      "display_label": "Jane Doe - X1234567",
                      "comment": "",
                      "added_by": "api",
                      "reference_session_id": "33333333-4444-5555-6666-777777777777",
                      "reference_session_number": 1042,
                      "reference_session_type": "kyc",
                      "reference_object_uuid": "66666666-7777-8888-9999-000000000000",
                      "metadata": {
                        "full_name": "Jane Doe",
                        "issuing_state": "ESP",
                        "document_type": "ID",
                        "region": "",
                        "document_number": "X1234567"
                      },
                      "created_at": "2026-10-12T10:06:12.774915Z"
                    }
                  },
                  "From a transaction": {
                    "value": {
                      "uuid": "dddddddd-eeee-ffff-0000-111111111111",
                      "value": "0x52908400098527886e0f7030069857d2e4169ee7",
                      "display_label": "",
                      "comment": "Linked to a chargeback",
                      "added_by": "api",
                      "reference_session_id": null,
                      "reference_session_number": null,
                      "reference_session_type": null,
                      "reference_object_uuid": "55555555-6666-7777-8888-999999999999",
                      "metadata": {
                        "reference_type": "transaction",
                        "reference_id": "55555555-6666-7777-8888-999999999999"
                      },
                      "created_at": "2026-10-12T10:20:40.117062Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ボディが無効であるか、値がすでにリストに含まれているか、セッションから値を取得できません。",
            "content": {
              "application/json": {
                "examples": {
                  "Nothing to list": {
                    "value": {
                      "value": [
                        "Either 'value' or 'reference_session_id' must be provided."
                      ]
                    }
                  },
                  "Duplicate value": {
                    "value": {
                      "value": [
                        "An entry with this value already exists in this list."
                      ]
                    }
                  },
                  "Invalid phone": {
                    "value": {
                      "value": [
                        "Invalid phone number. Provide a valid international number (e.g. +1234567890)."
                      ]
                    }
                  },
                  "Invalid IP": {
                    "value": {
                      "value": [
                        "Invalid IP address or CIDR range (e.g. 192.168.1.1 or 10.0.0.0/24)."
                      ]
                    }
                  },
                  "Invalid country": {
                    "value": {
                      "value": [
                        "Invalid country code: XX. Provide a valid ISO 3166-1 alpha-2 or alpha-3 country code."
                      ]
                    }
                  },
                  "Device-class fingerprint": {
                    "value": {
                      "value": [
                        "This value is a device-class fingerprint: several distinct devices have reported it, so blocklisting it would decline unrelated people. Block the user by document, face, email or phone instead."
                      ]
                    }
                  },
                  "Unknown session": {
                    "value": {
                      "reference_session_id": [
                        "Session not found or does not belong to this application."
                      ]
                    }
                  },
                  "No data in session": {
                    "value": {
                      "value": [
                        "Either provide a 'value' or ensure the session contains data for this entry type."
                      ]
                    }
                  },
                  "Selfie on another list": {
                    "value": {
                      "face_image_source": [
                        "A document-capture selfie can only be added to the face blocklist."
                      ]
                    }
                  },
                  "No clear face in selfie": {
                    "value": {
                      "face_image_source": [
                        "No clear face was found in this selfie, so it cannot be blocklisted."
                      ]
                    }
                  },
                  "Selfie already listed": {
                    "value": {
                      "face_image_source": [
                        "This selfie is already in the blocklist."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのリストがAPIキーのアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "List not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          },
          "503": {
            "description": "書類撮影時のセルフィーの顔分析は一時的に利用できません。何も追加されていません。後で再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Unavailable": {
                    "value": {
                      "detail": "Service temporarily unavailable. Please try again later."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/lists/{list_uuid}/entries/{entry_uuid}/": {
      "delete": {
        "summary": "リストエントリを削除",
        "description": "リストからエントリを1件削除します。システムリストも対象です。エントリは直ちに一致しなくなり、削除は元に戻せません。値を再度リストに登録するには、新しいエントリを作成してください。システムの顔、書類、電話番号、メールアドレスのブロックリストでは、エントリが表すレコードはブロックリスト登録済みとしてフラグ付けされなくなります。システムのユーザーまたは企業のブロックリストでは、`vendor_data`がエントリの値と等しい(または`didit_internal_id`がエントリの`reference_object_uuid`と等しい)アプリケーションのユーザーまたは企業のうち、`BLOCKED`であるものが`ACTIVE`に戻ります。すでに完了したセッションと取引はステータスを保持します。スコープ付きAPIキーには`workflows: write`が必要です。",
        "operationId": "delete_list_entry",
        "x-didit-sdk": {
          "resource": "lists.entries",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "エントリーを保持するリストのUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "entry_uuid",
            "in": "path",
            "required": true,
            "description": "エントリーのUUIDです。List list entriesまたはCreate a list entryで返される値を指定します。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/entries/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.lists.entries.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.lists.entries.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\n);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Lists.Entries.Delete(ctx, \"11111111-2222-3333-4444-555555555555\", \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.lists().entries().delete(\"11111111-2222-3333-4444-555555555555\", \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->lists->entries->delete('11111111-2222-3333-4444-555555555555', 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.lists.entries.delete(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Lists.Entries.DeleteAsync(\"11111111-2222-3333-4444-555555555555\", \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\");"
          }
        ],
        "responses": {
          "204": {
            "description": "エントリが削除されました。本文はありません。"
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのエントリがこのリストに存在しないか、リストがAPIキーのアプリケーションに属していないか削除されているか、エントリがすでに削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No ListEntry matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/lists/{list_uuid}/entries/face-upload/": {
      "post": {
        "summary": "リストに顔をアップロード",
        "description": "参照できる検証セッションがない場合に、base64エンコードされたJPEGまたはPNG画像から、顔を顔ブロックリストまたは顔許可リストに追加します。Diditは画像内の顔を検出して最も大きい顔を使用し、`value`と`reference_object_uuid`が新しい顔のUUIDとなるエントリを作成します。ブロックリストに登録された顔は、顔が一致する新規セッションを却下します。許可リストに登録された顔は重複顔のアクションをスキップしますが、ブロックリストとの一致を上書きすることはありません。サンドボックスのアプリケーションでは画像は解析されず、エントリは何にも一致しません。スコープ付きAPIキーには`workflows: write`が必要です。既存のセッションの顔を登録するには、代わりに`reference_session_id`を指定して[リストエントリの作成](https://docs.didit.me/ja/management-api/lists/create-entry)を使用してください。",
        "operationId": "upload_list_entry_face",
        "x-didit-sdk": {
          "resource": "lists.entries",
          "method": "upload_face",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Lists"
        ],
        "parameters": [
          {
            "name": "list_uuid",
            "in": "path",
            "required": true,
            "description": "`entry_type: face`で、`list_type: blocklist`または`allowlist`であるリストのUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "image"
                ],
                "properties": {
                  "image": {
                    "type": "string",
                    "format": "byte",
                    "description": "Base64エンコードされたJPEGまたはPNG画像で、デコード後のサイズが最大2MB、かつ顔がはっきりと写っているものです。`data:image/...;base64,`プレフィックスを付けず、Base64文字列のみを送信してください。"
                  },
                  "comment": {
                    "type": "string",
                    "default": "",
                    "description": "登録理由など、任意の自由記述のメモです。"
                  }
                }
              },
              "examples": {
                "Face image": {
                  "value": {
                    "image": "/9j/4AAQSkZJRgABAQAAAQABAAD...",
                    "comment": "Known fraud attempt"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/entries/face-upload/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d \"{\\\"image\\\": \\\"$(base64 < face.jpg | tr -d '\\n')\\\", \\\"comment\\\": \\\"Known fraud attempt\\\"}\""
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.lists.entries.upload_face(\n    \"11111111-2222-3333-4444-555555555555\",\n    image=\"/9j/4AAQSkZJRgABAQAAAQABAAD...\",\n    comment=\"Known fraud attempt\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.lists.entries.uploadFace(\"11111111-2222-3333-4444-555555555555\", {\n  image: \"/9j/4AAQSkZJRgABAQAAAQABAAD...\",\n  comment: \"Known fraud attempt\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Entries.UploadFace(ctx, \"11111111-2222-3333-4444-555555555555\", didit.ListsEntriesUploadFaceParams{\n\tImage:   \"/9j/4AAQSkZJRgABAQAAAQABAAD...\",\n\tComment: didit.String(\"Known fraud attempt\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.ListsEntriesUploadFaceParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.lists().entries().uploadFace(\"11111111-2222-3333-4444-555555555555\", ListsEntriesUploadFaceParams.builder()\n        .image(\"/9j/4AAQSkZJRgABAQAAAQABAAD...\")\n        .comment(\"Known fraud attempt\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->lists->entries->uploadFace('11111111-2222-3333-4444-555555555555', [\n    'image' => '/9j/4AAQSkZJRgABAQAAAQABAAD...',\n    'comment' => 'Known fraud attempt',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.lists.entries.upload_face(\n  \"11111111-2222-3333-4444-555555555555\",\n  image: \"/9j/4AAQSkZJRgABAQAAAQABAAD...\",\n  comment: \"Known fraud attempt\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Lists.Entries.UploadFaceAsync(\"11111111-2222-3333-4444-555555555555\", new ListsEntriesUploadFaceParams\n{\n    Image = \"/9j/4AAQSkZJRgABAQAAAQABAAD...\",\n    Comment = \"Known fraud attempt\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "顔エントリが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceListEntry"
                },
                "examples": {
                  "Uploaded face": {
                    "value": {
                      "uuid": "cccccccc-dddd-eeee-ffff-000000000000",
                      "value": "44444444-5555-6666-7777-888888888888",
                      "display_label": "Manually uploaded face",
                      "comment": "Known fraud attempt",
                      "added_by": "api",
                      "reference_session_id": null,
                      "reference_session_number": null,
                      "reference_session_type": null,
                      "reference_object_uuid": "44444444-5555-6666-7777-888888888888",
                      "metadata": {
                        "reference_image_url": "https://media.example.com/faces/reference.jpg?expires=1760263938&signature=3f9a1c"
                      },
                      "created_at": "2026-10-12T10:12:18.904467Z"
                    }
                  },
                  "Sandbox application": {
                    "value": {
                      "uuid": "cccccccc-dddd-eeee-ffff-000000000000",
                      "value": "44444444-5555-6666-7777-888888888888",
                      "display_label": "Sandbox face entry",
                      "comment": "Known fraud attempt",
                      "added_by": "api",
                      "reference_session_id": null,
                      "reference_session_number": null,
                      "reference_session_type": null,
                      "reference_object_uuid": "44444444-5555-6666-7777-888888888888",
                      "metadata": {
                        "sandbox": true
                      },
                      "created_at": "2026-10-12T10:12:18.904467Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "このリストは顔のアップロードを受け付けないか、画像がない、無効、大きすぎる、または使用可能な顔が写っていません。エントリーは作成されていません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not a face list": {
                    "value": {
                      "detail": "Face upload is only available for face-type lists."
                    }
                  },
                  "Custom face list": {
                    "value": {
                      "detail": "Face upload is only available for face blocklists and allowlists."
                    }
                  },
                  "Missing image": {
                    "value": {
                      "image": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid base64": {
                    "value": {
                      "image": [
                        "Invalid base64 encoding."
                      ]
                    }
                  },
                  "Too large": {
                    "value": {
                      "image": [
                        "Image exceeds maximum size of 2 MB."
                      ]
                    }
                  },
                  "Unreadable image": {
                    "value": {
                      "image": "Invalid image. Provide a valid base64-encoded JPG or PNG."
                    }
                  },
                  "No face": {
                    "value": {
                      "image": "No face detected in the image. Please upload a clear photo with a visible face."
                    }
                  },
                  "No usable face": {
                    "value": {
                      "image": "Could not extract face embedding. Try a different image."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDのリストがAPIキーのアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "List not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          },
          "503": {
            "description": "顔分析は一時的に利用できません。エントリーは作成されていません。後で再試行してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Unavailable": {
                    "value": {
                      "detail": "Service temporarily unavailable. Please try again later."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/blocklist/": {
      "get": {
        "summary": "ブロックリストの項目一覧を取得",
        "description": "アプリケーションの認証セッションのうち、現在ブロックリストに登録されている顔、身分証明書類、電話番号、メールアドレスを、`blocklisted_at`の新しい順に1つのページ分割されたフィードで返します。`item_type`でフィルターできます。削除されたセッションの項目は含まれません。このフィードの対象は、セッションからブロックリストに登録されたレコード（[セッションの項目をブロックリストに追加](https://docs.didit.me/ja/management-api/blocklist/add)、コンソール、またはセッションから作成されたリストエントリによるもの）です。手動でリストに追加した値、アップロードされた顔、書類撮影時のセルフィーから取得した顔、およびその他のエントリタイプは[リストエントリの一覧取得](https://docs.didit.me/ja/management-api/lists/list-entries)で取得します。`face_image`と`front_image`は有効期間の短い署名付きURLで、`media: read`を持たないスコープ付きAPIキーには`null`が返されます。スコープ付きAPIキーには`workflows: read`が必要です。",
        "operationId": "list_blocklist_items",
        "x-didit-sdk": {
          "resource": "blocklist",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Blocklist"
        ],
        "parameters": [
          {
            "name": "item_type",
            "in": "query",
            "required": false,
            "description": "このタイプの項目のみ。省略した場合はすべてのタイプが返されます。",
            "schema": {
              "type": "string",
              "enum": [
                "face",
                "document",
                "phone",
                "email"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "ページサイズ。デフォルトは50です。1000000を超える値は`400`を返します。0、負の値、数値以外の値の場合は50が使用されます。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "返す最初の項目の0始まりのインデックスです。`next`をたどる方法を推奨します。1000000を超える値は`400`を返し、負の値または数値以外の値は0として扱われます。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/blocklist/?item_type=document' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.blocklist.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.blocklist.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Blocklist.ListAutoPaging(ctx, didit.BlocklistListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.blocklist().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->blocklist->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.blocklist.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Blocklist.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ブロックリストに登録された項目のページ（新しい順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "フィルターに一致するブロックリスト項目の総数。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/BlocklistedItem"
                      }
                    }
                  }
                },
                "examples": {
                  "Mixed feed": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "type": "document",
                          "session_id": "33333333-4444-5555-6666-777777777777",
                          "session_number": 1042,
                          "blocklisted_at": "2026-10-12T10:06:12.701553Z",
                          "face_image": null,
                          "document_type": "ID",
                          "document_number": "X1234567",
                          "front_image": "https://media.example.com/documents/front.jpg?expires=1760263938&signature=8b2e47",
                          "phone_number": null,
                          "country_code": null,
                          "email": null
                        },
                        {
                          "type": "phone",
                          "session_id": "77777777-8888-9999-0000-111111111111",
                          "session_number": 1017,
                          "blocklisted_at": "2026-10-08T15:31:09.400127Z",
                          "face_image": null,
                          "document_type": null,
                          "document_number": null,
                          "front_image": null,
                          "phone_number": "+14155552671",
                          "country_code": "US",
                          "email": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "クエリパラメーターが無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown item type": {
                    "value": {
                      "item_type": [
                        "\"wallet\" is not a valid choice."
                      ]
                    }
                  },
                  "Limit too large": {
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: read`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no read access to workflows."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "APIキーあたり毎分600リクエストの共有読み取り制限を超えました。再試行する前に`Retry-After`に従ってください。",
            "content": {
              "application/json": {
                "examples": {
                  "Rate limited": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/blocklist/add/": {
      "post": {
        "summary": "セッションの項目をブロックリストに追加",
        "description": "アプリケーションの本人確認セッション1件について、顔、身分証明書類、電話番号、またはメールアドレスをブロックリストに登録します。選択された種類ごとに、Diditはセッションの最新のレコードを取得してブロックリスト登録済みとしてフラグを付け、セッションに紐づくエントリを対応するシステムのブロックリストに追加します（`added_by: \"api\"`）。これにより、顔、書類番号、電話番号、またはメールアドレスが一致する新しいセッションは却下されます。選択されたすべての項目が最初にチェックされるため、1つでも欠けている場合は何もブロックリストに登録されません。すでに登録済みの項目に対して呼び出しを繰り返すと、エントリは1件のまま維持され、`blocklisted_at`が更新されます。セッション自体と、すでに完了したセッションは変更されません。スコープ付きのAPIキーには`workflows: write`が必要です。",
        "operationId": "add_to_blocklist",
        "x-didit-sdk": {
          "resource": "blocklist",
          "method": "add",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Blocklist"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "description": "少なくとも1つの`blocklist_*`フラグが`true`である必要があります。",
                "properties": {
                  "session_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "アプリケーションの個人認証セッション。削除済みのセッションは拒否されます。"
                  },
                  "blocklist_face": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションの顔をブロックリストに登録します。"
                  },
                  "blocklist_document": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションの身分証明書類をブロックリストに登録します。書類には発行国、書類の種類、書類番号、氏名が必要です。"
                  },
                  "blocklist_phone": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションの電話番号をブロックリストに登録します。"
                  },
                  "blocklist_email": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションのメールアドレスをブロックリストに登録します。"
                  }
                }
              },
              "examples": {
                "Face and document": {
                  "value": {
                    "session_id": "33333333-4444-5555-6666-777777777777",
                    "blocklist_face": true,
                    "blocklist_document": true
                  }
                },
                "Phone only": {
                  "value": {
                    "session_id": "33333333-4444-5555-6666-777777777777",
                    "blocklist_phone": true
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/blocklist/add/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"session_id\": \"33333333-4444-5555-6666-777777777777\",\n    \"blocklist_face\": true,\n    \"blocklist_document\": true\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.blocklist.add(\n    session_id=\"33333333-4444-5555-6666-777777777777\",\n    blocklist_face=True,\n    blocklist_document=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.blocklist.add({\n  session_id: \"33333333-4444-5555-6666-777777777777\",\n  blocklist_face: true,\n  blocklist_document: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Blocklist.Add(ctx, didit.BlocklistAddParams{\n\tSessionID:         \"33333333-4444-5555-6666-777777777777\",\n\tBlocklistFace:     didit.Bool(true),\n\tBlocklistDocument: didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BlocklistAddParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.blocklist().add(BlocklistAddParams.builder()\n        .sessionId(\"33333333-4444-5555-6666-777777777777\")\n        .blocklistFace(true)\n        .blocklistDocument(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->blocklist->add([\n    'session_id' => '33333333-4444-5555-6666-777777777777',\n    'blocklist_face' => true,\n    'blocklist_document' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.blocklist.add(\n  session_id: \"33333333-4444-5555-6666-777777777777\",\n  blocklist_face: true,\n  blocklist_document: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Blocklist.AddAsync(new BlocklistAddParams\n{\n    SessionId = \"33333333-4444-5555-6666-777777777777\",\n    BlocklistFace = true,\n    BlocklistDocument = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "選択した項目がブロックリストに追加されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "常に`Successfully updated blocklist.`です。"
                    }
                  }
                },
                "examples": {
                  "Blocklisted": {
                    "value": {
                      "message": "Successfully updated blocklist."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ボディが無効であるか、セッションがこのアプリケーションの検証セッションではないか、選択した種類の記録がセッションにありません。何もブロックリストに追加されていません。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown session": {
                    "value": {
                      "non_field_errors": [
                        "Session not found"
                      ]
                    }
                  },
                  "No item selected": {
                    "value": {
                      "non_field_errors": [
                        "Must specify at least one item to blocklist"
                      ]
                    }
                  },
                  "No face record": {
                    "value": {
                      "non_field_errors": [
                        "Session does not have a face record"
                      ]
                    }
                  },
                  "Incomplete document": {
                    "value": {
                      "non_field_errors": [
                        "To blocklist a document, the document must have an issuing state, document type, document number and full name"
                      ]
                    }
                  },
                  "Invalid session id": {
                    "value": {
                      "session_id": [
                        "Must be a valid UUID."
                      ]
                    }
                  },
                  "Missing session id": {
                    "value": {
                      "session_id": [
                        "This field is required."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/blocklist/remove/": {
      "post": {
        "summary": "セッション項目をブロックリストから削除する",
        "description": "アプリケーションの個人認証セッション1件について、顔、身分証明書類、電話番号、メールアドレスのブロックを解除します。選択した種類ごとに、Diditはそのセッションの最新のレコードを取得し、ブロックリスト登録フラグを解除して、そのレコードから作成されたシステムのブロックリストエントリを削除します。これにより、新規セッションが却下されなくなります。値を指定してリストに追加されたエントリは変更されません。[リストエントリの一覧取得](https://docs.didit.me/ja/management-api/lists/list-entries)で検索し、[リストエントリの削除](https://docs.didit.me/ja/management-api/lists/delete-entry)で削除してください。ブロックリストに登録されていないレコードのブロック解除は成功しますが、何も変更されません。また、すでに終了したセッションは変更されません。スコープ付きAPIキーには`workflows: write`が必要です。",
        "operationId": "remove_from_blocklist",
        "x-didit-sdk": {
          "resource": "blocklist",
          "method": "remove",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Blocklist"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "description": "少なくとも1つの`unblock_*`フラグが`true`である必要があります。",
                "properties": {
                  "session_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "アプリケーションの個人認証セッション。削除済みのセッションは拒否されます。"
                  },
                  "unblock_face": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションの顔に対するブロックを解除します。"
                  },
                  "unblock_document": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションの身分証明書類に対するブロックを解除します。"
                  },
                  "unblock_phone": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションの電話番号に対するブロックを解除します。"
                  },
                  "unblock_email": {
                    "type": "boolean",
                    "default": false,
                    "description": "セッションのメールアドレスに対するブロックを解除します。"
                  }
                }
              },
              "examples": {
                "Face and document": {
                  "value": {
                    "session_id": "33333333-4444-5555-6666-777777777777",
                    "unblock_face": true,
                    "unblock_document": true
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/blocklist/remove/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"session_id\": \"33333333-4444-5555-6666-777777777777\",\n    \"unblock_face\": true,\n    \"unblock_document\": true\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.blocklist.remove(\n    session_id=\"33333333-4444-5555-6666-777777777777\",\n    unblock_face=True,\n    unblock_document=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.blocklist.remove({\n  session_id: \"33333333-4444-5555-6666-777777777777\",\n  unblock_face: true,\n  unblock_document: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Blocklist.Remove(ctx, didit.BlocklistRemoveParams{\n\tSessionID:       \"33333333-4444-5555-6666-777777777777\",\n\tUnblockFace:     didit.Bool(true),\n\tUnblockDocument: didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.BlocklistRemoveParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.blocklist().remove(BlocklistRemoveParams.builder()\n        .sessionId(\"33333333-4444-5555-6666-777777777777\")\n        .unblockFace(true)\n        .unblockDocument(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->blocklist->remove([\n    'session_id' => '33333333-4444-5555-6666-777777777777',\n    'unblock_face' => true,\n    'unblock_document' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.blocklist.remove(\n  session_id: \"33333333-4444-5555-6666-777777777777\",\n  unblock_face: true,\n  unblock_document: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Blocklist.RemoveAsync(new BlocklistRemoveParams\n{\n    SessionId = \"33333333-4444-5555-6666-777777777777\",\n    UnblockFace = true,\n    UnblockDocument = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "選択した項目のブロックが解除されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "常に`Successfully removed from blocklist.`です。"
                    }
                  }
                },
                "examples": {
                  "Unblocked": {
                    "value": {
                      "message": "Successfully removed from blocklist."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ボディが無効であるか、セッションがこのアプリケーションの検証セッションではないか、選択した種類の記録がセッションにありません。何も変更されていません。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown session": {
                    "value": {
                      "non_field_errors": [
                        "Session not found"
                      ]
                    }
                  },
                  "No item selected": {
                    "value": {
                      "non_field_errors": [
                        "Must specify at least one item to unblock"
                      ]
                    }
                  },
                  "No email record": {
                    "value": {
                      "non_field_errors": [
                        "Session does not have an email record"
                      ]
                    }
                  },
                  "Invalid session id": {
                    "value": {
                      "session_id": [
                        "Must be a valid UUID."
                      ]
                    }
                  },
                  "Missing session id": {
                    "value": {
                      "session_id": [
                        "This field is required."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。その他の認証エラーでは`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`ヘッダーがありません（誤った、失効した、または期限切れのキーには`401`が返されます）。または、スコープ付きAPIキーに`workflows: write`がないか、許可リスト外のIPアドレスから使用されています。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without workflows access": {
                    "value": {
                      "detail": "This API key has no write access to workflows."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/": {
      "get": {
        "summary": "Webhook設定を取得",
        "description": "アプリケーションのWebhook設定を1回の呼び出しで返します。返される内容は、署名シークレットを含むすべての[Webhookの送信先](https://docs.didit.me/ja/management-api/webhook/list-destinations)、送信先がサブスクライブできるイベントタイプ、アプリケーションレベル（レガシー）のWebhook URL、バージョン、シークレット、データおよび生体認証テンプレートの保持ポリシー、Digital IDウォレットの戻り先ホストです。DiditはWebhookを送信先に配信し、各Webhookは配信先の送信先ごとに固有の`secret_shared_key`で署名されます。最上位の`webhook_url`、`webhook_version`、`secret_shared_key`は、有効な送信先が1つもない間のみ使用され、その場合も`status.updated`と`data.updated`に限られます。レスポンスには署名シークレットが含まれるため、ログやクライアント側のコードに含めないでください。スコープ付きのAPIキーには`webhooks: read`が必要です。",
        "operationId": "get_webhook_config",
        "x-didit-sdk": {
          "resource": "webhooks",
          "method": "retrieve_config",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/webhook/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.retrieve_config()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.retrieveConfig();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.RetrieveConfig(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().retrieveConfig();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->retrieveConfig();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.retrieve_config\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.RetrieveConfigAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "Webhookの設定。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookConfig"
                },
                "examples": {
                  "One destination": {
                    "value": {
                      "webhook_url": "https://yourapp.com/webhooks/didit",
                      "webhook_version": "v3",
                      "secret_shared_key": "dGhpcy1pcy10aGUtYXBwLWxldmVsLXNlY3JldC0wMDA",
                      "capture_method": "MOBILE",
                      "data_retention_months": 24,
                      "face_retention_policy": "delete_with_session",
                      "face_retention_days": null,
                      "biometric_consent_mode": "auto",
                      "available_events": [
                        {
                          "value": "status.updated",
                          "label": "Session status updated"
                        },
                        {
                          "value": "data.updated",
                          "label": "Session data updated"
                        },
                        {
                          "value": "user.status.updated",
                          "label": "User status updated"
                        },
                        {
                          "value": "user.data.updated",
                          "label": "User data updated"
                        },
                        {
                          "value": "business.status.updated",
                          "label": "Business status updated"
                        },
                        {
                          "value": "business.data.updated",
                          "label": "Business data updated"
                        },
                        {
                          "value": "activity.created",
                          "label": "Activity created"
                        },
                        {
                          "value": "transaction.created",
                          "label": "Transaction created"
                        },
                        {
                          "value": "transaction.status.updated",
                          "label": "Transaction status updated"
                        },
                        {
                          "value": "travel_rule.status.updated",
                          "label": "Travel Rule Status Updated"
                        },
                        {
                          "value": "workflow.compliance_changed",
                          "label": "Workflow Compliance Changed"
                        }
                      ],
                      "allowed_return_hosts": [
                        "shop.example.com"
                      ],
                      "endpoints": [
                        {
                          "uuid": "11111111-2222-3333-4444-555555555555",
                          "label": "Production session webhooks",
                          "url": "https://yourapp.com/webhooks/didit",
                          "enabled": true,
                          "webhook_version": "v3",
                          "secret_shared_key": "dGhpcy1pcy1hbi1leGFtcGxlLXNlY3JldC0wMDAwMDA",
                          "subscribed_events": [
                            "status.updated",
                            "data.updated"
                          ],
                          "created_at": "2026-01-04T08:00:00.000000Z",
                          "updated_at": "2026-04-22T14:09:11.523671Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、無効、または失効している場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権のないスコープ付きキーには不足しているアクセス権を示すメッセージが返され、IP許可リスト外から使用されたキーには`This API key can't be used from this IP address.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks read": {
                    "value": {
                      "detail": "This API key has no read access to webhooks."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内にGETリクエストが600件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（600）。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-get"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "patch": {
        "summary": "Webhook設定を更新",
        "description": "アプリケーションレベルの設定を部分的に更新します。対象は、従来のWebhook URL、バージョン、シークレット、データおよび生体認証テンプレートの保持ポリシー、Digital IDウォレットの戻り先ホストです。変更するフィールドのみを送信してください。レスポンスは`GET /v3/webhook/`と同じ形式の完全な設定です。送信先はここでは管理しません。`/v3/webhook/destinations/`エンドポイントで作成、更新、削除してください。また、このエンドポイントに`endpoints`フィールドを送信しないでください。`data_retention_months`の変更は既存のセッションにも適用され、それによって削除されたセッションは復元できません。先に[データ保持](https://docs.didit.me/ja/console/data-retention)をお読みください。スコープ付きAPIキーには`webhooks: write`が必要です。",
        "operationId": "update_webhook_config",
        "x-didit-sdk": {
          "resource": "webhooks",
          "method": "update_config",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "変更するフィールドのみを送信してください。送信先はここでは管理されません。",
                "properties": {
                  "webhook_url": {
                    "type": "string",
                    "format": "uri",
                    "nullable": true,
                    "maxLength": 2000,
                    "description": "レガシーのアプリケーションレベルのWebhook URL。Diditは、アプリケーションに有効な送信先がない間のみこのURLを使用し、その場合も`status.updated`と`data.updated`に限られます。このURLによって送信先が作成されることはなく、次に送信先を作成、更新、または削除するとこの値は置き換えられます。Webhookを受信するには、代わりに`POST /v3/webhook/destinations/`で送信先を作成してください。"
                  },
                  "webhook_version": {
                    "type": "string",
                    "enum": [
                      "v1",
                      "v2",
                      "v3"
                    ],
                    "description": "従来の`webhook_url`のペイロードバージョン。"
                  },
                  "rotate_secret_key": {
                    "type": "boolean",
                    "default": false,
                    "description": "`true`を指定すると、アプリケーションレベルの`secret_shared_key`を新しいランダムな値に即座に置き換えます。新しい値はレスポンスに含まれます。送信先のシークレットは変更されません。`true`を指定した呼び出しは毎回新しいシークレットを生成するため、冪等ではありません。"
                  },
                  "capture_method": {
                    "type": "string",
                    "enum": [
                      "MOBILE",
                      "MOBILE_AND_DESKTOP"
                    ],
                    "description": "レガシーのアプリケーション設定。認証フローではこの値は読み取られません。"
                  },
                  "data_retention_months": {
                    "type": "integer",
                    "nullable": true,
                    "minimum": 1,
                    "maximum": 120,
                    "description": "自動削除までの期間（月単位、1か月は30日として計算）。自動削除しない場合は`null`。変更は既存のセッションにも適用されます。新しい期間より古いユーザー認証セッションはすべて自動的に削除され、この削除は元に戻せません。"
                  },
                  "face_retention_policy": {
                    "type": "string",
                    "enum": [
                      "delete_with_session",
                      "retain_until_user_deleted"
                    ],
                    "description": "セッションの削除時に、そのセッションの顔エンベディングをどう扱うか。`retain_until_user_deleted`には、同じリクエストで指定するか設定済みの`face_retention_days`が必要です。変更はそれ以降のセッション削除に適用され、既存の生体認証テンプレートを作成または消去することはありません。"
                  },
                  "face_retention_days": {
                    "type": "integer",
                    "nullable": true,
                    "minimum": 1,
                    "maximum": 3650,
                    "description": "`retain_until_user_deleted`における生体認証テンプレートの保持期間（日数）。"
                  },
                  "biometric_consent_mode": {
                    "type": "string",
                    "enum": [
                      "auto",
                      "always",
                      "never"
                    ],
                    "description": "ホスト型フローとネイティブSDKが、顔の撮影前に本人へ生体認証についての明示的な同意を求める条件です。`auto`（デフォルト）は、トリガーに該当する場合にのみ同意を求めます。該当するのは、申告された州、本人のIP、または本人確認書類の発行元がイリノイ州、テキサス州、コロラド州のいずれかである場合、または州が不明なまま本人が米国にいると見られる場合です。`always`は、ワークフローで顔を撮影するすべての人に同意を求めます。`never`はこのステップを一切表示しないため、セルフィーの前にお客様自身で同意を取得する必要があります。変更はすべて監査ログに記録されます。詳しくは[生体認証の同意](https://docs.didit.me/ja/getting-started/biometric-consent)を参照してください。"
                  },
                  "allowed_return_hosts": {
                    "type": "array",
                    "maxItems": 20,
                    "description": "Digital IDウォレットの戻り先ホストのリスト全体を置き換えます。`shop.example.com`のようなホスト名のみを指定します。スキーム、ポート、パス、ワイルドカードは使用できません。値は小文字に変換され、重複は削除されます。リストをクリアするには`[]`を送信します。",
                    "items": {
                      "type": "string",
                      "maxLength": 253
                    }
                  },
                  "allowed_domains": {
                    "type": "array",
                    "maxItems": 50,
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "description": "許可されたオリジンのリスト全体を置き換えます。ホスト型検証フローを埋め込むことができ、セッションのコールバックでユーザーを戻すことができるオリジン(例:`https://app.example.com`。`http`は`localhost`の場合のみ)です。サーバー間の呼び出しには影響しません。空のリストは制限なしを意味します。Diditは各オリジンをデフォルトポートなしの小文字で保存します。無効なエントリは`allowed_domains`に対して`400`で失敗します。制限を解除するには`[]`を送信します。",
                    "example": [
                      "https://app.example.com"
                    ]
                  }
                }
              },
              "examples": {
                "Enable biometric template retention": {
                  "value": {
                    "face_retention_policy": "retain_until_user_deleted",
                    "face_retention_days": 365,
                    "biometric_consent_mode": "auto"
                  }
                },
                "Rotate the legacy secret": {
                  "value": {
                    "rotate_secret_key": true
                  }
                },
                "Set data retention": {
                  "value": {
                    "data_retention_months": 24
                  }
                },
                "Register return hosts": {
                  "value": {
                    "allowed_return_hosts": [
                      "shop.example.com",
                      "app.example.com"
                    ]
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/webhook/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"face_retention_policy\": \"retain_until_user_deleted\", \"face_retention_days\": 365}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.update_config(\n    face_retention_policy=\"retain_until_user_deleted\",\n    face_retention_days=365,\n    biometric_consent_mode=\"auto\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.updateConfig({\n  face_retention_policy: \"retain_until_user_deleted\",\n  face_retention_days: 365,\n  biometric_consent_mode: \"auto\",\n});\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.WebhooksUpdateConfigParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().updateConfig(WebhooksUpdateConfigParams.builder()\n        .faceRetentionPolicy(WebhooksUpdateConfigParams.FaceRetentionPolicy.of(\"retain_until_user_deleted\"))\n        .faceRetentionDays(365L)\n        .biometricConsentMode(WebhooksUpdateConfigParams.BiometricConsentMode.of(\"auto\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->updateConfig([\n    'face_retention_policy' => 'retain_until_user_deleted',\n    'face_retention_days' => 365,\n    'biometric_consent_mode' => 'auto',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.update_config(\n  face_retention_policy: \"retain_until_user_deleted\",\n  face_retention_days: 365,\n  biometric_consent_mode: \"auto\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.UpdateConfigAsync(new WebhooksUpdateConfigParams\n{\n    FaceRetentionPolicy = new WebhooksUpdateConfigParamsFaceRetentionPolicy(\"retain_until_user_deleted\"),\n    FaceRetentionDays = 365,\n    BiometricConsentMode = new WebhooksUpdateConfigParamsBiometricConsentMode(\"auto\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "更新後の設定全体で、`GET /v3/webhook/`と同じ形式です。シークレットをローテーションした場合は、レスポンスを破棄する前に新しい`secret_shared_key`を保存してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookConfig"
                },
                "examples": {
                  "Retention enabled": {
                    "value": {
                      "webhook_url": "https://yourapp.com/webhooks/didit",
                      "webhook_version": "v3",
                      "secret_shared_key": "dGhpcy1pcy10aGUtYXBwLWxldmVsLXNlY3JldC0wMDA",
                      "capture_method": "MOBILE",
                      "data_retention_months": 24,
                      "face_retention_policy": "retain_until_user_deleted",
                      "face_retention_days": 365,
                      "biometric_consent_mode": "auto",
                      "available_events": [
                        {
                          "value": "status.updated",
                          "label": "Session status updated"
                        },
                        {
                          "value": "data.updated",
                          "label": "Session data updated"
                        },
                        {
                          "value": "user.status.updated",
                          "label": "User status updated"
                        },
                        {
                          "value": "user.data.updated",
                          "label": "User data updated"
                        },
                        {
                          "value": "business.status.updated",
                          "label": "Business status updated"
                        },
                        {
                          "value": "business.data.updated",
                          "label": "Business data updated"
                        },
                        {
                          "value": "activity.created",
                          "label": "Activity created"
                        },
                        {
                          "value": "transaction.created",
                          "label": "Transaction created"
                        },
                        {
                          "value": "transaction.status.updated",
                          "label": "Transaction status updated"
                        },
                        {
                          "value": "travel_rule.status.updated",
                          "label": "Travel Rule Status Updated"
                        },
                        {
                          "value": "workflow.compliance_changed",
                          "label": "Workflow Compliance Changed"
                        }
                      ],
                      "allowed_return_hosts": [
                        "shop.example.com"
                      ],
                      "endpoints": [
                        {
                          "uuid": "11111111-2222-3333-4444-555555555555",
                          "label": "Production session webhooks",
                          "url": "https://yourapp.com/webhooks/didit",
                          "enabled": true,
                          "webhook_version": "v3",
                          "secret_shared_key": "dGhpcy1pcy1hbi1leGFtcGxlLXNlY3JldC0wMDAwMDA",
                          "subscribed_events": [
                            "status.updated",
                            "data.updated"
                          ],
                          "created_at": "2026-01-04T08:00:00.000000Z",
                          "updated_at": "2026-04-22T14:09:11.523671Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました。無効な各フィールドにメッセージのリストが対応付けられ、何も変更されません。有効なJSONでないボディは`{\"detail\": \"JSON parse error - ...\"}`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "無効な各フィールドと、それに対応するメッセージのリスト。",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Retention days missing": {
                    "value": {
                      "face_retention_days": [
                        "A finite retention duration is required when face retention is enabled."
                      ],
                      "biometric_consent_mode": "auto"
                    }
                  },
                  "Retention window out of range": {
                    "value": {
                      "data_retention_months": [
                        "Ensure this value is less than or equal to 120."
                      ]
                    }
                  },
                  "Invalid return host": {
                    "value": {
                      "allowed_return_hosts": [
                        "'https://shop.example.com' is not a hostname. Register the bare host (e.g. shop.example.com): no scheme, port, path or wildcard."
                      ]
                    }
                  },
                  "Invalid choice": {
                    "value": {
                      "face_retention_policy": [
                        "\"forever\" is not a valid choice."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、無効、または失効している場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権のないスコープ付きキーには不足しているアクセス権を示すメッセージが返され、IP許可リスト外から使用されたキーには`This API key can't be used from this IP address.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks write": {
                    "value": {
                      "detail": "This API key has no write access to webhooks."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内に書き込みリクエスト（POST、PATCH、PUT、DELETE）が300件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（300）。",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-write"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/destinations/{destination_uuid}/analytics/": {
      "get": {
        "summary": "Webhookの送信先の分析を取得",
        "description": "1つのWebhookの送信先について、期間全体（`summary`）およびUTC日ごと（`points`）の配信合計、失敗率、応答時間。すべての試行が配信としてカウントされます。イベントの初回送信、各自動[再試行](https://docs.didit.me/ja/integration/webhooks#再試行ポリシー)、各再送信が含まれます。記録されたHTTPステータスが400以上の場合、配信は失敗とみなされるため、タイムアウト（`504`として記録）と接続失敗（`503`）も失敗としてカウントされます。キューに残っている配信は`total_deliveries`にのみカウントされます。配信記録は約30日間利用できます。スコープ付きAPIキーには`webhooks: read`が必要です。",
        "operationId": "get_webhook_destination_analytics",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "retrieve_analytics",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "送信先のUUID (`GET /v3/webhook/destinations/`が返す`uuid`) です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "date_from",
            "in": "query",
            "required": false,
            "description": "対象に含める最初のUTC日を`YYYY-MM-DD`形式で指定します（この日を含みます）。省略すると、利用可能な最も古い配信から開始します。エイリアスとして`dateFrom`も使用できます。",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-10-01"
          },
          {
            "name": "date_to",
            "in": "query",
            "required": false,
            "description": "対象に含める最終日(UTC)。`YYYY-MM-DD`形式で指定します(当日を含む)。`date_from`より前の日付は指定できません。`dateTo`もエイリアスとして受け付けます。",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-10-16"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/analytics/?date_from=2026-10-01&date_to=2026-10-16' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.retrieve_analytics(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.retrieveAnalytics(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.RetrieveAnalytics(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WebhooksDestinationsRetrieveAnalyticsParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().retrieveAnalytics(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->retrieveAnalytics('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.destinations.retrieve_analytics(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.RetrieveAnalyticsAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "送信先の配信統計。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "summary",
                    "points"
                  ],
                  "properties": {
                    "summary": {
                      "type": "object",
                      "description": "リクエストした期間全体の合計。",
                      "required": [
                        "total_deliveries",
                        "failed_deliveries",
                        "min_response_time_ms",
                        "avg_response_time_ms",
                        "max_response_time_ms",
                        "error_rate_percentage"
                      ],
                      "properties": {
                        "total_deliveries": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "キューに入っているものを含む配信試行。"
                        },
                        "failed_deliveries": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "記録されたHTTPステータスが400以上の試行。"
                        },
                        "min_response_time_ms": {
                          "type": "integer",
                          "nullable": true,
                          "description": "最速の試行時間（ミリ秒）。時間が記録された試行がない場合は`null`です。"
                        },
                        "avg_response_time_ms": {
                          "type": "integer",
                          "nullable": true,
                          "description": "試行時間の平均値（ミリ秒、四捨五入）です。時間が記録された試行がない場合は`null`です。"
                        },
                        "max_response_time_ms": {
                          "type": "integer",
                          "nullable": true,
                          "description": "最も遅い試行の時間(ミリ秒)。時間が記録された試行がない場合は`null`です。"
                        },
                        "error_rate_percentage": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 100,
                          "description": "`failed_deliveries` / `total_deliveries` x 100を整数に丸めた値。配信がない場合は`0`。"
                        }
                      }
                    },
                    "points": {
                      "type": "array",
                      "description": "配信があったUTC日ごとに1エントリーで、古い順に並びます。配信のない日は省略されるため、グラフ化する際は欠けている日をゼロで埋めてください。",
                      "items": {
                        "type": "object",
                        "required": [
                          "date",
                          "total_deliveries",
                          "failed_deliveries",
                          "min_response_time_ms",
                          "avg_response_time_ms",
                          "max_response_time_ms"
                        ],
                        "properties": {
                          "date": {
                            "type": "string",
                            "format": "date",
                            "description": "UTCの日付(`YYYY-MM-DD`)。"
                          },
                          "total_deliveries": {
                            "type": "integer",
                            "minimum": 0,
                            "description": "キューに入っているものを含む配信試行。"
                          },
                          "failed_deliveries": {
                            "type": "integer",
                            "minimum": 0,
                            "description": "記録されたHTTPステータスが400以上の試行。"
                          },
                          "min_response_time_ms": {
                            "type": "integer",
                            "nullable": true,
                            "description": "最速の試行時間（ミリ秒）。時間が記録された試行がない場合は`null`です。"
                          },
                          "avg_response_time_ms": {
                            "type": "integer",
                            "nullable": true,
                            "description": "試行時間の平均値（ミリ秒、四捨五入）です。時間が記録された試行がない場合は`null`です。"
                          },
                          "max_response_time_ms": {
                            "type": "integer",
                            "nullable": true,
                            "description": "最も遅い試行の時間(ミリ秒)。時間が記録された試行がない場合は`null`です。"
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Three days of deliveries": {
                    "value": {
                      "summary": {
                        "total_deliveries": 1250,
                        "failed_deliveries": 12,
                        "min_response_time_ms": 38,
                        "avg_response_time_ms": 164,
                        "max_response_time_ms": 5004,
                        "error_rate_percentage": 1
                      },
                      "points": [
                        {
                          "date": "2026-10-14",
                          "total_deliveries": 410,
                          "failed_deliveries": 0,
                          "min_response_time_ms": 38,
                          "avg_response_time_ms": 152,
                          "max_response_time_ms": 911
                        },
                        {
                          "date": "2026-10-15",
                          "total_deliveries": 395,
                          "failed_deliveries": 12,
                          "min_response_time_ms": 41,
                          "avg_response_time_ms": 190,
                          "max_response_time_ms": 5004
                        },
                        {
                          "date": "2026-10-16",
                          "total_deliveries": 445,
                          "failed_deliveries": 0,
                          "min_response_time_ms": 40,
                          "avg_response_time_ms": 151,
                          "max_response_time_ms": 1220
                        }
                      ]
                    }
                  },
                  "No deliveries in range": {
                    "value": {
                      "summary": {
                        "total_deliveries": 0,
                        "failed_deliveries": 0,
                        "min_response_time_ms": null,
                        "avg_response_time_ms": null,
                        "max_response_time_ms": null,
                        "error_rate_percentage": 0
                      },
                      "points": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`date_from`または`date_to`が`YYYY-MM-DD`形式の日付ではないか、`date_to`が`date_from`より前です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "無効な各フィールドと、それに対応するメッセージのリスト。",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Malformed date": {
                    "value": {
                      "date_from": [
                        "Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
                      ]
                    }
                  },
                  "Reversed range": {
                    "value": {
                      "date_to": [
                        "date_to must be greater than or equal to date_from."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、無効、または失効している場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権のないスコープ付きキーには不足しているアクセス権を示すメッセージが返され、IP許可リスト外から使用されたキーには`This API key can't be used from this IP address.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks read": {
                    "value": {
                      "detail": "This API key has no read access to webhooks."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの送信先がアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Destination not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内にGETリクエストが600件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（600）。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-get"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/destinations/{destination_uuid}/deliveries/": {
      "get": {
        "summary": "Webhookの送信先への配信を一覧表示",
        "description": "1つのWebhookの送信先へのすべての配信試行を、新しい順にページ送りで取得します。各イベントの初回送信、各自動[再試行](https://docs.didit.me/ja/integration/webhooks#再試行ポリシー)、各再送信はそれぞれ別のエントリーになります。エントリーにはHTTPステータスとレスポンス時間が含まれますが、ペイロードは含まれません。ヘッダーと本文を確認するには、配信を1件取得してください。`count`は100までは正確で、それを超えると100と表示されるため、`next`が`null`になるまでたどってください。配信記録は約30日間利用できます。スコープ付きAPIキーには`webhooks: read`と`decisions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを使用できません。",
        "operationId": "list_webhook_destination_deliveries",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "list_deliveries",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "送信先のUUID (`GET /v3/webhook/destinations/`が返す`uuid`) です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1ページあたりの最大配信件数です。デフォルトは50です。正の整数でない値は50にフォールバックし、1000000を超える値は`400`を返します。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "example": 50
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "スキップする配信の数。デフォルトは0です。レスポンスの`next`および`previous`のURLをたどることを推奨します。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "example": 0
          },
          {
            "name": "date_from",
            "in": "query",
            "required": false,
            "description": "対象に含める最初のUTC日を`YYYY-MM-DD`形式で指定します（この日を含みます）。省略すると、利用可能な最も古い配信から開始します。エイリアスとして`dateFrom`も使用できます。",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-10-01"
          },
          {
            "name": "date_to",
            "in": "query",
            "required": false,
            "description": "対象に含める最終日(UTC)。`YYYY-MM-DD`形式で指定します(当日を含む)。`date_from`より前の日付は指定できません。`dateTo`もエイリアスとして受け付けます。",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-10-16"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/deliveries/?limit=50&date_from=2026-10-01' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.webhooks.destinations.list_deliveries(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.webhooks.destinations.listDeliveries(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Webhooks.Destinations.ListDeliveriesAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WebhooksDestinationsListDeliveriesParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.webhooks().destinations().listDeliveries(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->webhooks->destinations->listDeliveries('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.webhooks.destinations.list_deliveries(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Webhooks.Destinations.ListDeliveriesAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "配信の1ページ分です。新しい順に並びます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "一致する配信の件数です。100件までは正確な値で、それを超える場合は100で打ち切られます。さらにページがあるかどうかは`next`で確認してください。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WebhookDestinationDelivery"
                      }
                    }
                  }
                },
                "examples": {
                  "Failed delivery, its retry and a queued event": {
                    "value": {
                      "count": 3,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "66666666-7777-8888-9999-000000000003",
                          "session_id": null,
                          "request_url": "https://yourapp.com/webhooks/didit",
                          "response_status": null,
                          "response_time_ms": null,
                          "status": "APPROVED",
                          "webhook_type": "transaction.created",
                          "created_at": "2026-10-15T09:23:02.871190Z"
                        },
                        {
                          "uuid": "66666666-7777-8888-9999-000000000002",
                          "session_id": "22222222-3333-4444-5555-666666666666",
                          "request_url": "https://yourapp.com/webhooks/didit",
                          "response_status": 200,
                          "response_time_ms": 143,
                          "status": "In Progress",
                          "webhook_type": "status.updated",
                          "created_at": "2026-10-15T09:22:19.104233Z"
                        },
                        {
                          "uuid": "66666666-7777-8888-9999-000000000001",
                          "session_id": "22222222-3333-4444-5555-666666666666",
                          "request_url": "https://yourapp.com/webhooks/didit",
                          "response_status": 503,
                          "response_time_ms": 412,
                          "status": "In Progress",
                          "webhook_type": "status.updated",
                          "created_at": "2026-10-15T09:21:18.412345Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`date_from`または`date_to`が`YYYY-MM-DD`形式の日付ではない、`date_to`が`date_from`より前である、または`limit`か`offset`が1000000を超えています（このエラーはメッセージのJSON配列です）。",
            "content": {
              "application/json": {
                "examples": {
                  "Malformed date": {
                    "value": {
                      "date_from": [
                        "Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
                      ]
                    }
                  },
                  "Reversed range": {
                    "value": {
                      "date_to": [
                        "date_to must be greater than or equal to date_from."
                      ]
                    }
                  },
                  "Limit too large": {
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、無効、または失効している場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権を持たないスコープ付きキーの場合は、不足しているアクセス権を示すメッセージが返されます。IP許可リスト外から使用されたキーの場合は`This API key can't be used from this IP address.`が返されます。一部のワークフローまたは承認済みセッションに限定されたキーの場合は`This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks read": {
                    "value": {
                      "detail": "This API key has no read access to webhooks."
                    }
                  },
                  "Scoped key without decisions read": {
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの送信先がアプリケーションに存在しないか、削除されています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Destination not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内にGETリクエストが600件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（600）。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-get"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/destinations/{destination_uuid}/deliveries/{delivery_uuid}/": {
      "get": {
        "summary": "Webhookの送信先の配信を取得",
        "description": "Webhookの送信先への1回の配信試行を取得します。Diditが送信したリクエストヘッダーとJSONボディそのもの、エンドポイントが返したHTTPステータス、レスポンス時間が含まれます。`request_header`と`request_body`はJSONテキストです。これらをパースすると署名ヘッダーとペイロードを読み取れます。たとえば、送信先の`secret_shared_key`を使って[署名検証](https://docs.didit.me/ja/integration/webhooks#署名検証)を確認できます。配信に署名シークレットが含まれることはなく、Diditはエンドポイントのレスポンスボディを記録しません。スコープ付きAPIキーには`webhooks: read`と`decisions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを使用できません。",
        "operationId": "get_webhook_destination_delivery",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "retrieve_delivery",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "配信が送られた送信先のUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "delivery_uuid",
            "in": "path",
            "required": true,
            "description": "配信のUUIDで、`GET /v3/webhook/destinations/{destination_uuid}/deliveries/`が返すエントリーの`uuid`です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "66666666-7777-8888-9999-000000000001"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/deliveries/66666666-7777-8888-9999-000000000001/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.retrieve_delivery(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"66666666-7777-8888-9999-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.retrieveDelivery(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"66666666-7777-8888-9999-000000000001\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.RetrieveDelivery(ctx, \"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().retrieveDelivery(\"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->retrieveDelivery('11111111-2222-3333-4444-555555555555', '66666666-7777-8888-9999-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.destinations.retrieve_delivery(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"66666666-7777-8888-9999-000000000001\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.RetrieveDeliveryAsync(\"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "リクエストヘッダーとボディを含む配信です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDestinationDeliveryDetail"
                },
                "examples": {
                  "Connection failure": {
                    "value": {
                      "uuid": "66666666-7777-8888-9999-000000000001",
                      "session_id": "22222222-3333-4444-5555-666666666666",
                      "request_url": "https://yourapp.com/webhooks/didit",
                      "response_status": 503,
                      "response_time_ms": 412,
                      "status": "In Progress",
                      "webhook_type": "status.updated",
                      "created_at": "2026-10-15T09:21:18.412345Z",
                      "request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b\", \"X-Signature-V2\": \"927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5\", \"X-Signature-Simple\": \"e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302\", \"X-Timestamp\": \"1792056078\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
                      "request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792056078,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、無効、または失効している場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権を持たないスコープ付きキーの場合は、不足しているアクセス権を示すメッセージが返されます。IP許可リスト外から使用されたキーの場合は`This API key can't be used from this IP address.`が返されます。一部のワークフローまたは承認済みセッションに限定されたキーの場合は`This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks read": {
                    "value": {
                      "detail": "This API key has no read access to webhooks."
                    }
                  },
                  "Scoped key without decisions read": {
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "送信先がアプリケーションに存在しないか削除されています。または、配信が存在しない、別の送信先に属している、もしくは利用できなくなっています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Destination not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  },
                  "Delivery not found": {
                    "value": {
                      "detail": "Webhook delivery not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内にGETリクエストが600件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（600）。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-get"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/webhook/destinations/{destination_uuid}/deliveries/{delivery_uuid}/resend/": {
      "post": {
        "summary": "Webhookの送信先への配信を再送",
        "description": "過去の配信を再送します。たとえば、エンドポイントが停止していた後に使用します。Diditは保存されたペイロードを取得して新しい`timestamp`を設定し、送信先の現在の`secret_shared_key`で再度署名して（`X-Signature`、`X-Signature-V2`、`X-Signature-Simple`、`X-Timestamp`）、配信の`request_url`にPOSTします。送信先のURLがその後変更されていても、送信先が無効化されていても送信されます。`event_id`とペイロードのその他の部分は変わらないため、`event_id`で重複を排除してください。この呼び出しはエンドポイントの応答を最大5秒間待ち、エンドポイントの応答内容にかかわらず新しい配信を`200`で返します。`response_status`を確認してください。再送は自動的に再試行されず、呼び出すたびに再度送信されて新しい配信が作成されます。リクエストにボディはありません。スコープ付きAPIキーには`webhooks: write`と`decisions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを使用できません。",
        "operationId": "resend_webhook_destination_delivery",
        "x-didit-sdk": {
          "resource": "webhooks.destinations",
          "method": "resend_delivery",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "name": "destination_uuid",
            "in": "path",
            "required": true,
            "description": "配信が送られた送信先のUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "delivery_uuid",
            "in": "path",
            "required": true,
            "description": "再送する配信のUUIDで、`GET /v3/webhook/destinations/{destination_uuid}/deliveries/`が返すエントリーの`uuid`です。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "66666666-7777-8888-9999-000000000001"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/deliveries/66666666-7777-8888-9999-000000000001/resend/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.webhooks.destinations.resend_delivery(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"66666666-7777-8888-9999-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.webhooks.destinations.resendDelivery(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"66666666-7777-8888-9999-000000000001\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.ResendDelivery(ctx, \"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.webhooks().destinations().resendDelivery(\"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->webhooks->destinations->resendDelivery('11111111-2222-3333-4444-555555555555', '66666666-7777-8888-9999-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.webhooks.destinations.resend_delivery(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"66666666-7777-8888-9999-000000000001\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Webhooks.Destinations.ResendDeliveryAsync(\"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "すでに試行された新しい配信です。`response_status`は今回エンドポイントが返した値です(`504`はタイムアウト、`503`は接続失敗)。元の配信は変更されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDestinationDeliveryDetail"
                },
                "examples": {
                  "Accepted on resend": {
                    "value": {
                      "uuid": "66666666-7777-8888-9999-000000000004",
                      "session_id": "22222222-3333-4444-5555-666666666666",
                      "request_url": "https://yourapp.com/webhooks/didit",
                      "response_status": 200,
                      "response_time_ms": 151,
                      "status": "In Progress",
                      "webhook_type": "status.updated",
                      "created_at": "2026-10-16T14:05:42.330981Z",
                      "request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"b8eb1e376517ee0cad8ba98ff7f8fd35fc72eca231000963a96a335f82328835\", \"X-Signature-V2\": \"9efd2ce9ed1303e1d05273ef9608a59363ed9789a05253db4748b3e8e50cb109\", \"X-Signature-Simple\": \"bf3a9dc04b2c20ab539203b0cd5cca2a10f630bf62d8feb6d68d82af80f64774\", \"X-Timestamp\": \"1792159542\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
                      "request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792159542,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "保存された配信に再度署名できませんでした。何も送信されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string",
                      "description": "安定した機械可読エラーコード。`detail`ではなく、この値で分岐してください。"
                    }
                  }
                },
                "examples": {
                  "Unsignable delivery": {
                    "value": {
                      "detail": "Invalid webhook data format",
                      "code": "invalid_webhook_payload"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、無効、または失効している場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権を持たないスコープ付きキーの場合は、不足しているアクセス権を示すメッセージが返されます。IP許可リスト外から使用されたキーの場合は`This API key can't be used from this IP address.`が返されます。一部のワークフローまたは承認済みセッションに限定されたキーの場合は`This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks write": {
                    "value": {
                      "detail": "This API key has no write access to webhooks."
                    }
                  },
                  "Scoped key without decisions read": {
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "送信先がアプリケーションに存在しないか削除されています。または、配信が存在しない、別の送信先に属している、もしくは利用できなくなっています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Destination not found": {
                    "value": {
                      "detail": "Webhook destination not found."
                    }
                  },
                  "Delivery not found": {
                    "value": {
                      "detail": "Webhook delivery not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内に書き込みリクエスト（POST、PATCH、PUT、DELETE）が300件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（300）。",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-write"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/": {
      "get": {
        "summary": "モニタリングイベントを一覧表示",
        "description": "アプリケーションに保存されているモニタリングイベントを`occurred_at`の新しい順に一覧表示します。任意のフィルターはAND条件で組み合わされます。複数値フィルター(`event_category`、`action_type`、`status`、`retention_class`)はパラメーターを繰り返して指定し、いずれかの値に一致するイベントを返します。その他のフィルターは完全一致で、不明な値を指定した場合は単にイベントが返されません。各結果は概要です。ペイロード、デバイスコンテキスト、IPエンリッチメント、ルールの根拠を取得するには`GET /v3/events/{event_uuid}/`を呼び出してください。1つのサブジェクトの履歴には`GET /v3/events/subjects/{vendor_data}/`の使用を推奨します。読み取りは、イベント取り込みが有効かどうかにかかわらず機能します。スコープ付きAPIキーには`transactions: read`が必要です。[イベント取り込み](https://docs.didit.me/ja/transaction-monitoring/events)を参照してください。",
        "operationId": "list_monitoring_events",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1ページあたりの最大イベント数です。デフォルトは50です。1000000を超える値は`400`を返し、数値以外、0、または負の値は50にフォールバックします。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "example": 50
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "スキップするイベントの数。デフォルトは0です。レスポンスの`next`のURLをたどることを推奨します。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "example": 0
          },
          {
            "name": "event_category",
            "in": "query",
            "required": false,
            "description": "これらのカテゴリのイベントのみ。複数の値を指定するにはパラメーターを繰り返します（`?event_category=payment&event_category=dispute`）。いずれかに一致するイベントが返されます。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "auth",
                  "session",
                  "gameplay",
                  "bonus",
                  "affiliate",
                  "payment",
                  "dispute",
                  "security",
                  "responsible_gambling",
                  "custom"
                ]
              }
            },
            "example": [
              "payment",
              "dispute"
            ]
          },
          {
            "name": "action_type",
            "in": "query",
            "required": false,
            "description": "これらのアクションタイプ（完全一致、大文字と小文字を区別）のイベントのみ。複数の値を指定するには繰り返します。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "deposit_completed",
              "chargeback_opened"
            ]
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "これらのステータスのイベントのみ。複数の値を指定するには繰り返します。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ACCEPTED",
                  "APPROVED",
                  "IN_REVIEW",
                  "DECLINED"
                ]
              }
            },
            "example": [
              "IN_REVIEW",
              "DECLINED"
            ]
          },
          {
            "name": "retention_class",
            "in": "query",
            "required": false,
            "description": "これらの保持クラスのイベントのみ。複数の値を指定するには繰り返します。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "low_value",
                  "standard",
                  "risk_relevant",
                  "monetary_or_compliance"
                ]
              }
            },
            "example": [
              "risk_relevant"
            ]
          },
          {
            "name": "subject_vendor_data",
            "in": "query",
            "required": false,
            "description": "対象者の`vendor_data`との完全一致です。同じIDが個人と企業の両方を指す場合があります。いずれかを選ぶには`subject_entity_type`を追加するか、`GET /v3/events/subjects/{vendor_data}/`を使用してください。",
            "schema": {
              "type": "string"
            },
            "example": "user-42"
          },
          {
            "name": "subject_entity_type",
            "in": "query",
            "required": false,
            "description": "`company`は企業サブジェクトのイベントのみを返します。それ以外の空でない値（例：`individual`）は個人のイベントのみを返します。省略すると両方を返します。",
            "schema": {
              "type": "string",
              "enum": [
                "individual",
                "company"
              ]
            },
            "example": "individual"
          },
          {
            "name": "business_vendor_data",
            "in": "query",
            "required": false,
            "description": "イベントとともに送信された`business.vendor_data`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "merchant-7"
          },
          {
            "name": "session_id",
            "in": "query",
            "required": false,
            "description": "`session.session_id`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "web-session-abc"
          },
          {
            "name": "device_fingerprint",
            "in": "query",
            "required": false,
            "description": "`device_context.fingerprint`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "fp-a8c1"
          },
          {
            "name": "ip_address",
            "in": "query",
            "required": false,
            "description": "イベントのIPアドレスとの完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "203.0.113.42"
          },
          {
            "name": "game_id",
            "in": "query",
            "required": false,
            "description": "昇格済みの`game_id`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "poker-holdem-01"
          },
          {
            "name": "round_id",
            "in": "query",
            "required": false,
            "description": "昇格済みの`round_id`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "round-88231"
          },
          {
            "name": "affiliate_code",
            "in": "query",
            "required": false,
            "description": "昇格済みの`affiliate_code`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "aff-summer"
          },
          {
            "name": "payment_reference_id",
            "in": "query",
            "required": false,
            "description": "支払い参照（`transaction_context.payment_reference_id`または`payload.payment_reference_id`から取得）との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "dep_735"
          },
          {
            "name": "counterparty_vendor_data",
            "in": "query",
            "required": false,
            "description": "昇格済みの`counterparty_vendor_data`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "user-77"
          },
          {
            "name": "matched_only",
            "in": "query",
            "required": false,
            "description": "`true`（`1`または`yes`も可、大文字と小文字は区別しません）を指定すると、少なくとも1つのルールに一致したイベント（`rules_matched_count`が0より大きいもの）のみを返します。それ以外の値は無視されます。",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": true
          },
          {
            "name": "occurred_from",
            "in": "query",
            "required": false,
            "description": "`occurred_at`がこの時点以降（この時点を含む）のイベントのみ。ISO 8601形式の値を送信してください。`2026-10-01T00:00:00Z`、`+`をパーセントエンコードした明示的なオフセット（`2026-10-01T02:00:00%2B02:00`。エンコードされていない`+`はスペースとしてデコードされ、値を解析できなくなります）、または日付のみ（`2026-10-01`）で、日付のみの場合はその日の00:00:00 UTCを意味します。オフセットのない値はUTCとして解釈されます。その他の形式の値は受け付けません。",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "occurred_to",
            "in": "query",
            "required": false,
            "description": "`occurred_at`がこの時点以前（この時点を含む）のイベントのみ。日付のみの場合はその日の開始時刻を意味するため、`occurred_to=2026-10-15`では10月15日の残りの時間が除外されます。含めるには`2026-10-15T23:59:59Z`を送信してください。ISO 8601形式の値を送信してください。`2026-10-01T00:00:00Z`、`+`をパーセントエンコードした明示的なオフセット（`2026-10-01T02:00:00%2B02:00`。エンコードされていない`+`はスペースとしてデコードされ、値を解析できなくなります）、または日付のみ（`2026-10-01`）で、日付のみの場合はその日の00:00:00 UTCを意味します。オフセットのない値はUTCとして解釈されます。その他の形式の値は受け付けません。",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-10-17T23:59:59Z"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "`event_id`、`action_type`、`subject_vendor_data`、または`counterparty_vendor_data`に対する大文字・小文字を区別しない部分一致。",
            "schema": {
              "type": "string"
            },
            "example": "chargeback"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/events/?event_category=payment&event_category=dispute&matched_only=true&occurred_from=2026-10-01T00:00:00Z&limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.monitoring_events.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.monitoringEvents.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.MonitoringEvents.ListAutoPaging(ctx, didit.MonitoringEventsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.monitoringEvents().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->monitoringEvents->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.monitoring_events.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.MonitoringEvents.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "イベントサマリーの1ページ分です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitoringEventPage"
                },
                "examples": {
                  "Payment and dispute events": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "event_uuid": "11111111-2222-3333-4444-555555555555",
                          "event_id": "chargeback-2026-10-16-000318",
                          "event_category": "dispute",
                          "action_type": "chargeback_opened",
                          "occurred_at": "2026-10-16T14:02:11Z",
                          "received_at": "2026-10-16T14:02:12.418230Z",
                          "status": "IN_REVIEW",
                          "score": 60,
                          "subject_vendor_data": "user-42",
                          "subject_entity_type": "individual",
                          "subject_uuid": "66666666-7777-8888-9999-000000000000",
                          "counterparty_vendor_data": null,
                          "session_id": null,
                          "device_fingerprint": null,
                          "ip_address": null,
                          "ip_country": null,
                          "amount": "250.000000000000000000",
                          "currency": "EUR",
                          "game_id": null,
                          "round_id": null,
                          "bonus_id": null,
                          "affiliate_code": null,
                          "payment_reference_id": "dep_735",
                          "retention_class": "monetary_or_compliance",
                          "rules_matched_count": 1,
                          "correlation_pending": false,
                          "is_droppable": false
                        },
                        {
                          "event_uuid": "22222222-3333-4444-5555-666666666666",
                          "event_id": "login-2026-10-15-000912",
                          "event_category": "auth",
                          "action_type": "login",
                          "occurred_at": "2026-10-15T08:30:00.120000Z",
                          "received_at": "2026-10-15T08:30:00.734512Z",
                          "status": "ACCEPTED",
                          "score": 0,
                          "subject_vendor_data": "user-42",
                          "subject_entity_type": "individual",
                          "subject_uuid": "66666666-7777-8888-9999-000000000000",
                          "counterparty_vendor_data": null,
                          "session_id": "web-session-abc",
                          "device_fingerprint": "fp-a8c1",
                          "ip_address": "203.0.113.42",
                          "ip_country": "ES",
                          "amount": null,
                          "currency": null,
                          "game_id": null,
                          "round_id": null,
                          "bonus_id": null,
                          "affiliate_code": null,
                          "payment_reference_id": null,
                          "retention_class": "standard",
                          "rules_matched_count": 0,
                          "correlation_pending": false,
                          "is_droppable": true
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`limit`または`offset`が1000000より大きい値です。レスポンス本文はメッセージ1件を含むJSON配列です。数値でない、または正でない`limit`はエラーにならず、デフォルトの50が使われます。",
            "content": {
              "application/json": {
                "examples": {
                  "limit too large": {
                    "summary": "limitが1000000を超えている",
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  },
                  "offset too large": {
                    "summary": "offsetが1000000を超えている",
                    "value": [
                      "offset must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: read`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。`GET`リクエストは、APIキーごとに1分あたり600リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "モニタリングイベントを作成",
        "description": "非金銭イベント（ログイン、セッション、ゲームプレイ、ボーナス、アフィリエイト、決済、紛争、セキュリティ、責任あるギャンブル、またはカスタム）を1件、バックエンドから送信します。イベントはカテゴリーの契約に照らして検証されて保存され、一意のパブリックアドレスごとに1回IP情報が付加され、レスポンスが返る前にリアルタイムのイベントルールで評価されます。サブジェクト横断ルールと長期間ウィンドウのルールは非同期で実行され（`correlation_pending: true`）、サンドボックスのアプリケーションではルールは実行されません。`event_id`は冪等性キーです。同じ`event_id`で`event_category`、`action_type`、`occurred_at`、`subject.vendor_data`、`payload`も同じ場合は、`idempotent_replay: true`と保存済みの結果を含む`200`を返し（その他のエンベロープフィールドは比較されません）、値が異なる場合は`409`を返します。イベントの取り込みはアプリケーションごとのオプトインです。有効にするまで、このエンドポイントは`code: event_monitoring_disabled`付きの`403`を返し、何も保存しません。スコープ付きAPIキーには`transactions: write`が必要です。[イベントの取り込み](https://docs.didit.me/ja/transaction-monitoring/events)と[イベントに対するルール](https://docs.didit.me/ja/transaction-monitoring/event-rules)を参照してください。ブラウザーやアプリからイベントを送信するには、[SDKによるイベント送信](https://docs.didit.me/ja/transaction-monitoring/sdk-event-submission)を使用してください。",
        "operationId": "create_monitoring_event",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitoringEventCreateRequest"
              },
              "examples": {
                "Login": {
                  "value": {
                    "event_id": "login-2026-10-17-000001",
                    "event_category": "auth",
                    "action_type": "login",
                    "occurred_at": "2026-10-17T09:15:02.481Z",
                    "time_zone": "Europe/Madrid",
                    "subject": {
                      "vendor_data": "user-42",
                      "entity_type": "individual"
                    },
                    "session": {
                      "session_id": "web-session-abc",
                      "sequence": 142
                    },
                    "device_context": {
                      "fingerprint": "fp-a8c1",
                      "network_context": {
                        "ip_address": "203.0.113.42"
                      }
                    },
                    "payload": {
                      "method": "password"
                    },
                    "custom_values": {
                      "vip_tier": "gold"
                    }
                  }
                },
                "Deposit completed": {
                  "value": {
                    "event_id": "deposit-2026-10-17-000002",
                    "event_category": "payment",
                    "action_type": "deposit_completed",
                    "occurred_at": "2026-10-17T09:16:40Z",
                    "subject": {
                      "vendor_data": "user-42"
                    },
                    "transaction_context": {
                      "amount": "100.00",
                      "currency": "EUR",
                      "direction": "inbound",
                      "payment_reference_id": "dep_736"
                    },
                    "payload": {
                      "payment_method": "card",
                      "status": "completed"
                    }
                  }
                },
                "Chargeback opened": {
                  "value": {
                    "event_id": "chargeback-2026-10-16-000318",
                    "event_category": "dispute",
                    "action_type": "chargeback_opened",
                    "occurred_at": "2026-10-16T14:02:11Z",
                    "subject": {
                      "vendor_data": "user-42"
                    },
                    "payload": {
                      "payment_reference_id": "dep_735",
                      "chargeback_id": "cb_5521",
                      "amount": "250.00",
                      "currency": "EUR",
                      "reason_code": "fraud"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/events/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"event_id\": \"login-2026-10-17-000001\",\n    \"event_category\": \"auth\",\n    \"action_type\": \"login\",\n    \"occurred_at\": \"2026-10-17T09:15:02.481Z\",\n    \"subject\": {\"vendor_data\": \"user-42\", \"entity_type\": \"individual\"},\n    \"session\": {\"session_id\": \"web-session-abc\", \"sequence\": 142},\n    \"device_context\": {\n      \"fingerprint\": \"fp-a8c1\",\n      \"network_context\": {\"ip_address\": \"203.0.113.42\"}\n    },\n    \"payload\": {\"method\": \"password\"}\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.monitoring_events.create(\n    event_id=\"login-2026-10-17-000001\",\n    event_category=\"auth\",\n    action_type=\"login\",\n    occurred_at=\"2026-10-17T09:15:02.481Z\",\n    time_zone=\"Europe/Madrid\",\n    subject={\n        \"vendor_data\": \"user-42\",\n        \"entity_type\": \"individual\",\n    },\n    session={\n        \"session_id\": \"web-session-abc\",\n        \"sequence\": 142,\n    },\n    device_context={\n        \"fingerprint\": \"fp-a8c1\",\n        \"network_context\": {\n            \"ip_address\": \"203.0.113.42\",\n        },\n    },\n    payload={\"method\": \"password\"},\n    custom_values={\"vip_tier\": \"gold\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.monitoringEvents.create({\n  event_id: \"login-2026-10-17-000001\",\n  event_category: \"auth\",\n  action_type: \"login\",\n  occurred_at: \"2026-10-17T09:15:02.481Z\",\n  time_zone: \"Europe/Madrid\",\n  subject: {\n    vendor_data: \"user-42\",\n    entity_type: \"individual\",\n  },\n  session: {\n    session_id: \"web-session-abc\",\n    sequence: 142,\n  },\n  device_context: {\n    fingerprint: \"fp-a8c1\",\n    network_context: {\n      ip_address: \"203.0.113.42\",\n    },\n  },\n  payload: { method: \"password\" },\n  custom_values: { vip_tier: \"gold\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.MonitoringEvents.Create(ctx, didit.MonitoringEventCreateRequest{\n\tEventID:       \"login-2026-10-17-000001\",\n\tEventCategory: \"auth\",\n\tActionType:    \"login\",\n\tOccurredAt:    time.Date(2026, 10, 17, 9, 15, 2, 0, time.UTC),\n\tTimeZone:      didit.String(\"Europe/Madrid\"),\n\tSubject: didit.MonitoringEventCreateRequestSubject{\n\t\tVendorData: \"user-42\",\n\t\tEntityType: didit.String(\"individual\"),\n\t},\n\tSession: didit.Some(didit.MonitoringEventCreateRequestSession{\n\t\tSessionID: didit.String(\"web-session-abc\"),\n\t\tSequence:  didit.Int(142),\n\t}),\n\tDeviceContext: didit.Some(didit.MonitoringEventCreateRequestDeviceContext{\n\t\tFingerprint: didit.String(\"fp-a8c1\"),\n\t\tNetworkContext: didit.Some(didit.MonitoringEventCreateRequestDeviceContextNetworkContext{\n\t\t\tIPAddress: didit.String(\"203.0.113.42\"),\n\t\t}),\n\t}),\n\tPayload:      didit.Some(map[string]any{\"method\": \"password\"}),\n\tCustomValues: didit.Some(map[string]any{\"vip_tier\": \"gold\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.OffsetDateTime;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.MonitoringEventCreateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.monitoringEvents().create(MonitoringEventCreateRequest.builder()\n        .eventId(\"login-2026-10-17-000001\")\n        .eventCategory(MonitoringEventCreateRequest.EventCategory.of(\"auth\"))\n        .actionType(\"login\")\n        .occurredAt(OffsetDateTime.parse(\"2026-10-17T09:15:02.481Z\"))\n        .timeZone(\"Europe/Madrid\")\n        .subject(MonitoringEventCreateRequest.Subject.builder()\n                .vendorData(\"user-42\")\n                .entityType(\"individual\")\n                .build())\n        .session(MonitoringEventCreateRequest.Session.builder()\n                .sessionId(\"web-session-abc\")\n                .sequence(142L)\n                .build())\n        .deviceContext(MonitoringEventCreateRequest.DeviceContext.builder()\n                .fingerprint(\"fp-a8c1\")\n                .networkContext(MonitoringEventCreateRequest.DeviceContext.NetworkContext.builder()\n                        .ipAddress(\"203.0.113.42\")\n                        .build())\n                .build())\n        .payload(Map.of(\"method\", \"password\"))\n        .customValues(Map.of(\"vip_tier\", MonitoringEventCreateRequest.CustomValuesValue.ofString(\"gold\")))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->monitoringEvents->create([\n    'event_id' => 'login-2026-10-17-000001',\n    'event_category' => 'auth',\n    'action_type' => 'login',\n    'occurred_at' => '2026-10-17T09:15:02.481Z',\n    'time_zone' => 'Europe/Madrid',\n    'subject' => [\n        'vendor_data' => 'user-42',\n        'entity_type' => 'individual',\n    ],\n    'session' => [\n        'session_id' => 'web-session-abc',\n        'sequence' => 142,\n    ],\n    'device_context' => [\n        'fingerprint' => 'fp-a8c1',\n        'network_context' => [\n            'ip_address' => '203.0.113.42',\n        ],\n    ],\n    'payload' => ['method' => 'password'],\n    'custom_values' => ['vip_tier' => 'gold'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.monitoring_events.create(\n  event_id: \"login-2026-10-17-000001\",\n  event_category: \"auth\",\n  action_type: \"login\",\n  occurred_at: \"2026-10-17T09:15:02.481Z\",\n  time_zone: \"Europe/Madrid\",\n  subject: {\n    vendor_data: \"user-42\",\n    entity_type: \"individual\",\n  },\n  session: {\n    session_id: \"web-session-abc\",\n    sequence: 142,\n  },\n  device_context: {\n    fingerprint: \"fp-a8c1\",\n    network_context: {\n      ip_address: \"203.0.113.42\",\n    },\n  },\n  payload: { method: \"password\" },\n  custom_values: { vip_tier: \"gold\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.MonitoringEvents.CreateAsync(new MonitoringEventCreateRequest\n{\n    EventId = \"login-2026-10-17-000001\",\n    EventCategory = \"auth\",\n    ActionType = \"login\",\n    OccurredAt = DateTimeOffset.Parse(\"2026-10-17T09:15:02.481Z\"),\n    TimeZone = \"Europe/Madrid\",\n    Subject = new()\n    {\n        VendorData = \"user-42\",\n        EntityType = \"individual\",\n    },\n    Session = new MonitoringEventCreateRequestSession\n    {\n        SessionId = \"web-session-abc\",\n        Sequence = 142,\n    },\n    DeviceContext = new MonitoringEventCreateRequestDeviceContext\n    {\n        Fingerprint = \"fp-a8c1\",\n        NetworkContext = new MonitoringEventCreateRequestDeviceContextNetworkContext\n        {\n            IpAddress = \"203.0.113.42\",\n        },\n    },\n    Payload = new Dictionary<string, object> { [\"method\"] = \"password\" },\n    CustomValues = new Dictionary<string, object> { [\"vip_tier\"] = \"gold\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "イベントが保存され、評価されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitoringEventIngestResult"
                },
                "examples": {
                  "Stored, no rule matched": {
                    "value": {
                      "event_uuid": "33333333-4444-5555-6666-777777777777",
                      "event_id": "login-2026-10-17-000001",
                      "status": "ACCEPTED",
                      "score": 0,
                      "rules_evaluated_count": 6,
                      "rules_matched_count": 0,
                      "correlation_pending": false,
                      "retention_class": "standard",
                      "expires_at": "2026-11-16T09:15:02.481000Z",
                      "idempotent_replay": false,
                      "rule_matches": []
                    }
                  },
                  "Rule matched, async rule pending": {
                    "value": {
                      "event_uuid": "33333333-4444-5555-6666-777777777777",
                      "event_id": "login-2026-10-17-000001",
                      "status": "IN_REVIEW",
                      "score": 40,
                      "rules_evaluated_count": 6,
                      "rules_matched_count": 1,
                      "correlation_pending": true,
                      "retention_class": "risk_relevant",
                      "expires_at": "2027-01-15T09:15:02.481000Z",
                      "idempotent_replay": false,
                      "rule_matches": [
                        {
                          "rule_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                          "library_key": null,
                          "mode": "ACTIVE",
                          "is_async": false
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "冪等なリプレイ: この`event_id`と同じ内容のイベントはすでに保存されています。再度の保存や評価は行われていません。本文は保存済みのイベントを表します。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitoringEventIngestResult"
                },
                "examples": {
                  "Replay": {
                    "value": {
                      "event_uuid": "33333333-4444-5555-6666-777777777777",
                      "event_id": "login-2026-10-17-000001",
                      "status": "ACCEPTED",
                      "score": 0,
                      "rules_evaluated_count": 6,
                      "rules_matched_count": 0,
                      "correlation_pending": false,
                      "retention_class": "standard",
                      "expires_at": "2026-11-16T09:15:02.481000Z",
                      "idempotent_replay": true,
                      "rule_matches": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました。ボディはフィールドをキーとし、ネストされたフィールドはネストされたオブジェクトになります。何も保存されません。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing fields": {
                    "value": {
                      "event_id": [
                        "This field is required."
                      ],
                      "subject": [
                        "This field is required."
                      ]
                    }
                  },
                  "Unknown category": {
                    "value": {
                      "event_category": [
                        "\"login\" is not a valid choice."
                      ]
                    }
                  },
                  "occurred_at too old": {
                    "value": {
                      "occurred_at": [
                        "occurred_at is more than 7 days in the past. Use the batch import lane for backfills."
                      ]
                    }
                  },
                  "occurred_at in the future": {
                    "value": {
                      "occurred_at": [
                        "occurred_at is more than 5 minutes in the future."
                      ]
                    }
                  },
                  "Missing subject vendor_data": {
                    "value": {
                      "subject": {
                        "vendor_data": [
                          "This field is required."
                        ]
                      }
                    }
                  },
                  "Missing required payload keys": {
                    "value": {
                      "payload": [
                        "payment.deposit_completed requires: payment_method, status."
                      ]
                    }
                  },
                  "Missing one-of payload key": {
                    "value": {
                      "payload": [
                        "dispute.chargeback_opened requires one of: dispute_id, chargeback_id."
                      ]
                    }
                  },
                  "Security change without changed_field": {
                    "value": {
                      "payload": [
                        "security.*_changed requires 'changed_field'."
                      ]
                    }
                  },
                  "Payload too large": {
                    "value": {
                      "payload": [
                        "payload exceeds 16384 bytes. Summarise telemetry client-side."
                      ]
                    }
                  },
                  "Too many custom_values": {
                    "value": {
                      "custom_values": [
                        "custom_values accepts at most 100 keys."
                      ]
                    }
                  },
                  "Nested custom value": {
                    "value": {
                      "custom_values": [
                        "custom_values['limits'] must be a scalar - rule conditions cannot address nested values."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: write`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。アプリケーションでイベントの取り込みが無効になっている間も`code: event_monitoring_disabled`とともに返されます。その場合は何も保存されず、このチェックはリクエストボディの検証前に実行されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Event monitoring disabled": {
                    "value": {
                      "detail": "Event monitoring is not enabled for this application. Turn on event ingestion in the transaction monitoring settings before submitting events.",
                      "code": "event_monitoring_disabled"
                    }
                  },
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no write access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "この`event_id`は、内容（カテゴリー、アクションタイプ、`occurred_at`、対象の`vendor_data`、またはペイロード）が異なるイベントですでに使用されています。新しい`event_id`でイベントを送信してください。",
            "content": {
              "application/json": {
                "examples": {
                  "event_id reused": {
                    "value": {
                      "event_id": "event_id 'login-2026-10-17-000001' already exists with a different payload."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込みリクエスト（`POST`、`PATCH`、`DELETE`）は、APIキーごとに1分あたり300リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/batch/": {
      "post": {
        "summary": "モニタリングイベントを一括作成",
        "description": "1〜500件のイベントを1回のリクエストで送信します。各イベントは`POST /v3/events/`と同じエンベロープ形式です。各項目は個別に検証、保存、評価され、それぞれ独自の結果（`accepted`、`replayed`、`rejected`）を受け取ります。そのため、不正な形式のイベントが1件あっても、他のイベントがロールバックされることはありません。拒否された項目がない場合のレスポンスは`201`、1件以上ある場合は`207`となり、どちらもリクエストが処理されたことを意味します。`{\"events\": [...]}`を送信してください。イベントのJSON配列をそのまま送ることもできます。アプリケーションでイベント取り込みを有効にする必要があります。有効でない場合、リクエスト全体が`code: event_monitoring_disabled`とともに`403`を返し、何も保存されません。スコープ付きAPIキーには`transactions: write`が必要です。詳しくは[バッチ](https://docs.didit.me/ja/transaction-monitoring/events#バッチ)を参照してください。",
        "operationId": "create_monitoring_events_batch",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "create_batch",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "events"
                ],
                "properties": {
                  "events": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 500,
                    "description": "1〜500件のイベント。各項目は`MonitoringEventCreateRequest`に従い、`occurred_at`に対する過去7日間・未来5分間の範囲制限も適用されます。",
                    "items": {
                      "$ref": "#/components/schemas/MonitoringEventCreateRequest"
                    }
                  }
                }
              },
              "example": {
                "events": [
                  {
                    "event_id": "login-2026-10-17-000001",
                    "event_category": "auth",
                    "action_type": "login",
                    "occurred_at": "2026-10-17T09:15:02.481Z",
                    "subject": {
                      "vendor_data": "user-42"
                    }
                  },
                  {
                    "event_id": "deposit-2026-10-17-000002",
                    "event_category": "payment",
                    "action_type": "deposit_completed",
                    "occurred_at": "2026-10-17T09:16:40Z",
                    "subject": {
                      "vendor_data": "user-42"
                    },
                    "transaction_context": {
                      "amount": "100.00",
                      "currency": "EUR",
                      "payment_reference_id": "dep_736"
                    },
                    "payload": {
                      "payment_method": "card",
                      "status": "completed"
                    }
                  }
                ]
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/events/batch/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"events\": [\n      {\"event_id\": \"login-2026-10-17-000001\", \"event_category\": \"auth\", \"action_type\": \"login\",\n       \"occurred_at\": \"2026-10-17T09:15:02.481Z\", \"subject\": {\"vendor_data\": \"user-42\"}},\n      {\"event_id\": \"deposit-2026-10-17-000002\", \"event_category\": \"payment\", \"action_type\": \"deposit_completed\",\n       \"occurred_at\": \"2026-10-17T09:16:40.000Z\", \"subject\": {\"vendor_data\": \"user-42\"},\n       \"transaction_context\": {\"amount\": \"100.00\", \"currency\": \"EUR\", \"payment_reference_id\": \"dep_736\"},\n       \"payload\": {\"payment_method\": \"card\", \"status\": \"completed\"}}\n    ]\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.monitoring_events.create_batch(\n    events=[{\n        \"event_id\": \"login-2026-10-17-000001\",\n        \"event_category\": \"auth\",\n        \"action_type\": \"login\",\n        \"occurred_at\": \"2026-10-17T09:15:02.481Z\",\n        \"subject\": {\n            \"vendor_data\": \"user-42\",\n        },\n    }, {\n        \"event_id\": \"deposit-2026-10-17-000002\",\n        \"event_category\": \"payment\",\n        \"action_type\": \"deposit_completed\",\n        \"occurred_at\": \"2026-10-17T09:16:40Z\",\n        \"subject\": {\n            \"vendor_data\": \"user-42\",\n        },\n        \"transaction_context\": {\n            \"amount\": \"100.00\",\n            \"currency\": \"EUR\",\n            \"payment_reference_id\": \"dep_736\",\n        },\n        \"payload\": {\"payment_method\": \"card\", \"status\": \"completed\"},\n    }],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.monitoringEvents.createBatch({\n  events: [{\n    event_id: \"login-2026-10-17-000001\",\n    event_category: \"auth\",\n    action_type: \"login\",\n    occurred_at: \"2026-10-17T09:15:02.481Z\",\n    subject: {\n      vendor_data: \"user-42\",\n    },\n  }, {\n    event_id: \"deposit-2026-10-17-000002\",\n    event_category: \"payment\",\n    action_type: \"deposit_completed\",\n    occurred_at: \"2026-10-17T09:16:40Z\",\n    subject: {\n      vendor_data: \"user-42\",\n    },\n    transaction_context: {\n      amount: \"100.00\",\n      currency: \"EUR\",\n      payment_reference_id: \"dep_736\",\n    },\n    payload: { payment_method: \"card\", status: \"completed\" },\n  }],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.MonitoringEvents.CreateBatch(ctx, didit.MonitoringEventsCreateBatchParams{\n\tEvents: []didit.MonitoringEventCreateRequest{{\n\t\tEventID:       \"login-2026-10-17-000001\",\n\t\tEventCategory: \"auth\",\n\t\tActionType:    \"login\",\n\t\tOccurredAt:    time.Date(2026, 10, 17, 9, 15, 2, 0, time.UTC),\n\t\tSubject: didit.MonitoringEventCreateRequestSubject{\n\t\t\tVendorData: \"user-42\",\n\t\t},\n\t}, {\n\t\tEventID:       \"deposit-2026-10-17-000002\",\n\t\tEventCategory: \"payment\",\n\t\tActionType:    \"deposit_completed\",\n\t\tOccurredAt:    time.Date(2026, 10, 17, 9, 16, 40, 0, time.UTC),\n\t\tSubject: didit.MonitoringEventCreateRequestSubject{\n\t\t\tVendorData: \"user-42\",\n\t\t},\n\t\tTransactionContext: didit.Some(didit.MonitoringEventCreateRequestTransactionContext{\n\t\t\tAmount:             didit.String(\"100.00\"),\n\t\t\tCurrency:           didit.String(\"EUR\"),\n\t\t\tPaymentReferenceID: didit.String(\"dep_736\"),\n\t\t}),\n\t\tPayload: didit.Some(map[string]any{\"payment_method\": \"card\", \"status\": \"completed\"}),\n\t}},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.OffsetDateTime;\nimport java.util.List;\nimport java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.MonitoringEventCreateRequest;\nimport me.didit.types.MonitoringEventsCreateBatchParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.monitoringEvents().createBatch(MonitoringEventsCreateBatchParams.builder()\n        .events(List.of(\n                MonitoringEventCreateRequest.builder()\n                        .eventId(\"login-2026-10-17-000001\")\n                        .eventCategory(MonitoringEventCreateRequest.EventCategory.of(\"auth\"))\n                        .actionType(\"login\")\n                        .occurredAt(OffsetDateTime.parse(\"2026-10-17T09:15:02.481Z\"))\n                        .subject(MonitoringEventCreateRequest.Subject.builder()\n                                .vendorData(\"user-42\")\n                                .build())\n                        .build(),\n                MonitoringEventCreateRequest.builder()\n                        .eventId(\"deposit-2026-10-17-000002\")\n                        .eventCategory(MonitoringEventCreateRequest.EventCategory.of(\"payment\"))\n                        .actionType(\"deposit_completed\")\n                        .occurredAt(OffsetDateTime.parse(\"2026-10-17T09:16:40Z\"))\n                        .subject(MonitoringEventCreateRequest.Subject.builder()\n                                .vendorData(\"user-42\")\n                                .build())\n                        .transactionContext(MonitoringEventCreateRequest.TransactionContext.builder()\n                                .amount(\"100.00\")\n                                .currency(\"EUR\")\n                                .paymentReferenceId(\"dep_736\")\n                                .build())\n                        .payload(Map.of(\"payment_method\", \"card\", \"status\", \"completed\"))\n                        .build()))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->monitoringEvents->createBatch([\n    'events' => [[\n        'event_id' => 'login-2026-10-17-000001',\n        'event_category' => 'auth',\n        'action_type' => 'login',\n        'occurred_at' => '2026-10-17T09:15:02.481Z',\n        'subject' => [\n            'vendor_data' => 'user-42',\n        ],\n    ], [\n        'event_id' => 'deposit-2026-10-17-000002',\n        'event_category' => 'payment',\n        'action_type' => 'deposit_completed',\n        'occurred_at' => '2026-10-17T09:16:40Z',\n        'subject' => [\n            'vendor_data' => 'user-42',\n        ],\n        'transaction_context' => [\n            'amount' => '100.00',\n            'currency' => 'EUR',\n            'payment_reference_id' => 'dep_736',\n        ],\n        'payload' => ['payment_method' => 'card', 'status' => 'completed'],\n    ]],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.monitoring_events.create_batch(\n  events: [{\n    event_id: \"login-2026-10-17-000001\",\n    event_category: \"auth\",\n    action_type: \"login\",\n    occurred_at: \"2026-10-17T09:15:02.481Z\",\n    subject: {\n      vendor_data: \"user-42\",\n    },\n  }, {\n    event_id: \"deposit-2026-10-17-000002\",\n    event_category: \"payment\",\n    action_type: \"deposit_completed\",\n    occurred_at: \"2026-10-17T09:16:40Z\",\n    subject: {\n      vendor_data: \"user-42\",\n    },\n    transaction_context: {\n      amount: \"100.00\",\n      currency: \"EUR\",\n      payment_reference_id: \"dep_736\",\n    },\n    payload: { payment_method: \"card\", status: \"completed\" },\n  }]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.MonitoringEvents.CreateBatchAsync(new MonitoringEventsCreateBatchParams\n{\n    Events = new MonitoringEventCreateRequest[]\n    {\n        new()\n        {\n            EventId = \"login-2026-10-17-000001\",\n            EventCategory = \"auth\",\n            ActionType = \"login\",\n            OccurredAt = DateTimeOffset.Parse(\"2026-10-17T09:15:02.481Z\"),\n            Subject = new()\n            {\n                VendorData = \"user-42\",\n            },\n        },\n        new()\n        {\n            EventId = \"deposit-2026-10-17-000002\",\n            EventCategory = \"payment\",\n            ActionType = \"deposit_completed\",\n            OccurredAt = DateTimeOffset.Parse(\"2026-10-17T09:16:40Z\"),\n            Subject = new()\n            {\n                VendorData = \"user-42\",\n            },\n            TransactionContext = new MonitoringEventCreateRequestTransactionContext\n            {\n                Amount = \"100.00\",\n                Currency = \"EUR\",\n                PaymentReferenceId = \"dep_736\",\n            },\n            Payload = new Dictionary<string, object> { [\"payment_method\"] = \"card\", [\"status\"] = \"completed\" },\n        },\n    },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "拒否された項目はありません。すべての項目が`accepted`または`replayed`です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "accepted_count",
                    "replayed_count",
                    "rejected_count",
                    "results"
                  ],
                  "properties": {
                    "accepted_count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "保存され、評価された項目。"
                    },
                    "replayed_count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "同じ内容ですでに保存されている項目。"
                    },
                    "rejected_count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "保存されなかった項目。"
                    },
                    "results": {
                      "type": "array",
                      "description": "項目ごとに1エントリーで、リクエストの順序どおりに並びます。",
                      "items": {
                        "type": "object",
                        "description": "1件のアイテムの結果。受け付けられたアイテムとリプレイされたアイテムには`MonitoringEventIngestResult`のすべてのフィールドも含まれます。拒否されたアイテムには代わりに`event_id`と`errors`が含まれます。",
                        "required": [
                          "index",
                          "outcome"
                        ],
                        "properties": {
                          "index": {
                            "type": "integer",
                            "minimum": 0,
                            "description": "`events`配列内での項目の位置。"
                          },
                          "outcome": {
                            "type": "string",
                            "enum": [
                              "accepted",
                              "replayed",
                              "rejected"
                            ],
                            "description": "`accepted`：保存され、評価されました。`replayed`：同じ内容ですでに保存されています。`rejected`：保存されていません。`errors`を参照してください。"
                          },
                          "event_id": {
                            "type": "string",
                            "nullable": true,
                            "description": "お客様の`event_id`です。検証で拒否された項目では、項目のsnake_caseの`event_id`キーから読み取られます。そのため、項目で省略された場合や`eventId`エイリアスで送信された場合はnullになります。"
                          },
                          "errors": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "拒否された項目のみ。フィールドをキーとする検証エラーで、`POST /v3/events/`の`400`と同じ形式です。異なる内容で再利用された`event_id`は、`errors.event_id`の下に文字列として報告されます。"
                          },
                          "event_uuid": {
                            "type": "string",
                            "format": "uuid",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "ACCEPTED",
                              "APPROVED",
                              "IN_REVIEW",
                              "DECLINED"
                            ],
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "score": {
                            "type": "integer",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "rules_evaluated_count": {
                            "type": "integer",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "rules_matched_count": {
                            "type": "integer",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "correlation_pending": {
                            "type": "boolean",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "retention_class": {
                            "type": "string",
                            "enum": [
                              "low_value",
                              "standard",
                              "risk_relevant",
                              "monetary_or_compliance"
                            ],
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "expires_at": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "idempotent_replay": {
                            "type": "boolean",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "rule_matches": {
                            "type": "array",
                            "description": "受け入れられた項目とリプレイされた項目のみ。",
                            "items": {
                              "type": "object",
                              "required": [
                                "rule_id",
                                "library_key",
                                "mode",
                                "is_async"
                              ],
                              "properties": {
                                "rule_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "description": "ルールのUUID。"
                                },
                                "library_key": {
                                  "type": "string",
                                  "nullable": true,
                                  "description": "ルールがルールライブラリからインストールされた場合はライブラリキー、それ以外の場合はnull。"
                                },
                                "mode": {
                                  "type": "string",
                                  "enum": [
                                    "ACTIVE",
                                    "TEST"
                                  ],
                                  "description": "`TEST`ルールは一致を記録しますが、アクションは適用しません。"
                                },
                                "is_async": {
                                  "type": "boolean",
                                  "description": "一致が非同期処理で検出された場合は`true`です。"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "All landed": {
                    "value": {
                      "accepted_count": 1,
                      "replayed_count": 1,
                      "rejected_count": 0,
                      "results": [
                        {
                          "index": 0,
                          "outcome": "accepted",
                          "event_uuid": "33333333-4444-5555-6666-777777777777",
                          "event_id": "login-2026-10-17-000001",
                          "status": "ACCEPTED",
                          "score": 0,
                          "rules_evaluated_count": 6,
                          "rules_matched_count": 0,
                          "correlation_pending": false,
                          "retention_class": "standard",
                          "expires_at": "2026-11-16T09:15:02.481000Z",
                          "idempotent_replay": false,
                          "rule_matches": []
                        },
                        {
                          "index": 1,
                          "outcome": "replayed",
                          "event_uuid": "11111111-2222-3333-4444-555555555555",
                          "event_id": "deposit-2026-10-17-000002",
                          "status": "ACCEPTED",
                          "score": 0,
                          "rules_evaluated_count": 6,
                          "rules_matched_count": 0,
                          "correlation_pending": false,
                          "retention_class": "monetary_or_compliance",
                          "expires_at": null,
                          "idempotent_replay": true,
                          "rule_matches": []
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "207": {
            "description": "少なくとも1つの項目が拒否されました。その他の項目は保存されています。拒否された項目のみを修正して再送信してください(受け付けられた項目を再送信しても問題はなく、`replayed`として返されます)。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "accepted_count",
                    "replayed_count",
                    "rejected_count",
                    "results"
                  ],
                  "properties": {
                    "accepted_count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "保存され、評価された項目。"
                    },
                    "replayed_count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "同じ内容ですでに保存されている項目。"
                    },
                    "rejected_count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "保存されなかった項目。"
                    },
                    "results": {
                      "type": "array",
                      "description": "項目ごとに1エントリーで、リクエストの順序どおりに並びます。",
                      "items": {
                        "type": "object",
                        "description": "1件のアイテムの結果。受け付けられたアイテムとリプレイされたアイテムには`MonitoringEventIngestResult`のすべてのフィールドも含まれます。拒否されたアイテムには代わりに`event_id`と`errors`が含まれます。",
                        "required": [
                          "index",
                          "outcome"
                        ],
                        "properties": {
                          "index": {
                            "type": "integer",
                            "minimum": 0,
                            "description": "`events`配列内での項目の位置。"
                          },
                          "outcome": {
                            "type": "string",
                            "enum": [
                              "accepted",
                              "replayed",
                              "rejected"
                            ],
                            "description": "`accepted`：保存され、評価されました。`replayed`：同じ内容ですでに保存されています。`rejected`：保存されていません。`errors`を参照してください。"
                          },
                          "event_id": {
                            "type": "string",
                            "nullable": true,
                            "description": "お客様の`event_id`です。検証で拒否された項目では、項目のsnake_caseの`event_id`キーから読み取られます。そのため、項目で省略された場合や`eventId`エイリアスで送信された場合はnullになります。"
                          },
                          "errors": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "拒否された項目のみ。フィールドをキーとする検証エラーで、`POST /v3/events/`の`400`と同じ形式です。異なる内容で再利用された`event_id`は、`errors.event_id`の下に文字列として報告されます。"
                          },
                          "event_uuid": {
                            "type": "string",
                            "format": "uuid",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "ACCEPTED",
                              "APPROVED",
                              "IN_REVIEW",
                              "DECLINED"
                            ],
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "score": {
                            "type": "integer",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "rules_evaluated_count": {
                            "type": "integer",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "rules_matched_count": {
                            "type": "integer",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "correlation_pending": {
                            "type": "boolean",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "retention_class": {
                            "type": "string",
                            "enum": [
                              "low_value",
                              "standard",
                              "risk_relevant",
                              "monetary_or_compliance"
                            ],
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "expires_at": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "idempotent_replay": {
                            "type": "boolean",
                            "description": "受け入れられた項目とリプレイされた項目のみ。"
                          },
                          "rule_matches": {
                            "type": "array",
                            "description": "受け入れられた項目とリプレイされた項目のみ。",
                            "items": {
                              "type": "object",
                              "required": [
                                "rule_id",
                                "library_key",
                                "mode",
                                "is_async"
                              ],
                              "properties": {
                                "rule_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "description": "ルールのUUID。"
                                },
                                "library_key": {
                                  "type": "string",
                                  "nullable": true,
                                  "description": "ルールがルールライブラリからインストールされた場合はライブラリキー、それ以外の場合はnull。"
                                },
                                "mode": {
                                  "type": "string",
                                  "enum": [
                                    "ACTIVE",
                                    "TEST"
                                  ],
                                  "description": "`TEST`ルールは一致を記録しますが、アクションは適用しません。"
                                },
                                "is_async": {
                                  "type": "boolean",
                                  "description": "一致が非同期処理で検出された場合は`true`です。"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "Partial success": {
                    "value": {
                      "accepted_count": 1,
                      "replayed_count": 0,
                      "rejected_count": 2,
                      "results": [
                        {
                          "index": 0,
                          "outcome": "accepted",
                          "event_uuid": "33333333-4444-5555-6666-777777777777",
                          "event_id": "login-2026-10-17-000001",
                          "status": "ACCEPTED",
                          "score": 0,
                          "rules_evaluated_count": 6,
                          "rules_matched_count": 0,
                          "correlation_pending": false,
                          "retention_class": "standard",
                          "expires_at": "2026-11-16T09:15:02.481000Z",
                          "idempotent_replay": false,
                          "rule_matches": []
                        },
                        {
                          "index": 1,
                          "event_id": "deposit-2026-10-17-000002",
                          "outcome": "rejected",
                          "errors": {
                            "payload": [
                              "payment.deposit_completed requires: payment_method, status."
                            ]
                          }
                        },
                        {
                          "index": 2,
                          "event_id": "login-2026-10-16-000777",
                          "outcome": "rejected",
                          "errors": {
                            "event_id": "event_id 'login-2026-10-16-000777' already exists with a different payload."
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バッチ自体の形式が不正です。`events`がない、配列ではない、空である、または500件を超えています。何も保存されません。大きなバッチは分割してください。",
            "content": {
              "application/json": {
                "examples": {
                  "Not a list": {
                    "value": {
                      "events": "Expected a list of events."
                    }
                  },
                  "Empty": {
                    "value": {
                      "events": "At least one event is required."
                    }
                  },
                  "Too many": {
                    "value": {
                      "events": "A batch accepts at most 500 events; received 612."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: write`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。アプリケーションでイベントの取り込みが無効になっている間も`code: event_monitoring_disabled`とともに返されます。その場合は何も保存されず、このチェックはリクエストボディの検証前に実行されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Event monitoring disabled": {
                    "value": {
                      "detail": "Event monitoring is not enabled for this application. Turn on event ingestion in the transaction monitoring settings before submitting events.",
                      "code": "event_monitoring_disabled"
                    }
                  },
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no write access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込みリクエスト（`POST`、`PATCH`、`DELETE`）は、APIキーごとに1分あたり300リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/sdk-token/": {
      "post": {
        "summary": "モニタリングSDKトークンの発行",
        "description": "1つのサブジェクトに紐づく短期間有効なデバイス認証情報を発行し、WebアプリやモバイルアプリがAPIキーなしでそのユーザーのイベントをDiditへ直接送信できるようにします。アプリは返された`monitoring_token`を`X-Monitoring-Token`ヘッダーに設定してデバイス用レーン（`POST /v1/events/`および`POST /v1/events/batch/`）へ送信します。このレーンでは、サブジェクトは常にこの`vendor_data`で上書きされ、`allowed_event_categories`に含まれないイベントは拒否され、送信されたイベントごとに使用回数が1回消費され、`Origin`が`bind_to_origin`と一致しないリクエストは拒否されます。このエンドポイントは必ずバックエンドからのみ呼び出してください。発行によって作成されるのは認証情報のみで、それ以外は何も作成されません（ユーザーは作成されません）。アプリケーションでイベントの取り込みが有効になっている必要があります。有効でない場合、このエンドポイントは書き込みに使えない認証情報を発行する代わりに、`code: event_monitoring_disabled`を含む`403`を返します。スコープ付きAPIキーには`transactions: write`が必要です。[SDKからのイベント送信](https://docs.didit.me/ja/transaction-monitoring/sdk-event-submission)を参照してください。",
        "operationId": "create_monitoring_event_sdk_token",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "create_sdk_token",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "camelCaseのエイリアスも使用できます：`vendorData`、`entityType`、`allowedEventCategories`、`ttlSeconds`、`maxUses`、`bindToOrigin`。",
                "required": [
                  "vendor_data"
                ],
                "properties": {
                  "vendor_data": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255,
                    "description": "この認証情報で送信されるすべてのイベントが属するサブジェクトに対するお客様のIDです。"
                  },
                  "entity_type": {
                    "type": "string",
                    "maxLength": 32,
                    "default": "individual",
                    "description": "`company`は企業のサブジェクトを紐付けます。それ以外の値（デフォルトは`individual`）は個人を紐付けます。"
                  },
                  "allowed_event_categories": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "auth",
                        "session",
                        "gameplay",
                        "bonus",
                        "affiliate",
                        "payment",
                        "dispute",
                        "security",
                        "responsible_gambling",
                        "custom"
                      ]
                    },
                    "description": "この認証情報で送信できるカテゴリ。すべてのカテゴリを許可するには、省略するか`[]`を送信します。"
                  },
                  "ttl_seconds": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 86400,
                    "default": 900,
                    "description": "認証情報の有効期間（秒）。"
                  },
                  "max_uses": {
                    "type": "integer",
                    "minimum": 1,
                    "nullable": true,
                    "default": 1000,
                    "description": "この認証情報で送信できるイベントの数（バッチではイベントごとに1回分を消費します）。有効期間内で上限を設けない場合は`null`を送信します。"
                  },
                  "bind_to_origin": {
                    "type": "string",
                    "maxLength": 255,
                    "nullable": true,
                    "description": "設定すると、すべてのデバイスリクエストのブラウザの`Origin`ヘッダーがこの値と完全に一致する必要があります。`Origin`のないリクエストは拒否されます。"
                  }
                }
              },
              "example": {
                "vendor_data": "user-42",
                "allowed_event_categories": [
                  "auth",
                  "session",
                  "gameplay"
                ],
                "ttl_seconds": 900,
                "max_uses": 1000,
                "bind_to_origin": "https://app.example.com"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/events/sdk-token/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"vendor_data\": \"user-42\",\n    \"allowed_event_categories\": [\"auth\", \"session\", \"gameplay\"],\n    \"ttl_seconds\": 900,\n    \"max_uses\": 1000,\n    \"bind_to_origin\": \"https://app.example.com\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.monitoring_events.create_sdk_token(\n    vendor_data=\"user-42\",\n    allowed_event_categories=[\"auth\", \"session\", \"gameplay\"],\n    ttl_seconds=900,\n    max_uses=1000,\n    bind_to_origin=\"https://app.example.com\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.monitoringEvents.createSdkToken({\n  vendor_data: \"user-42\",\n  allowed_event_categories: [\"auth\", \"session\", \"gameplay\"],\n  ttl_seconds: 900,\n  max_uses: 1000,\n  bind_to_origin: \"https://app.example.com\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.MonitoringEvents.CreateSDKToken(ctx, didit.MonitoringEventsCreateSDKTokenParams{\n\tVendorData:             \"user-42\",\n\tAllowedEventCategories: didit.Some([]didit.MonitoringEventsCreateSDKTokenParamsAllowedEventCategories{\"auth\", \"session\", \"gameplay\"}),\n\tTTLSeconds:             didit.Int(900),\n\tMaxUses:                didit.Int(1000),\n\tBindToOrigin:           didit.String(\"https://app.example.com\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.MonitoringEventsCreateSdkTokenParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.monitoringEvents().createSdkToken(MonitoringEventsCreateSdkTokenParams.builder()\n        .vendorData(\"user-42\")\n        .allowedEventCategories(List.of(MonitoringEventsCreateSdkTokenParams.AllowedEventCategories.of(\"auth\"), MonitoringEventsCreateSdkTokenParams.AllowedEventCategories.of(\"session\"), MonitoringEventsCreateSdkTokenParams.AllowedEventCategories.of(\"gameplay\")))\n        .ttlSeconds(900L)\n        .maxUses(1000L)\n        .bindToOrigin(\"https://app.example.com\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->monitoringEvents->createSdkToken([\n    'vendor_data' => 'user-42',\n    'allowed_event_categories' => ['auth', 'session', 'gameplay'],\n    'ttl_seconds' => 900,\n    'max_uses' => 1000,\n    'bind_to_origin' => 'https://app.example.com',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.monitoring_events.create_sdk_token(\n  vendor_data: \"user-42\",\n  allowed_event_categories: [\"auth\", \"session\", \"gameplay\"],\n  ttl_seconds: 900,\n  max_uses: 1000,\n  bind_to_origin: \"https://app.example.com\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.MonitoringEvents.CreateSdkTokenAsync(new MonitoringEventsCreateSdkTokenParams\n{\n    VendorData = \"user-42\",\n    AllowedEventCategories = new MonitoringEventsCreateSdkTokenParamsAllowedEventCategories[] { \"auth\", \"session\", \"gameplay\" },\n    TtlSeconds = 900,\n    MaxUses = 1000,\n    BindToOrigin = \"https://app.example.com\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "認証情報が発行されました。`monitoring_token`をアプリに渡し、`expires_at`までシークレットとして扱ってください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "monitoring_token",
                    "expires_at",
                    "allowed_event_categories",
                    "max_uses",
                    "bind_to_origin"
                  ],
                  "properties": {
                    "monitoring_token": {
                      "type": "string",
                      "description": "デバイスの認証情報（43文字のURLセーフなトークン）です。`X-Monitoring-Token`ヘッダーで送信してください。"
                    },
                    "expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "認証情報が受け付けられなくなる日時。"
                    },
                    "allowed_event_categories": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "auth",
                          "session",
                          "gameplay",
                          "bonus",
                          "affiliate",
                          "payment",
                          "dispute",
                          "security",
                          "responsible_gambling",
                          "custom"
                        ]
                      },
                      "description": "この認証情報で送信できるカテゴリ。`[]`はすべてのカテゴリを意味します。"
                    },
                    "max_uses": {
                      "type": "integer",
                      "nullable": true,
                      "description": "認証情報のイベント上限。nullは上限なしを意味します。"
                    },
                    "bind_to_origin": {
                      "type": "string",
                      "nullable": true,
                      "description": "認証情報が紐づけられたオリジン、またはnullです。"
                    }
                  }
                },
                "example": {
                  "monitoring_token": "q7ZtR2xKp9VbN4mWc8LdH1sYfJ3gT6uEaQ0oPiXzBkC",
                  "expires_at": "2026-10-17T09:30:02.481000Z",
                  "allowed_event_categories": [
                    "auth",
                    "session",
                    "gameplay"
                  ],
                  "max_uses": 1000,
                  "bind_to_origin": "https://app.example.com"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションに失敗しました。`vendor_data`がない、`ttl_seconds`が60〜86400の範囲外、`max_uses`が1未満、または不明なカテゴリー(配列内の位置をキーとして示されます)のいずれかです。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing vendor_data": {
                    "value": {
                      "vendor_data": [
                        "This field is required."
                      ]
                    }
                  },
                  "ttl_seconds too short": {
                    "value": {
                      "ttl_seconds": [
                        "Ensure this value is greater than or equal to 60."
                      ]
                    }
                  },
                  "Unknown category": {
                    "value": {
                      "allowed_event_categories": {
                        "1": [
                          "\"login\" is not a valid choice."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: write`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。アプリケーションでイベントの取り込みが無効になっている間も`code: event_monitoring_disabled`とともに返されます。その場合は何も保存されず、このチェックはリクエストボディの検証前に実行されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Event monitoring disabled": {
                    "value": {
                      "detail": "Event monitoring is not enabled for this application. Turn on event ingestion in the transaction monitoring settings before submitting events.",
                      "code": "event_monitoring_disabled"
                    }
                  },
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no write access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込みリクエスト（`POST`、`PATCH`、`DELETE`）は、APIキーごとに1分あたり300リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/{event_uuid}/": {
      "get": {
        "summary": "モニタリングイベントを取得",
        "description": "1件のモニタリングイベントを取得します。一覧で返される内容すべてに加え、ペイロード、カスタム値、デバイスコンテキスト、フィールドの出所（`field_sources`）、昇格されたドメインフィールド、`expires_at`、一致したすべてのルール実行とそのエビデンス、IPエンリッチメント、ルールが付与したタグが含まれます。`correlation_pending`が`true`の間は、非同期ルールがまだ実行されていません。数分後にイベントを再度読み取り、最終的な`status`、`score`、`rule_runs`を確認してください。読み取りは、イベント取り込みが有効かどうかにかかわらず機能します。スコープ付きAPIキーには`transactions: read`が必要です。[エビデンス](https://docs.didit.me/ja/transaction-monitoring/event-rules#エビデンス)と[IPエンリッチメント](https://docs.didit.me/ja/transaction-monitoring/ip-enrichment)を参照してください。",
        "operationId": "get_monitoring_event",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "parameters": [
          {
            "name": "event_uuid",
            "in": "path",
            "required": true,
            "description": "イベントのDidit識別子（作成、一括、一覧、またはタイムラインのレスポンスに含まれる`event_uuid`）で、独自の`event_id`ではありません。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.monitoring_events.retrieve(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.monitoringEvents.retrieve(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.MonitoringEvents.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.monitoringEvents().retrieve(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->monitoringEvents->retrieve('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.monitoring_events.retrieve(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.MonitoringEvents.RetrieveAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "証拠を含むイベントです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitoringEventDetail"
                },
                "examples": {
                  "Login from a VPN, in review": {
                    "value": {
                      "event_uuid": "33333333-4444-5555-6666-777777777777",
                      "event_id": "login-2026-10-17-000001",
                      "event_category": "auth",
                      "action_type": "login",
                      "occurred_at": "2026-10-17T09:15:02.481000Z",
                      "received_at": "2026-10-17T09:15:02.903114Z",
                      "status": "IN_REVIEW",
                      "score": 40,
                      "subject_vendor_data": "user-42",
                      "subject_entity_type": "individual",
                      "subject_uuid": "66666666-7777-8888-9999-000000000000",
                      "counterparty_vendor_data": null,
                      "session_id": "web-session-abc",
                      "device_fingerprint": "fp-a8c1",
                      "ip_address": "203.0.113.42",
                      "ip_country": "ES",
                      "amount": null,
                      "currency": null,
                      "game_id": null,
                      "round_id": null,
                      "bonus_id": null,
                      "affiliate_code": null,
                      "payment_reference_id": null,
                      "retention_class": "risk_relevant",
                      "rules_matched_count": 1,
                      "correlation_pending": false,
                      "is_droppable": true,
                      "payload": {
                        "method": "password"
                      },
                      "custom_values": {
                        "vip_tier": "gold",
                        "vpn_or_proxy_detected": true
                      },
                      "device_context": {
                        "fingerprint": "fp-a8c1",
                        "network_context": {
                          "ip_address": "203.0.113.42",
                          "ip_country": "Spain",
                          "ip_country_code": "ES",
                          "ip_city": "Madrid",
                          "asn_number": 64500,
                          "asn_organization": "Example Networks",
                          "is_vpn_or_tor": true,
                          "is_data_center": false
                        }
                      },
                      "field_sources": {
                        "subject.vendor_data": "customer",
                        "event_category": "customer",
                        "action_type": "customer",
                        "occurred_at": "customer",
                        "received_at": "server",
                        "payload.method": "customer",
                        "session.session_id": "customer",
                        "session.sequence": "customer",
                        "device_context.fingerprint": "customer",
                        "device_context.network_context.ip_address": "customer",
                        "device_context.network_context.ip_country": "server",
                        "device_context.network_context.ip_country_code": "server",
                        "device_context.network_context.ip_city": "server",
                        "device_context.network_context.asn_number": "server",
                        "device_context.network_context.asn_organization": "server",
                        "device_context.network_context.is_vpn_or_tor": "server",
                        "device_context.network_context.is_data_center": "server"
                      },
                      "session_sequence": 142,
                      "table_id": null,
                      "hand_id": null,
                      "match_id": null,
                      "market_id": null,
                      "side": null,
                      "role": null,
                      "net_result_amount": null,
                      "payment_fingerprint": null,
                      "instrument_reference_hash": null,
                      "withdrawal_address_hash": null,
                      "dispute_id": null,
                      "chargeback_id": null,
                      "changed_field": null,
                      "identity_match_ref": null,
                      "schema_version": 1,
                      "expires_at": "2027-01-15T09:15:02.481000Z",
                      "rules_evaluated_count": 6,
                      "rule_runs": [
                        {
                          "rule_uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                          "rule_title": "Login from VPN or Tor",
                          "library_key": null,
                          "matched": true,
                          "mode": "ACTIVE",
                          "is_async": false,
                          "severity": "MEDIUM",
                          "score_delta": 40,
                          "action_summary": "score +40; add_tag:VPN_LOGIN",
                          "matched_payload": [
                            {
                              "field": "event.ip.is_vpn_or_tor",
                              "operator": "eq",
                              "expected_value": true,
                              "current_value": true,
                              "matched": true,
                              "group_index": null,
                              "group_logic": "AND",
                              "field_source": "server"
                            }
                          ],
                          "created_at": "2026-10-17T09:15:02.951207Z"
                        }
                      ],
                      "ip_enrichment": {
                        "ip_country_code": "ES",
                        "ip_city": "Madrid",
                        "asn_number": 64500,
                        "asn_organization": "Example Networks",
                        "is_vpn_or_tor": true,
                        "is_data_center": false,
                        "proxy_type": null,
                        "last_enriched_at": "2026-10-17T09:15:02.910442Z"
                      },
                      "subject_profile": null,
                      "tags": [
                        "VPN_LOGIN"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: read`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`event_uuid`のイベントはアプリケーション内に存在しません。保存されていない、削除された、または別のアプリケーションに属しているかのいずれかです。UUIDではないパスセグメントはルートに一致せず、同じく`404`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No MonitoringEvent matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。`GET`リクエストは、APIキーごとに1分あたり600リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/subjects/{vendor_data}/": {
      "get": {
        "summary": "サブジェクトのイベントタイムラインを取得",
        "description": "1つの対象者のすべてのモニタリングイベントを、`occurred_at`の新しい順に一覧表示します。`vendor_data`はエンティティタイプ内でのみ一意であるため、同じIDが個人と企業の両方を指すことがあります。`entity_type`でどちらのタイムラインを取得するかを選択します。デフォルトは`individual`のため、企業のイベントを取得するには`entity_type=company`が必要です。`GET /v3/events/`のフィルターも追加で適用され、イベントのない`vendor_data`では`404`ではなく空のページが返されます。スコープ付きAPIキーには`transactions: read`が必要です。[イベントの読み取り](https://docs.didit.me/ja/transaction-monitoring/events#イベントの読み出し)を参照してください。",
        "operationId": "get_monitoring_event_subject_timeline",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "retrieve_subject_timeline",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "parameters": [
          {
            "name": "vendor_data",
            "in": "path",
            "required": true,
            "description": "サブジェクトに対するお客様のID（そのイベントの`subject.vendor_data`）です。URLエンコードしてください。`/`を含む値はこのエンドポイントで指定できません。",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "example": "user-42"
          },
          {
            "name": "entity_type",
            "in": "query",
            "required": false,
            "description": "`company`を指定すると、この`vendor_data`を持つ企業が返されます。それ以外の値を指定した場合、または値を指定しない場合は個人が返されます。`entity_type`がない場合は、`subject_entity_type`がエイリアスとして受け付けられます。",
            "schema": {
              "type": "string",
              "enum": [
                "individual",
                "company"
              ],
              "default": "individual"
            },
            "example": "individual"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1ページあたりの最大イベント数です。デフォルトは50です。1000000を超える値は`400`を返し、数値以外、0、または負の値は50にフォールバックします。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "example": 50
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "スキップするイベントの数。デフォルトは0です。レスポンスの`next`のURLをたどることを推奨します。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "example": 0
          },
          {
            "name": "event_category",
            "in": "query",
            "required": false,
            "description": "これらのカテゴリのイベントのみ。複数の値を指定するにはパラメーターを繰り返します（`?event_category=payment&event_category=dispute`）。いずれかに一致するイベントが返されます。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "auth",
                  "session",
                  "gameplay",
                  "bonus",
                  "affiliate",
                  "payment",
                  "dispute",
                  "security",
                  "responsible_gambling",
                  "custom"
                ]
              }
            },
            "example": [
              "payment",
              "dispute"
            ]
          },
          {
            "name": "action_type",
            "in": "query",
            "required": false,
            "description": "これらのアクションタイプ（完全一致、大文字と小文字を区別）のイベントのみ。複数の値を指定するには繰り返します。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "deposit_completed",
              "chargeback_opened"
            ]
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "これらのステータスのイベントのみ。複数の値を指定するには繰り返します。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ACCEPTED",
                  "APPROVED",
                  "IN_REVIEW",
                  "DECLINED"
                ]
              }
            },
            "example": [
              "IN_REVIEW",
              "DECLINED"
            ]
          },
          {
            "name": "retention_class",
            "in": "query",
            "required": false,
            "description": "これらの保持クラスのイベントのみ。複数の値を指定するには繰り返します。",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "low_value",
                  "standard",
                  "risk_relevant",
                  "monetary_or_compliance"
                ]
              }
            },
            "example": [
              "risk_relevant"
            ]
          },
          {
            "name": "business_vendor_data",
            "in": "query",
            "required": false,
            "description": "イベントとともに送信された`business.vendor_data`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "merchant-7"
          },
          {
            "name": "session_id",
            "in": "query",
            "required": false,
            "description": "`session.session_id`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "web-session-abc"
          },
          {
            "name": "device_fingerprint",
            "in": "query",
            "required": false,
            "description": "`device_context.fingerprint`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "fp-a8c1"
          },
          {
            "name": "ip_address",
            "in": "query",
            "required": false,
            "description": "イベントのIPアドレスとの完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "203.0.113.42"
          },
          {
            "name": "game_id",
            "in": "query",
            "required": false,
            "description": "昇格済みの`game_id`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "poker-holdem-01"
          },
          {
            "name": "round_id",
            "in": "query",
            "required": false,
            "description": "昇格済みの`round_id`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "round-88231"
          },
          {
            "name": "affiliate_code",
            "in": "query",
            "required": false,
            "description": "昇格済みの`affiliate_code`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "aff-summer"
          },
          {
            "name": "payment_reference_id",
            "in": "query",
            "required": false,
            "description": "支払い参照（`transaction_context.payment_reference_id`または`payload.payment_reference_id`から取得）との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "dep_735"
          },
          {
            "name": "counterparty_vendor_data",
            "in": "query",
            "required": false,
            "description": "昇格済みの`counterparty_vendor_data`との完全一致です。",
            "schema": {
              "type": "string"
            },
            "example": "user-77"
          },
          {
            "name": "matched_only",
            "in": "query",
            "required": false,
            "description": "`true`（`1`または`yes`も可、大文字と小文字は区別しません）を指定すると、少なくとも1つのルールに一致したイベント（`rules_matched_count`が0より大きいもの）のみを返します。それ以外の値は無視されます。",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": true
          },
          {
            "name": "occurred_from",
            "in": "query",
            "required": false,
            "description": "`occurred_at`がこの時点以降（この時点を含む）のイベントのみ。ISO 8601形式の値を送信してください。`2026-10-01T00:00:00Z`、`+`をパーセントエンコードした明示的なオフセット（`2026-10-01T02:00:00%2B02:00`。エンコードされていない`+`はスペースとしてデコードされ、値を解析できなくなります）、または日付のみ（`2026-10-01`）で、日付のみの場合はその日の00:00:00 UTCを意味します。オフセットのない値はUTCとして解釈されます。その他の形式の値は受け付けません。",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "occurred_to",
            "in": "query",
            "required": false,
            "description": "`occurred_at`がこの時点以前（この時点を含む）のイベントのみ。日付のみの場合はその日の開始時刻を意味するため、`occurred_to=2026-10-15`では10月15日の残りの時間が除外されます。含めるには`2026-10-15T23:59:59Z`を送信してください。ISO 8601形式の値を送信してください。`2026-10-01T00:00:00Z`、`+`をパーセントエンコードした明示的なオフセット（`2026-10-01T02:00:00%2B02:00`。エンコードされていない`+`はスペースとしてデコードされ、値を解析できなくなります）、または日付のみ（`2026-10-01`）で、日付のみの場合はその日の00:00:00 UTCを意味します。オフセットのない値はUTCとして解釈されます。その他の形式の値は受け付けません。",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-10-17T23:59:59Z"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "`event_id`、`action_type`、`subject_vendor_data`、または`counterparty_vendor_data`に対する大文字・小文字を区別しない部分一致。",
            "schema": {
              "type": "string"
            },
            "example": "chargeback"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/events/subjects/user-42/?entity_type=individual&limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.monitoring_events.retrieve_subject_timeline(\n    \"user-42\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.monitoringEvents.retrieveSubjectTimeline(\"user-42\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.MonitoringEvents.RetrieveSubjectTimelineAutoPaging(ctx, \"user-42\", didit.MonitoringEventsRetrieveSubjectTimelineParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.monitoringEvents().retrieveSubjectTimeline(\"user-42\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->monitoringEvents->retrieveSubjectTimeline('user-42') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.monitoring_events.retrieve_subject_timeline(\"user-42\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.MonitoringEvents.RetrieveSubjectTimelineAsync(\"user-42\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "対象者のイベントの1ページ分です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitoringEventPage"
                },
                "examples": {
                  "Individual timeline": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "event_uuid": "11111111-2222-3333-4444-555555555555",
                          "event_id": "chargeback-2026-10-16-000318",
                          "event_category": "dispute",
                          "action_type": "chargeback_opened",
                          "occurred_at": "2026-10-16T14:02:11Z",
                          "received_at": "2026-10-16T14:02:12.418230Z",
                          "status": "IN_REVIEW",
                          "score": 60,
                          "subject_vendor_data": "user-42",
                          "subject_entity_type": "individual",
                          "subject_uuid": "66666666-7777-8888-9999-000000000000",
                          "counterparty_vendor_data": null,
                          "session_id": null,
                          "device_fingerprint": null,
                          "ip_address": null,
                          "ip_country": null,
                          "amount": "250.000000000000000000",
                          "currency": "EUR",
                          "game_id": null,
                          "round_id": null,
                          "bonus_id": null,
                          "affiliate_code": null,
                          "payment_reference_id": "dep_735",
                          "retention_class": "monetary_or_compliance",
                          "rules_matched_count": 1,
                          "correlation_pending": false,
                          "is_droppable": false
                        },
                        {
                          "event_uuid": "22222222-3333-4444-5555-666666666666",
                          "event_id": "login-2026-10-15-000912",
                          "event_category": "auth",
                          "action_type": "login",
                          "occurred_at": "2026-10-15T08:30:00.120000Z",
                          "received_at": "2026-10-15T08:30:00.734512Z",
                          "status": "ACCEPTED",
                          "score": 0,
                          "subject_vendor_data": "user-42",
                          "subject_entity_type": "individual",
                          "subject_uuid": "66666666-7777-8888-9999-000000000000",
                          "counterparty_vendor_data": null,
                          "session_id": "web-session-abc",
                          "device_fingerprint": "fp-a8c1",
                          "ip_address": "203.0.113.42",
                          "ip_country": "ES",
                          "amount": null,
                          "currency": null,
                          "game_id": null,
                          "round_id": null,
                          "bonus_id": null,
                          "affiliate_code": null,
                          "payment_reference_id": null,
                          "retention_class": "standard",
                          "rules_matched_count": 0,
                          "correlation_pending": false,
                          "is_droppable": true
                        }
                      ]
                    }
                  },
                  "No events": {
                    "value": {
                      "count": 0,
                      "next": null,
                      "previous": null,
                      "results": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`limit`または`offset`が1000000より大きい値です。レスポンス本文はメッセージ1件を含むJSON配列です。数値でない、または正でない`limit`はエラーにならず、デフォルトの50が使われます。",
            "content": {
              "application/json": {
                "examples": {
                  "limit too large": {
                    "summary": "limitが1000000を超えている",
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  },
                  "offset too large": {
                    "summary": "offsetが1000000を超えている",
                    "value": [
                      "offset must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: read`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。`GET`リクエストは、APIキーごとに1分あたり600リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/enrichment-metrics/": {
      "get": {
        "summary": "イベントエンリッチメントの指標を取得",
        "description": "アプリケーションのイベント取り込みとIPエンリッチメントのカウンターを、指定期間について、すべてのレーン(server、batch、device)を合計して返します。これにより、イベント量を監視し、エンリッチメントがイベントごとではなく一意のアドレスごとに1回だけ解決されていることを確認できます。期間は今日とその前の`days`日間で、UTCの暦日単位で数えます。3つの比率は、分母が0の場合はnullになります。スコープ付きAPIキーには`transactions: read`が必要です。[IPエンリッチメント](https://docs.didit.me/ja/transaction-monitoring/events#ipエンリッチメント)を参照してください。",
        "operationId": "get_monitoring_event_enrichment_metrics",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "retrieve_enrichment_metrics",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "description": "期間の長さ（日数）。デフォルトは30です。値は1から365の範囲に収められ、整数以外の値は30として扱われます。適用された値は`period_days`として返されます。",
            "schema": {
              "type": "integer",
              "default": 30,
              "minimum": 1,
              "maximum": 365
            },
            "example": 30
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/events/enrichment-metrics/?days=30' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.monitoring_events.retrieve_enrichment_metrics()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.monitoringEvents.retrieveEnrichmentMetrics();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.MonitoringEvents.RetrieveEnrichmentMetrics(ctx, didit.MonitoringEventsRetrieveEnrichmentMetricsParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.monitoringEvents().retrieveEnrichmentMetrics();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->monitoringEvents->retrieveEnrichmentMetrics();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.monitoring_events.retrieve_enrichment_metrics\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.MonitoringEvents.RetrieveEnrichmentMetricsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "期間内のカウンターと比率。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "events_ingested",
                    "events_rejected",
                    "enrichment_lookups",
                    "enrichment_cache_hits",
                    "enrichment_provider_calls",
                    "enrichment_skipped_low_value",
                    "unique_ips_seen",
                    "period_days",
                    "cache_hit_rate",
                    "unique_ip_ratio",
                    "provider_calls_per_1k_events"
                  ],
                  "properties": {
                    "events_ingested": {
                      "type": "integer",
                      "description": "保存された新しいイベントの数。冪等なリプレイはカウントされません。"
                    },
                    "events_rejected": {
                      "type": "integer",
                      "description": "バッチリクエスト内で拒否された項目（サーバーレーンとデバイスレーン）。拒否された単一イベントのリクエストはカウントされません。"
                    },
                    "enrichment_lookups": {
                      "type": "integer",
                      "description": "パブリックIPアドレスが、キャッシュから、または新たに解決されたイベントです。"
                    },
                    "enrichment_cache_hits": {
                      "type": "integer",
                      "description": "キャッシュから応答されたルックアップ。"
                    },
                    "enrichment_provider_calls": {
                      "type": "integer",
                      "description": "アドレスの新たな解決が必要だったルックアップ。"
                    },
                    "enrichment_skipped_low_value": {
                      "type": "integer",
                      "description": "アドレスがまだ既知でなかった低価値のテレメトリイベント。これら自体が新たな解決をトリガーすることはありません。"
                    },
                    "unique_ips_seen": {
                      "type": "integer",
                      "description": "新たに解決が必要だった住所。"
                    },
                    "period_days": {
                      "type": "integer",
                      "description": "上限・下限で調整した後に適用された`days`の値です。"
                    },
                    "cache_hit_rate": {
                      "type": "number",
                      "nullable": true,
                      "description": "`enrichment_cache_hits / enrichment_lookups`を小数点以下4桁に丸めた値。ルックアップがなかった場合はnull。"
                    },
                    "unique_ip_ratio": {
                      "type": "number",
                      "nullable": true,
                      "description": "`unique_ips_seen / events_ingested`を小数点以下4桁に丸めた値です。イベントが取り込まれていない場合はnullです。"
                    },
                    "provider_calls_per_1k_events": {
                      "type": "number",
                      "nullable": true,
                      "description": "取り込まれたイベント1000件あたりの新規解決数（小数点以下2桁に丸め）。イベントが取り込まれていない場合はnullです。"
                    }
                  }
                },
                "examples": {
                  "Last 30 days": {
                    "value": {
                      "events_ingested": 128450,
                      "events_rejected": 214,
                      "enrichment_lookups": 41230,
                      "enrichment_cache_hits": 40118,
                      "enrichment_provider_calls": 1112,
                      "enrichment_skipped_low_value": 74320,
                      "unique_ips_seen": 1112,
                      "period_days": 30,
                      "cache_hit_rate": 0.973,
                      "unique_ip_ratio": 0.0087,
                      "provider_calls_per_1k_events": 8.66
                    }
                  },
                  "No events yet": {
                    "value": {
                      "events_ingested": 0,
                      "events_rejected": 0,
                      "enrichment_lookups": 0,
                      "enrichment_cache_hits": 0,
                      "enrichment_provider_calls": 0,
                      "enrichment_skipped_low_value": 0,
                      "unique_ips_seen": 0,
                      "period_days": 30,
                      "cache_hit_rate": null,
                      "unique_ip_ratio": null,
                      "provider_calls_per_1k_events": null
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: read`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。`GET`リクエストは、APIキーごとに1分あたり600リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/events/{event_uuid}/delete/": {
      "delete": {
        "summary": "モニタリングイベントを削除",
        "description": "1件のモニタリングイベントを、そのルール実行、メモ、タグのリンクとともに完全に削除します。誤って送信したイベントなどが対象です。`204`の後、そのイベントはすべての読み取りから消え（取得では`404`が返され、一覧や対象者のタイムラインにも表示されなくなります）、削除は元に戻せず、その`event_id`は新しいイベントに使用できるようになります。影響を受けないもの: イベントの紐付け先となったユーザーまたは企業、ルールが開いたケース、ルールが追加したリストエントリ、他のイベントにすでに適用されたスコアとステータス。個人または企業に関するすべての情報を消去するには、代わりにそのユーザーまたは企業を削除してください。その場合、関連するイベントも削除されます。スコープ付きAPIキーには`transactions: write`が必要です。",
        "operationId": "delete_monitoring_event",
        "x-didit-sdk": {
          "resource": "monitoring_events",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Monitoring Events"
        ],
        "parameters": [
          {
            "name": "event_uuid",
            "in": "path",
            "required": true,
            "description": "イベントのDidit識別子（作成、一括、一覧、またはタイムラインのレスポンスに含まれる`event_uuid`）で、独自の`event_id`ではありません。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-2222-3333-4444-555555555555"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/delete/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.monitoring_events.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.monitoringEvents.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.MonitoringEvents.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.monitoringEvents().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->monitoringEvents->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.monitoring_events.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.MonitoringEvents.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ],
        "responses": {
          "204": {
            "description": "イベントが削除されました。本文はありません。"
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのは期限切れのキーのみで、キーが指定されていない場合や無効な場合は`403`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`x-api-key`がない（誤った、取り消された、または期限切れのキーには`401`が返されます）、`transactions: write`を持たないスコープ付きキー、一部のワークフローまたは承認済みセッションに限定されたキー（このようなキーはトランザクションモニタリングのデータに一切アクセスできません）、またはキーのIP許可リスト外からのリクエスト。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing or invalid API key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without access": {
                    "value": {
                      "detail": "This API key has no write access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "IP not allowed": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`event_uuid`のイベントはアプリケーション内に存在しません。保存されていない、削除された、または別のアプリケーションに属しているかのいずれかです。UUIDではないパスセグメントはルートに一致せず、同じく`404`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No MonitoringEvent matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込みリクエスト（`POST`、`PATCH`、`DELETE`）は、APIキーごとに1分あたり300リクエストの上限を共有します。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/parties/{partyUuid}/regenerate/": {
      "post": {
        "summary": "主要人物の当事者のKYCセッションを再生成する",
        "description": "法人確認 (KYB)セッションの主要人物パーティーに、新しい個人KYCセッションを付与します。対象は、以前のKYCセッションが削除された場合、または本人が開始する前に期限切れになった場合です。これにより主要人物チェックを再び完了できるようになります。リクエストボディは送信しません。この操作が機能するのは、パーティーのKYCセッションが削除された場合(`kyc_session_deleted: true`)、または本人が開始する前に期限切れになった場合(`Expired`、未開始)です。進行中のセッション、またはその他のステータス(`Approved`、`Declined`、`In Review`、`Abandoned`など)で終了したセッションは、削除されていない限り`409`を返します。KYCセッションを一度も持たなかったパーティーと企業パーティーは、常に`409`を返します。Diditは新しいホスト型KYCセッションを作成します。使用するのは、パーティーの認証に使われたワークフロー(その最新の公開バージョン)です。それが不明になっている場合は、主要人物設定でパーティーの役割に割り当てられたワークフローを使用します。そのため、リンクの有効期間はそのKYCワークフローのセッション有効期限に従います。メールアドレスが登録されている場合はパーティーにリンクをメールで送信し、`is_skipped`をクリアして、主要人物チェックと企業セッションのステータスを再計算します。その後、企業セッションについて、トリガー`console_key_people_regenerate`付きの`data.updated` [Webhook](https://docs.didit.me/ja/integration/webhooks)を送信します。代わりにパーティーを免除するには、`PATCH /v3/session/{sessionId}/kyb/parties/{partyUuid}/`を使用してください。スコープ付きAPIキーには`decisions: write`が必要です。`sessions: write`がない場合、`kyc_session_url`は`null`として返されます。削除されたセッションは、本人がすでに認証を開始または完了していた場合でも対象になります。インポートされたセッションは期限切れでは対象にならず、削除されている必要があります。",
        "operationId": "post_v3_session_kyb_party_regenerate",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "regenerate_kyb_party",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "親となる法人確認 (KYB) セッションのUUIDです。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "partyUuid",
            "in": "path",
            "required": true,
            "description": "主要人物の当事者のUUID (法人セッションの判定内の`key_people_checks[].submitted.parties[].uuid`) です。`sessionId`で参照されるセッションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/session/33333333-4444-5555-6666-777777777777/kyb/parties/0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41/regenerate/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.regenerate_kyb_party(\n    \"33333333-4444-5555-6666-777777777777\",\n    \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.regenerateKybParty(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RegenerateKYBParty(ctx, \"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().regenerateKybParty(\"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->regenerateKybParty('33333333-4444-5555-6666-777777777777', '0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.regenerate_kyb_party(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.RegenerateKybPartyAsync(\"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "新しいKYCセッションが作成されました。新しい子セッションを含む更新後のパーティーを返します。この子セッションは、そのKYCワークフローに設定されたセッション有効期限が経過すると期限切れになります。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KYBKeyPeopleParty"
                },
                "example": {
                  "uuid": "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41",
                  "entity_type": "person",
                  "source": "USER",
                  "name": "Jane Smith",
                  "first_name": "Jane",
                  "last_name": "Smith",
                  "company_name": null,
                  "registration_number": null,
                  "email": "user@example.com",
                  "nationality": "GB",
                  "phone_number": null,
                  "date_of_birth": "1980-05-04",
                  "position": "Director",
                  "custom_fields": {},
                  "is_active": true,
                  "is_skipped": false,
                  "requires_verification": true,
                  "roles": [
                    {
                      "role": "director",
                      "ownership_percent": null,
                      "voting_percent": null
                    }
                  ],
                  "kyc_session_id": "55555555-6666-7777-8888-999999999999",
                  "kyc_session_status": "Not Started",
                  "kyc_session_url": "https://verify.didit.me/session/abc123def456",
                  "kyc_session_deleted": false,
                  "kyb_sub_session_id": null,
                  "kyb_sub_session_status": null,
                  "kyb_sub_session_url": null,
                  "kyb_sub_session_deleted": false,
                  "verification_workflow_type": "kyc",
                  "verification_workflow_id": "12121212-3434-5656-7878-909090909090",
                  "verification_workflow_label": "Key People KYC",
                  "verification_workflow_features": [
                    {
                      "feature": "ID_VERIFICATION",
                      "status": "Not Finished"
                    },
                    {
                      "feature": "LIVENESS",
                      "status": "Not Finished"
                    },
                    {
                      "feature": "AML",
                      "status": "Not Finished"
                    }
                  ],
                  "didit_internal_id": null
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーの制限外である。このUUIDの当事者がアプリケーションに存在しない。または、当事者が別のセッションに属している。それぞれの場合に個別の`detail`が返されます。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーのワークフローまたは承認済みのみの制限外です",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "Unknown party": {
                    "summary": "このUUIDの当事者はアプリケーション内に存在しません",
                    "value": {
                      "detail": "No BusinessParty matches the given query."
                    }
                  },
                  "Party of another session": {
                    "summary": "partyUuidは存在するが、別のセッションに属している",
                    "value": {
                      "detail": "Party does not belong to the given session."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "当事者には置き換え可能なKYCセッションがありません。削除された場合を除き、進行中のセッションや、別のステータス（`Approved`、`Declined`、`In Review`、`Abandoned`など）で終了したセッションは再生成できません。セッションを一度も持たなかった当事者や企業の当事者も`409`を返します。対象となるセッションは、本人が開始する前に削除されたか期限切れになったものです。削除されたセッションは、本人がすでに認証を開始または完了していても対象となります。インポートされたセッションは期限切れでは対象とならず、削除されている必要があります。`code`で分岐してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "detail",
                    "code"
                  ],
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "kyb_party_kyc_session_not_deleted"
                      ],
                      "description": "安定した機械可読エラーコード。"
                    }
                  }
                },
                "example": {
                  "detail": "This party's KYC session is still live (it has neither been deleted nor expired without starting), so it cannot be regenerated.",
                  "code": "kyb_party_kyc_session_not_deleted"
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/transactions/{transaction_id}/notes/": {
      "get": {
        "summary": "取引メモを一覧表示",
        "description": "監視対象の1件の取引に付いたメモを新しい順(`created_at`の降順)に一覧表示します。対象となるのは、APIで追加したメモ、レビュアーがConsoleで追加したメモとステータス変更、Diditが自動で追加するメモ(ルールの`add_note`アクション、またはユーザーアクション検証セッションの作成時に発生した問題)です。自動で追加されたメモの`actor_name`は`Rule Engine`です。`metadata`でメモの種類を区別できます。\n\n`limit`と`offset`でページネーションします。`count`は100までは正確ですが、それを超えると100で頭打ちになるため、`count`からページ数を計算せず、`next`が`null`になるまでたどってください。これは副作用のない読み取り操作です。\n\nスコープ付きAPIキーには`transactions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを呼び出せません。レビュアーは[取引の詳細](https://docs.didit.me/ja/transaction-monitoring/console#取引の詳細)の**Notes**で同じ一覧を確認できます。",
        "operationId": "list_transaction_notes",
        "x-didit-sdk": {
          "resource": "transactions.notes",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "Diditの取引UUIDで、`POST /v3/transactions/`および`GET /v3/transactions/`が返す`uuid`です。独自の`txn_id`は受け付けられません。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "abcdef12-3456-7890-abcd-ef1234567890"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "description": "1ページあたりのメモの数。デフォルトは50です。正の整数でない値は50として扱われ、1000000を超える値は`400`を返します。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "description": "返す最初のメモの0始まりの位置です。`next`をたどる方法を推奨します。整数でない値は0として扱われ、1000000を超える値は`400`を返します。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/notes/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.transactions.notes.list(\n    \"abcdef12-3456-7890-abcd-ef1234567890\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.transactions.notes.list(\"abcdef12-3456-7890-abcd-ef1234567890\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.Notes.ListAutoPaging(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\", didit.TransactionsNotesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.transactions().notes().list(\"abcdef12-3456-7890-abcd-ef1234567890\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->transactions->notes->list('abcdef12-3456-7890-abcd-ef1234567890') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.notes.list(\"abcdef12-3456-7890-abcd-ef1234567890\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Transactions.Notes.ListAsync(\"abcdef12-3456-7890-abcd-ef1234567890\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "メモのページ（新しい順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "取引に付けられたメモの数。100までは正確な値で、100を超える場合は100が上限となります。この値からページを計算せず、`next`をたどってください。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionNote"
                      }
                    }
                  }
                },
                "examples": {
                  "API, Console and rule notes": {
                    "value": {
                      "count": 3,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "c1111111-2222-4333-8444-555555555555",
                          "note": "Customer confirmed the withdrawal by phone.",
                          "actor_email": null,
                          "actor_name": null,
                          "metadata": {
                            "mentioned_emails": [
                              "analyst@example.com"
                            ]
                          },
                          "created_at": "2026-10-16T10:05:12.481203Z"
                        },
                        {
                          "uuid": "c2222222-3333-4444-8555-666666666666",
                          "note": "Status changed from IN_REVIEW to APPROVED. Reason: Source of funds verified",
                          "actor_email": "reviewer@example.com",
                          "actor_name": "Alex Reviewer",
                          "metadata": {
                            "type": "status_change",
                            "previous_status": "IN_REVIEW",
                            "new_status": "APPROVED",
                            "reason_code": "SOF_VERIFIED",
                            "reason_label": "Source of funds verified"
                          },
                          "created_at": "2026-10-15T17:22:40.103911Z"
                        },
                        {
                          "uuid": "c3333333-4444-4555-8666-777777777777",
                          "note": "Large withdrawal to a new wallet: check the source of funds.",
                          "actor_email": null,
                          "actor_name": "Rule Engine",
                          "metadata": {
                            "rule_uuid": "d1111111-2222-4333-8444-555555555555",
                            "source": "rule_action"
                          },
                          "created_at": "2026-10-15T08:42:12.004518Z"
                        }
                      ]
                    }
                  },
                  "No notes yet": {
                    "value": {
                      "count": 0,
                      "next": null,
                      "previous": null,
                      "results": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`limit`または`offset`が1000000を超えています。レスポンス本文はオブジェクトではなく、メッセージのJSON配列です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "examples": {
                  "Limit too large": {
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  },
                  "Offset too large": {
                    "value": [
                      "offset must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。キーがない場合は汎用メッセージが返され、誤った、失効した、または期限切れのキーには`401`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without transactions read": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの取引がアプリケーションに存在しません(未作成、削除済み、または別のアプリケーションが所有)。UUIDではない`transaction_id`はAPIに到達せず、このJSONボディの代わりに`404`のHTMLページが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No Transaction matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      },
      "post": {
        "summary": "取引メモを作成",
        "description": "監視対象の取引のレビュータイムラインに、Consoleのレビュアーが閲覧できるプレーンテキストのメモを追加します。メモは判定ではなく補足情報です。取引の`status`、`score`、アラートは変更されず、Webhookは送信されず、請求も発生しません。取引の`activities`に`TRANSACTION_NOTE_ADDED`エントリが追加されます。\n\nAPIキーで作成したメモには作成者がありません。`actor_email`と`actor_name`は`null`になるため、作成者が必要な場合は本文に記載してください。`mentioned_emails`内のすべてのアドレスは組織のメンバーのものである必要があり、そうでない場合はリクエスト全体が`400`で失敗します。メンションは小文字に変換され、重複を除いて保存されます。このエンドポイントは、メンションされたメンバーに通知しません。\n\n呼び出すたびに新しいメモが作成されるため、タイムアウトしたリクエストを再試行するとメモが2件追加される可能性があります。再試行する前にメモの一覧を取得してください。メモを編集または削除するAPIエンドポイントはありません。スコープ付きAPIキーには`transactions: write`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを呼び出せません。",
        "operationId": "create_transaction_note",
        "x-didit-sdk": {
          "resource": "transactions.notes",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "Diditの取引UUIDで、`POST /v3/transactions/`および`GET /v3/transactions/`が返す`uuid`です。独自の`txn_id`は受け付けられません。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "abcdef12-3456-7890-abcd-ef1234567890"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "note"
                ],
                "properties": {
                  "note": {
                    "type": "string",
                    "minLength": 1,
                    "description": "プレーンテキストのメモ。先頭と末尾の空白は削除され、空のメモは拒否されます。文字数の制限はありません。"
                  },
                  "mentioned_emails": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "email"
                    },
                    "default": [],
                    "description": "メンションする組織メンバーのメールアドレス。それぞれが組織メンバーの有効なメールアドレスである必要があります。"
                  }
                }
              },
              "examples": {
                "Note with a mention": {
                  "value": {
                    "note": "Customer confirmed the withdrawal by phone.",
                    "mentioned_emails": [
                      "analyst@example.com"
                    ]
                  }
                },
                "Plain note": {
                  "value": {
                    "note": "Source of funds document requested by email."
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/notes/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"note\": \"Customer confirmed the withdrawal by phone.\", \"mentioned_emails\": [\"analyst@example.com\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.transactions.notes.create(\n    \"abcdef12-3456-7890-abcd-ef1234567890\",\n    note=\"Customer confirmed the withdrawal by phone.\",\n    mentioned_emails=[\"analyst@example.com\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.transactions.notes.create(\"abcdef12-3456-7890-abcd-ef1234567890\", {\n  note: \"Customer confirmed the withdrawal by phone.\",\n  mentioned_emails: [\"analyst@example.com\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Notes.Create(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\", didit.TransactionsNotesCreateParams{\n\tNote:            \"Customer confirmed the withdrawal by phone.\",\n\tMentionedEmails: didit.Some([]string{\"analyst@example.com\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.TransactionsNotesCreateParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.transactions().notes().create(\"abcdef12-3456-7890-abcd-ef1234567890\", TransactionsNotesCreateParams.builder()\n        .note(\"Customer confirmed the withdrawal by phone.\")\n        .mentionedEmails(List.of(\"analyst@example.com\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->transactions->notes->create('abcdef12-3456-7890-abcd-ef1234567890', [\n    'note' => 'Customer confirmed the withdrawal by phone.',\n    'mentioned_emails' => ['analyst@example.com'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.transactions.notes.create(\n  \"abcdef12-3456-7890-abcd-ef1234567890\",\n  note: \"Customer confirmed the withdrawal by phone.\",\n  mentioned_emails: [\"analyst@example.com\"]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Transactions.Notes.CreateAsync(\"abcdef12-3456-7890-abcd-ef1234567890\", new TransactionsNotesCreateParams\n{\n    Note = \"Customer confirmed the withdrawal by phone.\",\n    MentionedEmails = new string[] { \"analyst@example.com\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "メモが作成されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionNote"
                },
                "examples": {
                  "Created": {
                    "value": {
                      "uuid": "c1111111-2222-4333-8444-555555555555",
                      "note": "Customer confirmed the withdrawal by phone.",
                      "actor_email": null,
                      "actor_name": null,
                      "metadata": {
                        "mentioned_emails": [
                          "analyst@example.com"
                        ]
                      },
                      "created_at": "2026-10-16T10:05:12.481203Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ボディが無効です。`note`がない、null、または空白である、`mentioned_emails`に無効なアドレスがある（エラーはリスト内の位置をキーとします）、またはメンションされたアドレスが組織のメンバーではありません。何も作成されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "フィールド名をキーとしたフィールドエラー。",
                  "additionalProperties": {}
                },
                "examples": {
                  "Missing note": {
                    "value": {
                      "note": [
                        "This field is required."
                      ]
                    }
                  },
                  "Blank note": {
                    "value": {
                      "note": [
                        "This field may not be blank."
                      ]
                    }
                  },
                  "Invalid email": {
                    "value": {
                      "mentioned_emails": {
                        "0": [
                          "Enter a valid email address."
                        ]
                      }
                    }
                  },
                  "Not an organization member": {
                    "value": {
                      "mentioned_emails": [
                        "Mentioned users must belong to this organization and have access to this application."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。キーがない場合は汎用メッセージが返され、誤った、失効した、または期限切れのキーには`401`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without transactions write": {
                    "value": {
                      "detail": "This API key has no write access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの取引がアプリケーションに存在しません(未作成、削除済み、または別のアプリケーションが所有)。UUIDではない`transaction_id`はAPIに到達せず、このJSONボディの代わりに`404`のHTMLページが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No Transaction matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり300件を超える書き込みリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/transactions/{transaction_id}/related/": {
      "get": {
        "summary": "関連する取引を一覧表示",
        "description": "この取引と同じ人物または企業が関わる、アプリケーション内の他の取引を一覧表示します。いずれかの当事者が、役割を問わず、この取引の当事者のいずれかと同じ`vendor_data`を持つ場合、その取引は関連していると見なされます。この取引自体が返されることはなく、`vendor_data`のない当事者は無視されます。そのため、この取引の当事者がいずれもこれを持たない場合、結果は常に空になります。\n\n結果は`GET /v3/transactions/`のサマリー形式で、新しい順（`txn_date`、次に`created_at`）に並びます。ページネーションには`limit`と`offset`を使用します。`count`は100までは正確な値で、それを超えると上限の100になるため、`next`が`null`になるまでたどってください。\n\nスコープ付きAPIキーには`transactions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを呼び出せません。この一覧を完全なものにするには、すべての[取引](https://docs.didit.me/ja/transaction-monitoring/transactions#対象者と取引相手)で、同じ人物または企業に対して同じ`vendor_data`を送信してください。",
        "operationId": "list_related_transactions",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "list_related",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "description": "Diditの取引UUIDで、`POST /v3/transactions/`および`GET /v3/transactions/`が返す`uuid`です。独自の`txn_id`は受け付けられません。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "abcdef12-3456-7890-abcd-ef1234567890"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000
            },
            "description": "1ページあたりの取引件数です。デフォルトは50です。正の整数でない値は50として扱われ、1000000を超える値は`400`を返します。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000
            },
            "description": "返す最初の取引の0始まりの位置です。`next`をたどる方法を推奨します。整数でない値は0として扱われ、1000000を超える値は`400`を返します。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/related/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.transactions.list_related(\n    \"abcdef12-3456-7890-abcd-ef1234567890\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.transactions.listRelated(\"abcdef12-3456-7890-abcd-ef1234567890\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.ListRelatedAutoPaging(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\", didit.TransactionsListRelatedParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.transactions().listRelated(\"abcdef12-3456-7890-abcd-ef1234567890\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->transactions->listRelated('abcdef12-3456-7890-abcd-ef1234567890') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.transactions.list_related(\"abcdef12-3456-7890-abcd-ef1234567890\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Transactions.ListRelatedAsync(\"abcdef12-3456-7890-abcd-ef1234567890\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "関連する取引のページ（新しい順）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "関連する取引の件数です。100件までは正確な値で、それを超える場合は100で打ち切られます。この値からページを計算せず、`next`をたどってください。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページの絶対URL。最後のページでは`null`になります。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページの絶対URL。最初のページでは`null`になります。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionSummary"
                      }
                    }
                  }
                },
                "examples": {
                  "One related transaction": {
                    "value": {
                      "count": 1,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "abcdef99-3456-4890-abcd-ef1234567890",
                          "transaction_number": 4087,
                          "txn_id": "your-txn-2026-10-02-017",
                          "transaction_type": "finance",
                          "action_type": "deposit",
                          "status": "APPROVED",
                          "source": "LIVE",
                          "direction": "INBOUND",
                          "amount": "250",
                          "currency": "EUR",
                          "currency_type": "fiat",
                          "preferred_currency_amount": "270.08",
                          "preferred_currency_code": "USD",
                          "payment_details": "Card top-up",
                          "txn_date": "2026-10-02T14:10:00Z",
                          "created_at": "2026-10-02T14:10:03.512244Z",
                          "score": 12,
                          "severity": "LOW",
                          "decision_reason_code": null,
                          "decision_reason_label": null,
                          "tags": [],
                          "subject_name": "Maria Garcia",
                          "subject_vendor_data": "user-12345",
                          "subject_type": "user",
                          "subject_uuid": "e1111111-2222-4333-8444-555555555555",
                          "counterparty_name": null,
                          "counterparty_vendor_data": null,
                          "counterparty_country": null,
                          "subject_country": "ESP",
                          "assigned_to_name": null,
                          "travel_rule_status": null,
                          "application_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                          "application_name": "Production app",
                          "organization_id": "11111111-2222-3333-4444-555555555555",
                          "organization_name": "Example Org"
                        }
                      ]
                    }
                  },
                  "No party has vendor_data": {
                    "value": {
                      "count": 0,
                      "next": null,
                      "previous": null,
                      "results": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`limit`または`offset`が1000000を超えています。レスポンス本文はオブジェクトではなく、メッセージのJSON配列です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "examples": {
                  "Limit too large": {
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  },
                  "Offset too large": {
                    "value": [
                      "offset must not exceed 1000000."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。キーがない場合は汎用メッセージが返され、誤った、失効した、または期限切れのキーには`401`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without transactions read": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの取引がアプリケーションに存在しません(未作成、削除済み、または別のアプリケーションが所有)。UUIDではない`transaction_id`はAPIに到達せず、このJSONボディの代わりに`404`のHTMLページが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No Transaction matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/businesses/{business_session_id}/pdf/": {
      "get": {
        "summary": "企業セッションのPDFレポートをダウンロード",
        "description": "1件の法人確認 (KYB)セッションのPDFレポートを生成します。レポートには、法人登記データ、主要人物と実質的支配者、書類、AML結果、その他のワークフロー機能に加え、セッションのタグとレビュー履歴が含まれます。ホワイトラベルのカスタマイズを有効にすると、レポートには貴社のロゴとプライバシーポリシーのURLが記載されます。レスポンスの本文はJSONではなく、PDFそのもの(`application/pdf`)です。\n\nセッションのステータスは`Approved`、`Declined`、`In Review`のいずれかである必要があります。それ以外のステータスでは`403`が返されるため、先に`status.updated`の[Webhook](https://docs.didit.me/ja/integration/webhooks)を待ってください。レポートは呼び出しのたびに生成され、料金は発生しません。繰り返し取得せず、ファイルを保存してください。`GET /v3/session/{sessionId}/generate-pdf/`は、セッションIDのみで同種のレポートを生成します。\n\nPDFレポートはメディアとして扱われます。スコープ付きAPIキーには`businesses: read`と`media: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを呼び出せません。",
        "operationId": "get_business_session_pdf",
        "x-didit-sdk": {
          "resource": "businesses",
          "method": "generate_session_pdf",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Businesses"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。",
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。APIキーが属するアプリケーションである必要があります。他のアプリケーションでキーを使用すると`403`が返されます。",
            "example": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
          },
          {
            "name": "business_session_id",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB)セッションの`session_id`で、セッション作成時に返されたものです。別のアプリケーションのセッションを指定すると`404`が返されます。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "22222222-3333-4444-5555-666666666666"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/businesses/22222222-3333-4444-5555-666666666666/pdf/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  --output business_report.pdf"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\ncontent = client.businesses.generate_session_pdf(\n    \"22222222-3333-4444-5555-666666666666\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst content = await didit.businesses.generateSessionPdf(\"22222222-3333-4444-5555-666666666666\");\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresp, err := client.Businesses.GenerateSessionPDF(ctx, \"22222222-3333-4444-5555-666666666666\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.businesses().generateSessionPdf(\"22222222-3333-4444-5555-666666666666\")\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$content = $didit->businesses->generateSessionPdf('22222222-3333-4444-5555-666666666666');\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ncontent = didit.businesses.generate_session_pdf(\"22222222-3333-4444-5555-666666666666\")\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar content = await client.Businesses.GenerateSessionPdfAsync(\"22222222-3333-4444-5555-666666666666\");\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ],
        "responses": {
          "200": {
            "description": "レンダリングされたPDF。バイナリの`application/pdf`として直接返されます。",
            "headers": {
              "Content-Disposition": {
                "description": "常に`attachment; filename=business_{business_session_id}.pdf`です。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=business_22222222-3333-4444-5555-666666666666.pdf"
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストが許可されていないか、セッションが完了していません。`detail`を確認してください: `Approved`、`Declined`、`In Review`のいずれでもないセッション、APIキーがない（誤った、失効した、または期限切れのキーには`401`）、キーのアプリケーションではない`application_id`、`media: read`または`businesses: read`のないスコープ付きキー、ワークフローまたは承認済みセッションに限定されたキー、キーのIPリスト外からのリクエストです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Session not finished": {
                    "value": {
                      "detail": "You can only generate a PDF for sessions in review, declined or approved."
                    }
                  },
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without media read": {
                    "value": {
                      "detail": "This API key has no read access to media."
                    }
                  },
                  "Scoped key without businesses read": {
                    "value": {
                      "detail": "This API key has no read access to companies."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このIDの企業セッションはアプリケーション内に存在しません（作成されていない、削除された、または別のアプリケーションが所有している）。UUIDではない値を指定すると、このJSON本文ではなく`404`のHTMLページが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "Business session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/transactions/{transaction_uuid}/pdf/": {
      "get": {
        "summary": "取引のPDFレポートをダウンロード",
        "description": "監視対象の取引1件をPDFレポートとして生成します。内容は、概要と判定結果、当事者と支払い方法、カスタムプロパティ、アラートとルールの実行結果、スクリーニングとトラベルルールの結果、ネットワークの概要、費用の内訳、最大50件の関連取引、直近20件のアクティビティです。ボディはJSONではなくPDFそのもの（`application/pdf`）です。\n\nレポートは呼び出しのたびに取引の現在のデータから生成されるため、ステータスが変わった後は再度リクエストしてください。データは何も保存されず、課金も発生しません。生成には数秒かかる場合があるため、クライアントのタイムアウトには十分な値を設定してください。\n\nこのエンドポイントはアプリケーション単位のパスにあります。URLには、組織IDと、APIキーが属するアプリケーションのIDを指定してください（[組織IDの確認方法](https://docs.didit.me/ja/getting-started/api-authentication#組織idの確認方法)）。PDFレポートはメディアとして扱われます。スコープ付きAPIキーには`media: read`と`transactions: read`が必要です。一部のワークフローまたは承認済みセッションに限定されたキーでは、このエンドポイントを呼び出せません。",
        "operationId": "get_transaction_pdf",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "generate_pdf",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。",
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。APIキーが属するアプリケーションである必要があります。他のアプリケーションでキーを使用すると`403`が返されます。",
            "example": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
          },
          {
            "name": "transaction_uuid",
            "in": "path",
            "required": true,
            "description": "Diditの取引UUIDで、`POST /v3/transactions/`および`GET /v3/transactions/`が返す`uuid`です。独自の`txn_id`は受け付けられません。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "abcdef12-3456-7890-abcd-ef1234567890"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/transactions/abcdef12-3456-7890-abcd-ef1234567890/pdf/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  --output transaction_report.pdf"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\ncontent = client.transactions.generate_pdf(\n    \"abcdef12-3456-7890-abcd-ef1234567890\",\n)\nwith open(\"download.pdf\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst content = await didit.transactions.generatePdf(\"abcdef12-3456-7890-abcd-ef1234567890\");\nawait writeFile(\"download.pdf\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresp, err := client.Transactions.GeneratePDF(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.transactions().generatePdf(\"abcdef12-3456-7890-abcd-ef1234567890\")\n        .writeTo(Path.of(\"download.pdf\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$content = $didit->transactions->generatePdf('abcdef12-3456-7890-abcd-ef1234567890');\n$content->saveTo('download.pdf');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ncontent = didit.transactions.generate_pdf(\"abcdef12-3456-7890-abcd-ef1234567890\")\nFile.binwrite(\"download.pdf\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar content = await client.Transactions.GeneratePdfAsync(\"abcdef12-3456-7890-abcd-ef1234567890\");\nawait content.SaveToAsync(\"download.pdf\");"
          }
        ],
        "responses": {
          "200": {
            "description": "レンダリングされたPDF。バイナリの`application/pdf`として直接返されます。",
            "headers": {
              "Content-Disposition": {
                "description": "常に`attachment; filename=transaction_{transaction_uuid}.pdf`です。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=transaction_abcdef12-3456-7890-abcd-ef1234567890.pdf"
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`detail`を確認してください。原因は、APIキーがない（誤った、失効した、または期限切れのキーの場合は`401`）、`application_id`がキーのアプリケーションと一致しない、`media: read`または`transactions: read`を持たないスコープ付きキー、ワークフローまたは承認済みセッションに限定されたキー、またはキーのIPリスト外からのリクエストのいずれかです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without media read": {
                    "value": {
                      "detail": "This API key has no read access to media."
                    }
                  },
                  "Scoped key without transactions read": {
                    "value": {
                      "detail": "This API key has no read access to transactions."
                    }
                  },
                  "Key limited to workflows or approved sessions": {
                    "value": {
                      "detail": "This API key only reaches sessions inside its workflow or status limits, so it can't use this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このUUIDの取引がアプリケーションに存在しません(未作成、削除済み、または別のアプリケーションが所有)。UUIDではない`transaction_uuid`はAPIに到達せず、このJSONボディの代わりに`404`のHTMLページが返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Not found": {
                    "value": {
                      "detail": "No Transaction matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/analytics/": {
      "get": {
        "summary": "アプリケーションの分析データを取得",
        "description": "Business Consoleの[分析ダッシュボード](https://docs.didit.me/ja/console/analytics)の元になる数値を、期間を指定して読み取ります。`scope`と`widget_keys`を指定しない場合、レスポンスはユーザー認証 (KYC) のサマリー(`ApplicationAnalyticsSummary`)です。日別のセッション数、ステータス別の合計、コンバージョン率、同じ長さの直前期間における同じ数値、地域、属性、デバイス、ワークフローのファネル、アクティブな検証時間、再提出、警告、時系列データが含まれます。`scope`または`widget_keys`を指定した場合は、1つのダッシュボードタブのウィジェット(`ApplicationAnalyticsWidgetResponse`)が返されます。タブは`kyc`、`kyb`、`transactions`、`home`のいずれかです。\n\nセッション数はセッション作成日(UTC)ごとに集計され、各セッションの現在のステータスを反映します。バックグラウンドで更新される日次集計に基づくため、最新のアクティビティが反映されるまで少し時間がかかる場合があります。無効なワークフローIDやバージョンは拒否されず、無視されます。料金は発生しません。\n\nこのエンドポイントを呼び出せるのはフルアクセスのAPIキーのみです。スコープ付きキーは、どのようなアクセス権を持っていても、すべて`403`を受け取ります。別のアプリケーションのキーも同様です。[APIキー](https://docs.didit.me/ja/console/api-keys)を参照してください。",
        "operationId": "get_application_analytics",
        "x-didit-sdk": {
          "resource": "analytics",
          "method": "retrieve",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Analytics"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。",
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。APIキーが属するアプリケーションである必要があります。他のアプリケーションでキーを使用すると`403`が返されます。",
            "example": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-10-01"
            },
            "description": "範囲の初日を`YYYY-MM-DD`形式で指定します。この日を含みます（UTC）。`end_date`と一緒に送信してください。どちらかが欠けている場合は両方とも無視され、範囲は今日の30日前から今日までになります。"
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-10-15"
            },
            "description": "期間の最終日。`YYYY-MM-DD`形式で、当日を含みます(UTC)。未来の日付は今日として扱われます。期間は730日を超えることはできません。"
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "home",
                "kyc",
                "kyb",
                "transactions"
              ]
            },
            "description": "ウィジェットを返すダッシュボードタブ（大文字と小文字を区別しません）。KYCサマリーを取得する場合は、`widget_keys`とともに省略してください。`widget_keys`のみを送信した場合は`kyc`とみなされます。`home`はKYC、KYB、取引のいずれのウィジェットも受け付け、デフォルトではアプリケーションに保存されたホームレイアウトを使用します。"
          },
          {
            "name": "widget_keys",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "tx_count_total,tx_count_daily"
            },
            "description": "カンマ区切りのウィジェットキー。指定した順序で返されます。スコープが受け付けないキーは除外され、1つも残らない場合はスコープのデフォルトが返されます。KYC: `kyc_sessions_volume`, `kyc_warning_insights`, `kyc_id_locations`, `kyc_ip_locations`, `kyc_workflow_funnel`, `kyc_average_verification_time`, `kyc_conversion_rate`, `kyc_conversion_by_country`, `kyc_resubmission_insights`, `kyc_original_status_distribution`, `kyc_database_validation_coverage`, `kyc_database_validation_latency`, `kyc_demographics`, `kyc_device_details`。KYB: `kyb_sessions_volume`, `kyb_workflow_funnel`, `kyb_average_verification_time`, `kyb_ip_locations`, `kyb_business_country_distribution`, `kyb_warning_insights`, `kyb_conversion_rate`, `kyb_conversion_by_country`, `kyb_industry_breakdown`, `kyb_resubmission_insights`, `kyb_original_status_distribution`, `kyb_registry_coverage`, `kyb_registry_data_completeness`, `kyb_device_details`。取引: `tx_count_total`, `tx_count_daily`, `tx_volume_total_preferred_currency`, `tx_volume_daily_preferred_currency`, `tx_average_amount`, `tx_average_amount_daily`, `tx_transaction_category_breakdown`, `tx_action_type_breakdown`, `tx_status_volume_trend`, `tx_user_ip_or_country_distribution`, `tx_tag_breakdown`, `tx_top_rules_triggered`, `tx_team_member_performance`, `tx_score_histogram`。"
          },
          {
            "name": "workflow_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "33333333-4444-5555-6666-777777777777"
            },
            "description": "カンマ区切りのワークフローID。KYCサマリーと、KYCおよびKYBのウィジェットを、指定したワークフローに限定します。UUIDでない値は無視され、有効な値が1つもない場合、このフィルターは適用されません。サマリーでは`workflow_id`も使用できます。"
          },
          {
            "name": "versions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "3,4"
            },
            "description": "カンマ区切りのワークフローバージョン番号。`workflow_ids`と併用した場合にのみ適用され、整数でない値は無視されます。エイリアスとして`version`も使用できます。"
          },
          {
            "name": "branch_path_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "default"
            },
            "description": "カンマ区切りの分岐パスID。`workflow_ids`と併用した場合にのみ適用され、対象はKYCの数値のみです。数値は現在`default`(すべてのパスの合計)についてのみ記録されているため、それ以外の値を指定すると空の数値が返されます。`branch_path_id`もエイリアスとして受け付けます。"
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "取引ウィジェットのみ：カンマ区切りのタグUUIDまたはタグ名。"
          },
          {
            "name": "transaction_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "finance"
            },
            "description": "取引ウィジェットのみ：カンマ区切りの取引カテゴリ。"
          },
          {
            "name": "action_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "withdrawal"
            },
            "description": "取引ウィジェットのみ：カンマ区切りのアクションタイプ（大文字と小文字を区別しません）。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/analytics/?start_date=2026-10-01&end_date=2026-10-15' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.analytics.retrieve()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.analytics.retrieve();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Analytics.Retrieve(ctx, didit.AnalyticsRetrieveParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.analytics().retrieve();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->analytics->retrieve();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.analytics.retrieve\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Analytics.RetrieveAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "KYCの概要。`scope`または`widget_keys`が送信された場合は、要求されたウィジェット。",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApplicationAnalyticsSummary"
                    },
                    {
                      "$ref": "#/components/schemas/ApplicationAnalyticsWidgetResponse"
                    }
                  ]
                },
                "examples": {
                  "KYC summary": {
                    "value": {
                      "grouping_mode": "day",
                      "data_points": [
                        {
                          "rounded_date": "2026-10-14",
                          "total": 12,
                          "approved": 8,
                          "declined": 1,
                          "canceled": 1,
                          "pending": 2,
                          "in_review": 1,
                          "expired": 1,
                          "abandoned": 0,
                          "in_progress": 1,
                          "not_started": 0,
                          "manually_approved": 1,
                          "manually_declined": 0
                        },
                        {
                          "rounded_date": "2026-10-15",
                          "total": 10,
                          "approved": 6,
                          "declined": 2,
                          "canceled": 0,
                          "pending": 2,
                          "in_review": 2,
                          "expired": 0,
                          "abandoned": 0,
                          "in_progress": 0,
                          "not_started": 0,
                          "manually_approved": 0,
                          "manually_declined": 1
                        }
                      ],
                      "request_breakdown": {
                        "total_approved": 14,
                        "total_in_review": 3,
                        "total_declined": 3,
                        "total_canceled": 1,
                        "total_pending": 4,
                        "total_expired": 1,
                        "total_abandoned": 0,
                        "total_in_progress": 1,
                        "total_not_started": 0,
                        "total_manually_approved": 1,
                        "total_manually_declined": 1
                      },
                      "conversion_rate": 70.0,
                      "location_stats": {
                        "countries": [
                          {
                            "session_count": 15,
                            "country": "Spain",
                            "country_code": "ES"
                          },
                          {
                            "session_count": 7,
                            "country": "Portugal",
                            "country_code": "PT"
                          }
                        ],
                        "ip_countries": [
                          {
                            "session_count": 15,
                            "country": "Spain",
                            "country_code": "ES"
                          },
                          {
                            "session_count": 7,
                            "country": "Portugal",
                            "country_code": "PT"
                          }
                        ],
                        "id_countries": [
                          {
                            "country": "Spain",
                            "country_code": "ES",
                            "session_count": 14
                          },
                          {
                            "country": "Portugal",
                            "country_code": "PT",
                            "session_count": 6
                          }
                        ],
                        "conversion_by_country": [
                          {
                            "country": "Spain",
                            "country_code": "ES",
                            "finished": 13,
                            "approved": 10
                          },
                          {
                            "country": "Portugal",
                            "country_code": "PT",
                            "finished": 6,
                            "approved": 4
                          }
                        ],
                        "cities": [
                          {
                            "session_count": 9,
                            "location": "Madrid, Spain",
                            "latitude": 40.4168,
                            "longitude": -3.7038
                          }
                        ]
                      },
                      "demographic_stats": {
                        "age_distribution": {
                          "under_18": 0,
                          "18_24": 5,
                          "25_34": 8,
                          "35_44": 4,
                          "45_64": 2,
                          "65_plus": 1
                        },
                        "gender_distribution": {
                          "M": 11,
                          "F": 9
                        }
                      },
                      "device_details": {
                        "device_models": [
                          {
                            "device": "Apple",
                            "count": 12
                          },
                          {
                            "device": "Android",
                            "count": 10
                          }
                        ],
                        "browsers": [
                          {
                            "browser": "Safari",
                            "count": 12
                          },
                          {
                            "browser": "Chrome",
                            "count": 10
                          }
                        ],
                        "operating_systems": [
                          {
                            "os": "iOS",
                            "count": 12
                          },
                          {
                            "os": "Android",
                            "count": 10
                          }
                        ]
                      },
                      "workflow_funnel_stats": {
                        "33333333-4444-5555-6666-777777777777": {
                          "total": 22,
                          "steps": {
                            "OCR": {
                              "reached": 21
                            },
                            "LIVENESS": {
                              "reached": 19
                            },
                            "FACE_MATCH": {
                              "reached": 19
                            },
                            "AML": {
                              "reached": 18
                            }
                          }
                        }
                      },
                      "verification_time_stats": {
                        "overall_avg_seconds": 64.0,
                        "overall_count": 18,
                        "per_feature": {
                          "OCR": {
                            "avg_seconds": 41.2,
                            "total_seconds": 741.6,
                            "count": 18
                          },
                          "LIVENESS": {
                            "avg_seconds": 22.8,
                            "total_seconds": 410.4,
                            "count": 18
                          }
                        },
                        "per_sub_step": {
                          "OCR": {
                            "front_id_photo": {
                              "avg_seconds": 18.3,
                              "total_seconds": 329.4,
                              "count": 18
                            }
                          }
                        }
                      },
                      "resubmission_stats": {
                        "first_pass": 17,
                        "second": 2,
                        "third_plus": 1,
                        "abandoned": 0
                      },
                      "warning_stats": {
                        "ID_VERIFICATION": {
                          "total": 21,
                          "risks": {
                            "DOCUMENT_EXPIRED": {
                              "error": 1,
                              "warning": 0,
                              "information": 0
                            }
                          }
                        },
                        "LIVENESS": {
                          "total": 19,
                          "risks": {
                            "LOW_LIVENESS_SCORE": {
                              "error": 0,
                              "warning": 2,
                              "information": 0
                            }
                          }
                        }
                      },
                      "original_status_stats": {
                        "approved": 13,
                        "in_review": 5,
                        "declined": 2
                      },
                      "demographic_time_series": [
                        {
                          "date": "2026-10-14",
                          "age_distribution": {
                            "under_18": 0,
                            "18_24": 3,
                            "25_34": 4,
                            "35_44": 2,
                            "45_64": 1,
                            "65_plus": 0
                          },
                          "gender_distribution": {
                            "M": 6,
                            "F": 4
                          }
                        },
                        {
                          "date": "2026-10-15",
                          "age_distribution": {
                            "under_18": 0,
                            "18_24": 2,
                            "25_34": 4,
                            "35_44": 2,
                            "45_64": 1,
                            "65_plus": 1
                          },
                          "gender_distribution": {
                            "M": 5,
                            "F": 5
                          }
                        }
                      ],
                      "device_time_series": [
                        {
                          "date": "2026-10-14",
                          "devices": {
                            "Apple": 7,
                            "Android": 5
                          },
                          "browsers": {
                            "Safari": 7,
                            "Chrome": 5
                          },
                          "operating_systems": {
                            "iOS": 7,
                            "Android": 5
                          }
                        },
                        {
                          "date": "2026-10-15",
                          "devices": {
                            "Apple": 5,
                            "Android": 5
                          },
                          "browsers": {
                            "Safari": 5,
                            "Chrome": 5
                          },
                          "operating_systems": {
                            "iOS": 5,
                            "Android": 5
                          }
                        }
                      ],
                      "verification_time_time_series": [
                        {
                          "date": "2026-10-14",
                          "overall_avg": 66.1,
                          "per_feature": {
                            "OCR": 42.0,
                            "LIVENESS": 24.1
                          }
                        },
                        {
                          "date": "2026-10-15",
                          "overall_avg": 61.5,
                          "per_feature": {
                            "OCR": 40.2,
                            "LIVENESS": 21.3
                          }
                        }
                      ],
                      "resubmission_time_series": [
                        {
                          "date": "2026-10-14",
                          "first_pass": 9,
                          "second": 1,
                          "third_plus": 0,
                          "abandoned": 0
                        },
                        {
                          "date": "2026-10-15",
                          "first_pass": 8,
                          "second": 1,
                          "third_plus": 1,
                          "abandoned": 0
                        }
                      ],
                      "original_status_time_series": [
                        {
                          "date": "2026-10-14",
                          "approved": 7,
                          "in_review": 3,
                          "declined": 1
                        },
                        {
                          "date": "2026-10-15",
                          "approved": 6,
                          "in_review": 2,
                          "declined": 1
                        }
                      ],
                      "previous_data_points": [
                        {
                          "rounded_date": "2026-10-12",
                          "total": 9,
                          "approved": 6,
                          "declined": 1,
                          "canceled": 1,
                          "pending": 1
                        },
                        {
                          "rounded_date": "2026-10-13",
                          "total": 11,
                          "approved": 7,
                          "declined": 2,
                          "canceled": 0,
                          "pending": 2
                        }
                      ],
                      "previous_request_breakdown": {
                        "total_approved": 13,
                        "total_in_review": 2,
                        "total_declined": 3,
                        "total_canceled": 1,
                        "total_pending": 3
                      }
                    }
                  },
                  "Transaction widgets": {
                    "value": {
                      "scope": "transactions",
                      "available_widget_keys": [
                        "tx_count_total",
                        "tx_count_daily",
                        "tx_volume_total_preferred_currency",
                        "tx_volume_daily_preferred_currency",
                        "tx_average_amount",
                        "tx_average_amount_daily",
                        "tx_transaction_category_breakdown",
                        "tx_action_type_breakdown",
                        "tx_status_volume_trend",
                        "tx_user_ip_or_country_distribution",
                        "tx_tag_breakdown",
                        "tx_top_rules_triggered",
                        "tx_team_member_performance",
                        "tx_score_histogram"
                      ],
                      "requested_widget_keys": [
                        "tx_count_total",
                        "tx_count_daily"
                      ],
                      "widgets": {
                        "tx_count_total": {
                          "kind": "metric",
                          "title": "Transaction count",
                          "value": 42
                        },
                        "tx_count_daily": {
                          "kind": "time_series",
                          "title": "Transaction count",
                          "items": [
                            {
                              "date": "2026-10-14",
                              "value": 20
                            },
                            {
                              "date": "2026-10-15",
                              "value": 22
                            }
                          ],
                          "previous_items": [
                            {
                              "date": "2026-10-12",
                              "value": 18
                            },
                            {
                              "date": "2026-10-13",
                              "value": 15
                            }
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "日付範囲またはスコープが無効です。ボディは、問題のあるパラメーターをキーとし、文字列のメッセージを値とするオブジェクトです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "examples": {
                  "Bad date format": {
                    "value": {
                      "start_date": "Invalid date format. Use YYYY-MM-DD (e.g., 2024-01-15)."
                    }
                  },
                  "Start after end": {
                    "value": {
                      "start_date": "Start date must be before or equal to end date."
                    }
                  },
                  "Range too long": {
                    "value": {
                      "date_range": "Date range cannot exceed 730 days (2 years)."
                    }
                  },
                  "Unknown scope": {
                    "value": {
                      "scope": "Unsupported analytics scope."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`detail`を確認してください。原因は、APIキーがない（誤った、失効した、または期限切れのキーの場合は`401`）、別のアプリケーションのキー、スコープ付きキー全般、またはキーのIPリスト外からのリクエストのいずれかです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key": {
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/analytics/today/": {
      "get": {
        "summary": "本日の認証数を時間別に取得",
        "operationId": "get_application_analytics_today",
        "x-didit-sdk": {
          "resource": "analytics",
          "method": "retrieve_today",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Analytics"
        ],
        "description": "本日のユーザー認証 (KYC)セッションを、`tz`における現地時間の午前0時から、作成された現地時間の時間帯ごとに集計し、1週間前の同じ曜日の同じ時間帯と並べ、それぞれが現在保持している結果(承認済み、レビュー中、却下)別に分けたものです。これはBusiness Consoleのホームにあるボリュームカードです。\n\n`total`は本日これまでの件数です。`previous_total_so_far`は比較対象日を同じ現地時刻までに限って集計するため、両者の差は両日の同じ時間帯を比較したものになります。本日のこれからの時間帯は`0`です。時計が切り替わる日は23時間または25時間になります。存在しない時間帯は`0`のままとなり、重複する時間帯には両方が含まれます。",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。",
            "example": "11111111-2222-3333-4444-555555555555"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。APIキーが属するアプリケーションである必要があります。他のアプリケーションでキーを使用すると`403`が返されます。",
            "example": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "UTC",
              "example": "Europe/Madrid"
            },
            "description": "その深夜0時を今日の開始とするIANAタイムゾーン。例: `Europe/Madrid`、`America/Mexico_City`。UTCの場合は省略します。"
          }
        ],
        "responses": {
          "200": {
            "description": "本日の認証件数(現地時間の時間帯ごと)、比較対象日の件数、および本日の結果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationAnalyticsToday"
                },
                "examples": {
                  "Madrid, 14:00": {
                    "value": {
                      "time_zone": "Europe/Madrid",
                      "date": "2026-10-30",
                      "current_hour": 14,
                      "previous_date": "2026-10-23",
                      "hours": [
                        3,
                        1,
                        0,
                        0,
                        1,
                        2,
                        4,
                        9,
                        14,
                        18,
                        21,
                        19,
                        22,
                        24,
                        27,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0
                      ],
                      "previous_hours": [
                        2,
                        1,
                        1,
                        0,
                        1,
                        3,
                        5,
                        8,
                        12,
                        16,
                        19,
                        18,
                        20,
                        22,
                        24,
                        26,
                        23,
                        19,
                        15,
                        12,
                        9,
                        7,
                        5,
                        3
                      ],
                      "total": 165,
                      "previous_total_so_far": 151,
                      "outcomes": {
                        "approved": 139,
                        "in_review": 6,
                        "declined": 18
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "不明なタイムゾーンです。ボディはパラメーターをキーとし、メッセージのリストを値とします。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Unknown time zone": {
                    "value": {
                      "tz": [
                        "Unknown time zone: Europe/Atlantis."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。期限切れになるのは有効期限を指定して作成されたキーのみで、その日以降、このキーを使ったすべてのリクエストは`401`を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`detail`を確認してください。原因は、APIキーがないか無効（`401`になることはありません）、別のアプリケーションのキー、スコープ付きキー全般、またはキーのIPリスト外からのリクエストのいずれかです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key": {
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "Outside the key's IP list": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "このAPIキーで1分あたり600件を超えるGETリクエストがありました。`Retry-After`に示された秒数だけ待ってから再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "現在の1分間のウィンドウがリセットされるまでの秒数です。",
                "schema": {
                  "type": "integer",
                  "example": 23
                }
              },
              "X-RateLimit-Limit": {
                "description": "この枠で1分あたりに許可されるリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ウィンドウがリセットされるUnix時刻。",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/analytics/today/?tz=Europe%2FMadrid' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          }
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/webhooks/": {
      "get": {
        "summary": "セッションのWebhook配信を一覧表示",
        "description": "1つの認証セッション、ユーザー(KYC)または企業(KYB)についてDiditが記録したすべてのWebhook配信を、新しい順にプレーンなJSON配列(ページネーションなし)で一覧表示します。各エントリは1つの送信先への1回の試行です。初回送信、各自動[再試行](https://docs.didit.me/ja/integration/webhooks#再試行ポリシー)、各再送はそれぞれ独自の`uuid`を持つ別のエントリとなり、再試行と再送ではペイロードの`event_id`が維持されます。`request_header`と`request_body`はJSONテキストです。署名とペイロードを読み取るにはパースしてください。配信記録は約30日間利用できるため、空の配列は、そのセッションでまだWebhookが送信されていないか、すべての配信がそれより古いことを意味します。スコープ付きAPIキーには`sessions: read`と`decisions: read`が必要です。",
        "operationId": "get_v3_session_webhooks",
        "x-didit-sdk": {
          "resource": "sessions.webhooks",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー(KYC)または企業(KYB)の検証セッションのUUID。`POST /v3/session/`が返す`session_id`です。サーバーは両方のセッションタイプに対してIDを解決します。\n\n**有効なUUIDである必要があります。** ルートは正しい形式のUUIDにのみ一致するため、形式が不正な値はアプリケーションコードが実行される前にURLルーターで拒否され、レスポンスは以下に示すJSONの`{\"detail\": ...}`エンベロープではなく、`404`の**HTML**ページになります。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "22222222-3333-4444-5555-666666666666"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/22222222-3333-4444-5555-666666666666/webhooks/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.webhooks.list(\n    \"22222222-3333-4444-5555-666666666666\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.webhooks.list(\"22222222-3333-4444-5555-666666666666\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Webhooks.List(ctx, \"22222222-3333-4444-5555-666666666666\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().webhooks().list(\"22222222-3333-4444-5555-666666666666\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->webhooks->list('22222222-3333-4444-5555-666666666666');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.webhooks.list(\"22222222-3333-4444-5555-666666666666\").each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Webhooks.ListAsync(\"22222222-3333-4444-5555-666666666666\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "このセッションについて記録されたすべての配信を新しい順に示します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SessionWebhookDelivery"
                  }
                },
                "examples": {
                  "Failed delivery and its successful retry": {
                    "value": [
                      {
                        "uuid": "66666666-7777-8888-9999-000000000002",
                        "session_id": "22222222-3333-4444-5555-666666666666",
                        "request_url": "https://yourapp.com/webhooks/didit",
                        "response_status": 200,
                        "status": "In Progress",
                        "webhook_type": "status.updated",
                        "request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"9188851d160b5b3aacfc946e4dde1f061b7e568662518942c927ddaf507f533d\", \"X-Signature-V2\": \"381236af514d3fb538579365ac5a24f2464ce1b8224c6e770c60d8201c43ecc5\", \"X-Signature-Simple\": \"4740131dc38f29e78a8508371979be74967d5307464494bd3148a03b4d6c8716\", \"X-Timestamp\": \"1792056139\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
                        "request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792056139,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}",
                        "created_at": "2026-10-15T09:22:19.104233Z"
                      },
                      {
                        "uuid": "66666666-7777-8888-9999-000000000001",
                        "session_id": "22222222-3333-4444-5555-666666666666",
                        "request_url": "https://yourapp.com/webhooks/didit",
                        "response_status": 503,
                        "status": "In Progress",
                        "webhook_type": "status.updated",
                        "request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b\", \"X-Signature-V2\": \"927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5\", \"X-Signature-Simple\": \"e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302\", \"X-Timestamp\": \"1792056078\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
                        "request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792056078,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}",
                        "created_at": "2026-10-15T09:21:18.412345Z"
                      }
                    ]
                  },
                  "No webhook sent yet": {
                    "value": []
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、または無効か失効しているキーの場合は`Authentication credentials were not provided or are invalid.`が返されます。別のアプリケーションのキーの場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権を持たないスコープ付きキーの場合は、不足しているアクセス権を示すメッセージが返されます。IP許可リスト外から使用されたキーの場合は`This API key can't be used from this IP address.`が返されます。不明な`sessionId`の場合は、認証情報が確認される前に`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Key of another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without sessions read": {
                    "value": {
                      "detail": "This API key has no read access to sessions."
                    }
                  },
                  "Scoped key without decisions read": {
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しないか削除されている（`Not found.`。認証情報の確認前に返されます）か、スコープ付きキーのワークフローまたはステータスの制限外です（`Session not found.`）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside the key's limits": {
                    "value": {
                      "detail": "Session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内にGETリクエストが600件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（600）。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-get"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/webhook/{webhook_uuid}": {
      "get": {
        "summary": "セッションのWebhook配信を取得",
        "description": "認証セッションの1件のWebhook配信を取得します。配信先のURL、エンドポイントが返したHTTPステータス、Diditが送信したヘッダーとJSONボディそのものが含まれます。`request_header`と`request_body`はJSONテキストです。[署名検証](https://docs.didit.me/ja/integration/webhooks#署名検証)を確認するには、パースしたボディから、配信に使われた送信先のシークレット（レガシーWebhook URLへの配信の場合はアプリケーションレベルのシークレット）を使って`X-Signature-V2`を再計算してください。パスの末尾にスラッシュは付きません。付けると`404`が返ります。スコープ付きAPIキーには`sessions: read`と`decisions: read`が必要です。",
        "operationId": "get_v3_session_webhook",
        "x-didit-sdk": {
          "resource": "sessions.webhooks",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー(KYC)または企業(KYB)の検証セッションのUUID。`POST /v3/session/`が返す`session_id`です。サーバーは両方のセッションタイプに対してIDを解決します。\n\n**有効なUUIDである必要があります。** ルートは正しい形式のUUIDにのみ一致するため、形式が不正な値はアプリケーションコードが実行される前にURLルーターで拒否され、レスポンスは以下に示すJSONの`{\"detail\": ...}`エンベロープではなく、`404`の**HTML**ページになります。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "22222222-3333-4444-5555-666666666666"
          },
          {
            "name": "webhook_uuid",
            "in": "path",
            "required": true,
            "description": "配信のUUIDで、`GET /v3/session/{sessionId}/webhooks/`が返すエントリーの`uuid`です。パスで指定したセッションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "66666666-7777-8888-9999-000000000001"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/22222222-3333-4444-5555-666666666666/webhook/66666666-7777-8888-9999-000000000001' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.webhooks.retrieve(\n    \"22222222-3333-4444-5555-666666666666\",\n    \"66666666-7777-8888-9999-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.webhooks.retrieve(\n  \"22222222-3333-4444-5555-666666666666\",\n  \"66666666-7777-8888-9999-000000000001\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Webhooks.Retrieve(ctx, \"22222222-3333-4444-5555-666666666666\", \"66666666-7777-8888-9999-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().webhooks().retrieve(\"22222222-3333-4444-5555-666666666666\", \"66666666-7777-8888-9999-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->webhooks->retrieve('22222222-3333-4444-5555-666666666666', '66666666-7777-8888-9999-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.webhooks.retrieve(\n  \"22222222-3333-4444-5555-666666666666\",\n  \"66666666-7777-8888-9999-000000000001\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Webhooks.RetrieveAsync(\"22222222-3333-4444-5555-666666666666\", \"66666666-7777-8888-9999-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "リクエストヘッダーとボディを含む配信です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionWebhookDelivery"
                },
                "examples": {
                  "Connection failure": {
                    "value": {
                      "uuid": "66666666-7777-8888-9999-000000000001",
                      "session_id": "22222222-3333-4444-5555-666666666666",
                      "request_url": "https://yourapp.com/webhooks/didit",
                      "response_status": 503,
                      "status": "In Progress",
                      "webhook_type": "status.updated",
                      "request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b\", \"X-Signature-V2\": \"927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5\", \"X-Signature-Simple\": \"e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302\", \"X-Timestamp\": \"1792056078\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
                      "request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792056078,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}",
                      "created_at": "2026-10-15T09:21:18.412345Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、または無効か失効しているキーの場合は`Authentication credentials were not provided or are invalid.`が返されます。別のアプリケーションのキーの場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権を持たないスコープ付きキーの場合は、不足しているアクセス権を示すメッセージが返されます。IP許可リスト外から使用されたキーの場合は`This API key can't be used from this IP address.`が返されます。不明な`sessionId`の場合は、認証情報が確認される前に`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Key of another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without sessions read": {
                    "value": {
                      "detail": "This API key has no read access to sessions."
                    }
                  },
                  "Scoped key without decisions read": {
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しないか削除されている（`Not found.`。認証情報の確認前に返されます）か、スコープ付きキーのワークフローまたはステータスの制限外です（`Session not found.`）。存在しない配信、別のセッションに属する配信、または利用できなくなった配信には`No WebhookLog matches the given query.`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside the key's limits": {
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "Delivery not in this session": {
                    "value": {
                      "detail": "No WebhookLog matches the given query."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内にGETリクエストが600件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（600）。",
                "schema": {
                  "type": "integer",
                  "example": 600
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-get"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/webhook/{webhook_uuid}/resend": {
      "post": {
        "summary": "セッションのWebhook配信を再送",
        "description": "記録済みのセッションWebhookを、最初に送信したURLに再送します。ペイロードと`event_id`は同じで、`timestamp`、`X-Timestamp`ヘッダー、署名は新しくなります。Diditは配信が属する送信先の現在のシークレット（従来のWebhook URLへの配信の場合はアプリケーションレベルのシークレット）で署名し、エンドポイントの応答を最大5秒間待ち、その試行を新しい配信として記録し、エンドポイントの応答内容にかかわらず`200`で返します。`response_status`を確認してください。再送は自動的に再試行されず、呼び出すたびに再度送信されるため、エンドポイントは`event_id`に基づいて冪等になるようにしてください。パスの末尾にスラッシュはなく、リクエストにボディはありません。スコープ付きAPIキーには`webhooks: write`と`decisions: read`が必要です。",
        "operationId": "post_v3_session_webhook_resend",
        "x-didit-sdk": {
          "resource": "sessions.webhooks",
          "method": "resend",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ユーザー(KYC)または企業(KYB)の検証セッションのUUID。`POST /v3/session/`が返す`session_id`です。サーバーは両方のセッションタイプに対してIDを解決します。\n\n**有効なUUIDである必要があります。** ルートは正しい形式のUUIDにのみ一致するため、形式が不正な値はアプリケーションコードが実行される前にURLルーターで拒否され、レスポンスは以下に示すJSONの`{\"detail\": ...}`エンベロープではなく、`404`の**HTML**ページになります。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "22222222-3333-4444-5555-666666666666"
          },
          {
            "name": "webhook_uuid",
            "in": "path",
            "required": true,
            "description": "再送する配信のUUIDで、`GET /v3/session/{sessionId}/webhooks/`が返すエントリーの`uuid`です。パスで指定したセッションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "66666666-7777-8888-9999-000000000001"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/session/22222222-3333-4444-5555-666666666666/webhook/66666666-7777-8888-9999-000000000001/resend' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.webhooks.resend(\n    \"22222222-3333-4444-5555-666666666666\",\n    \"66666666-7777-8888-9999-000000000001\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.webhooks.resend(\n  \"22222222-3333-4444-5555-666666666666\",\n  \"66666666-7777-8888-9999-000000000001\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Webhooks.Resend(ctx, \"22222222-3333-4444-5555-666666666666\", \"66666666-7777-8888-9999-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().webhooks().resend(\"22222222-3333-4444-5555-666666666666\", \"66666666-7777-8888-9999-000000000001\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->webhooks->resend('22222222-3333-4444-5555-666666666666', '66666666-7777-8888-9999-000000000001');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.webhooks.resend(\n  \"22222222-3333-4444-5555-666666666666\",\n  \"66666666-7777-8888-9999-000000000001\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Webhooks.ResendAsync(\"22222222-3333-4444-5555-666666666666\", \"66666666-7777-8888-9999-000000000001\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "すでに試行された新しい配信です。`response_status`は今回エンドポイントが返した値です。元の配信は変更されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionWebhookDelivery"
                },
                "examples": {
                  "Accepted on resend": {
                    "value": {
                      "uuid": "66666666-7777-8888-9999-000000000004",
                      "session_id": "22222222-3333-4444-5555-666666666666",
                      "request_url": "https://yourapp.com/webhooks/didit",
                      "response_status": 200,
                      "status": "In Progress",
                      "webhook_type": "status.updated",
                      "request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"b8eb1e376517ee0cad8ba98ff7f8fd35fc72eca231000963a96a335f82328835\", \"X-Signature-V2\": \"9efd2ce9ed1303e1d05273ef9608a59363ed9789a05253db4748b3e8e50cb109\", \"X-Signature-Simple\": \"bf3a9dc04b2c20ab539203b0cd5cca2a10f630bf62d8feb6d68d82af80f64774\", \"X-Timestamp\": \"1792159542\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
                      "request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792159542,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}",
                      "created_at": "2026-10-16T14:05:42.330981Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "配信を再送できませんでした。`code`で分岐してください。`webhook_url_missing`は、配信に記録されたURLがなく、何も送信されないことを意味します。`webhook_resend_error`は、保存された配信に再度署名できなかったか、試行を完了できなかったことを意味します。`webhook_resend_error`の後、`detail`は`Error processing webhook resend:`で始まり、その後に変更される可能性のある診断テキストが続きます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string",
                      "description": "安定した機械可読エラーコード。`detail`ではなく、この値で分岐してください。"
                    }
                  }
                },
                "examples": {
                  "No recorded URL": {
                    "value": {
                      "detail": "The webhook delivery does not have a request URL configured",
                      "code": "webhook_url_missing"
                    }
                  },
                  "Resend failed": {
                    "value": {
                      "detail": "Error processing webhook resend: Invalid webhook data format",
                      "code": "webhook_resend_error"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーの有効期限が切れています。有効期限を指定して作成され、その期限が過ぎています。誤ったキーや失効したキーでも`401`が返されます。キーがない場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "リクエストは許可されていません。`x-api-key`がない、または無効か失効しているキーの場合は`Authentication credentials were not provided or are invalid.`が返されます。別のアプリケーションのキーの場合は`You do not have permission to perform this action.`が返されます。このエンドポイントに必要なアクセス権を持たないスコープ付きキーの場合は、不足しているアクセス権を示すメッセージが返されます。IP許可リスト外から使用されたキーの場合は`This API key can't be used from this IP address.`が返されます。不明な`sessionId`の場合は、認証情報が確認される前に`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid key": {
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Key of another application": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without webhooks write": {
                    "value": {
                      "detail": "This API key has no write access to webhooks."
                    }
                  },
                  "Scoped key without decisions read": {
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Outside the IP allowlist": {
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しないか削除されている（`Not found.`。認証情報の確認前に返されます）か、スコープ付きキーのワークフローまたはステータスの制限外です（`Session not found.`）。存在しない配信、別のセッションに属する配信、または利用できなくなった配信には`Webhook log not found`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside the key's limits": {
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "Delivery not in this session": {
                    "value": {
                      "detail": "Webhook log not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。このAPIキーで、現在の1分間のウィンドウ内に書き込みリクエスト（POST、PATCH、PUT、DELETE）が300件を超えました。`Retry-After`秒待ってから再試行してください。",
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              },
              "X-RateLimit-Limit": {
                "description": "1分間のウィンドウで許可されるリクエスト数（300）。",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "現在のウィンドウで残っているリクエスト数。",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "現在のウィンドウがリセットされるUnix時刻(秒)。",
                "schema": {
                  "type": "integer",
                  "example": 1792056120
                }
              },
              "X-RateLimit-Scope": {
                "description": "超過した予算の名前。",
                "schema": {
                  "type": "string",
                  "example": "generic-write"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Throttled": {
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/events/": {
      "get": {
        "summary": "セッションイベントを一覧表示",
        "description": "1件の検証セッションのイベントタイムラインを、`sent_at`の新しい順に読み取ります。ユーザーが見た画面、ボタン操作やアップロード、失敗した試行、ステータスおよび機能ステップの変更、ワークフローのルーティングトレースが含まれます。ユーザー認証 (KYC) と法人確認 (KYB) のセッションIDに対応しています。イベントは非同期で保存されるため、新しいイベントが表示されるまで数秒かかる場合があります。結果は`limit`と`offset`でページ分割されます。`next`が`null`になるまでたどってください。スコープ付きAPIキーには`sessions: read`と`decisions: read`が必要です。`media: read`がない場合、`file_url`は`null`で返されます。ルーティングイベントについては[セッションの取得](https://docs.didit.me/ja/sessions-api/retrieve-session)で説明しています。",
        "operationId": "get_v3_session_events",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list_events",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。サーバーは両方のセッションタイプにわたってIDを解決します。正しい形式のUUIDである必要があります。形式が不正な値はルートに一致せず、HTMLの`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1ページあたりの最大イベント数です。デフォルトは50です。1未満の値または数値以外の値は50にフォールバックし、1,000,000を超える値は`400`を返します。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000,
              "example": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "最初に返す結果の前にスキップする結果の件数です。デフォルトは0です。負の値または数値でない値は0として扱われ、1,000,000を超える値は`400`を返します。`next`と`previous`のURLをたどる方法を推奨します。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000,
              "example": 0
            }
          },
          {
            "name": "ordering",
            "in": "query",
            "required": false,
            "description": "任意の並べ替え指定です。デフォルトの順序は`-sent_at`です。結果のフィールド名（例：`sent_at`、`created_at`、`event_type`、`feature_step`、`step`）を渡すと昇順に並べ替えられ、先頭に`-`を付けると降順になります。複数のフィールドはカンマで区切ります。不明なフィールドは無視されます。",
            "schema": {
              "type": "string",
              "example": "sent_at"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/events/?limit=50' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.sessions.list_events(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.sessions.listEvents(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.ListEventsAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsListEventsParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.sessions().listEvents(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->sessions->listEvents('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.list_events(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Sessions.ListEventsAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "セッションのイベントの1ページ分です。新しい順に並びます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "セッションのイベントの総数。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページのURL。最後のページでは`null`です。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページのURL。最初のページでは`null`です。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/SessionEvent"
                      }
                    }
                  }
                },
                "examples": {
                  "Completed session": {
                    "value": {
                      "count": 3,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "aaaaaaaa-1111-2222-3333-444444444444",
                          "event_type": "SESSION_STATUS_CHANGED",
                          "created_at": "2026-09-14T10:02:13.904512Z",
                          "component": null,
                          "feature_step": null,
                          "step": null,
                          "details": {
                            "old_status": "In Progress",
                            "current_status": "Approved"
                          },
                          "ip_address": null,
                          "user_agent": null,
                          "device_info": null,
                          "file_url": null,
                          "sent_at": 1789380131482
                        },
                        {
                          "uuid": "bbbbbbbb-1111-2222-3333-444444444444",
                          "event_type": "FEATURE_STEP_CHANGED",
                          "created_at": "2026-09-14T10:01:49.210377Z",
                          "component": null,
                          "feature_step": null,
                          "step": null,
                          "details": {
                            "old_feature_step": "OCR",
                            "current_feature_step": "LIVENESS"
                          },
                          "ip_address": null,
                          "user_agent": null,
                          "device_info": null,
                          "file_url": null,
                          "sent_at": 1789380107103
                        },
                        {
                          "uuid": "cccccccc-1111-2222-3333-444444444444",
                          "event_type": "STEP_RENDERED",
                          "created_at": "2026-09-14T10:01:00.581930Z",
                          "component": "DocumentCapture",
                          "feature_step": "OCR",
                          "step": "DOCUMENT_CAPTURE_FRONT",
                          "details": {},
                          "ip_address": "203.0.113.24",
                          "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1",
                          "device_info": {
                            "device_model": "iPhone"
                          },
                          "file_url": null,
                          "sent_at": 1789380058776
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`limit`または`offset`が1,000,000を超えています。レスポンス本文はメッセージ1件を含むJSON配列です。",
            "content": {
              "application/json": {
                "examples": {
                  "Limit too large": {
                    "summary": "limit=2000000",
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  },
                  "Offset too large": {
                    "summary": "offset=2000000",
                    "value": [
                      "offset must not exceed 1000000."
                    ]
                  }
                },
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without sessions read": {
                    "summary": "スコープ付きキーにsessions: read権限がない",
                    "value": {
                      "detail": "This API key has no read access to sessions."
                    }
                  },
                  "Scoped key without decisions read": {
                    "summary": "スコープ付きキーにdecisions: read権限がない",
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーのワークフローまたは承認済みのみの制限外です。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーのワークフローまたは承認済みのみの制限外です",
                    "value": {
                      "detail": "Session not found."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。GETリクエストはAPIキーごとに1分あたり600件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/aml-screening-history/": {
      "get": {
        "summary": "AMLスクリーニング履歴の一覧取得",
        "description": "セッションのAMLチェックについて、完了した継続的なモニタリングの再スクリーニングをすべて、`completed_at`の新しい順に一覧表示します。何も変化しなかった実行も含まれます。アラート、アクティビティエントリ、Webhookは結果が変化した場合にのみ発生するため、この履歴は、問題のない対象者が引き続きスクリーニングされていたことの証拠となります。KYCとKYBのセッションIDに対応しています。セッションで複数のAMLステップを実行した場合は`node_id`を指定してください。一覧に含まれるのは継続的なモニタリングの再スクリーニングのみで(最初のスクリーニングはセッションの判定の一部です)、この履歴が存在する以前の実行は再構築されません。そのため、継続的なモニタリングのないセッションでは空の一覧が返されます。`count`は100までは正確で、それを超える場合は100が上限となるため、`next`が`null`になるまでたどってください。1暦月ずつ読み取るには`month`を指定します。スコープ付きAPIキーには`decisions: read`が必要です。[継続的なAMLモニタリング](https://docs.didit.me/ja/core-technology/aml-screening/continuous-monitoring-aml-screening)を参照してください。",
        "operationId": "get_v3_session_aml_screening_history",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list_aml_screening_history",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。サーバーは両方のセッションタイプにわたってIDを解決します。正しい形式のUUIDである必要があります。形式が不正な値はルートに一致せず、HTMLの`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "AMLチェックのワークフローグラフのノードID。セッションで複数のAMLステップが実行された場合にのみ必要です。指定しない場合は最新のAMLチェックが使用されます。不明なノードを指定すると`404`が返されます。",
            "schema": {
              "type": "string",
              "example": "feature_aml_1"
            }
          },
          {
            "name": "month",
            "in": "query",
            "required": false,
            "description": "`YYYY-MM`形式のUTC暦月。その月に完了したスクリーニングのみが返されます。指定しない場合はすべての月が返されます。形式が不正な月を指定すると`400`が返されます。",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2026-09"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1ページあたりの最大スクリーニング実行数です。デフォルトは50です。1未満の値または数値以外の値は50にフォールバックし、1,000,000を超える値は`400`を返します。",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000000,
              "example": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "最初に返す結果の前にスキップする結果の件数です。デフォルトは0です。負の値または数値でない値は0として扱われ、1,000,000を超える値は`400`を返します。`next`と`previous`のURLをたどる方法を推奨します。",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 1000000,
              "example": 0
            }
          },
          {
            "name": "ordering",
            "in": "query",
            "required": false,
            "description": "任意の並べ替え指定です。デフォルトの順序は`-completed_at`です。結果のフィールド名（例：`completed_at`、`started_at`、`outcome`、`score`）を渡すと昇順に並べ替えられ、先頭に`-`を付けると降順になります。複数のフィールドはカンマで区切ります。不明なフィールドは無視されます。",
            "schema": {
              "type": "string",
              "example": "completed_at"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/aml-screening-history/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.sessions.list_aml_screening_history(\n    \"11111111-2222-3333-4444-555555555555\",\n):\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.sessions.listAmlScreeningHistory(\"11111111-2222-3333-4444-555555555555\")) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.ListAMLScreeningHistoryAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsListAMLScreeningHistoryParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.sessions().listAmlScreeningHistory(\"11111111-2222-3333-4444-555555555555\")) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->sessions->listAmlScreeningHistory('11111111-2222-3333-4444-555555555555') as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.list_aml_screening_history(\"11111111-2222-3333-4444-555555555555\").auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Sessions.ListAmlScreeningHistoryAsync(\"11111111-2222-3333-4444-555555555555\"))\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "スクリーニング実行の1ページ分です。新しい順に並びます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "next",
                    "previous",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "maximum": 100,
                      "description": "実行回数です。100件までは正確な値で、それを超える場合は100で打ち切られます。"
                    },
                    "next": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "次のページのURL。最後のページでは`null`です。"
                    },
                    "previous": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "前のページのURL。最初のページでは`null`です。"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AMLScreeningRun"
                      }
                    }
                  }
                },
                "examples": {
                  "Monitored subject": {
                    "value": {
                      "count": 2,
                      "next": null,
                      "previous": null,
                      "results": [
                        {
                          "uuid": "dddddddd-1111-2222-3333-444444444444",
                          "run_id": "aaaaaaaa-1111-2222-3333-444444444444",
                          "completed_at": "2026-09-14T04:12:33.481207Z",
                          "started_at": "2026-09-14T04:00:01.002311Z",
                          "outcome": "NO_CHANGE",
                          "trigger": "ONGOING_MONITORING",
                          "provider": "aml_data_source",
                          "status": "Approved",
                          "score": 0.0,
                          "total_hits": 0,
                          "new_hits": 0,
                          "entities_screened": 1,
                          "dataset_freshness": {
                            "captured_at": "2026-09-14T03:58:02.114820+00:00",
                            "provider": "aml_data_source",
                            "catalog_version": "2026-09-13",
                            "sources": {
                              "sanctions": {
                                "last_updated_at": "2026-09-13T21:10:00+00:00",
                                "oldest_updated_at": "2026-09-11T06:00:00+00:00",
                                "dataset_count": 120,
                                "dated_dataset_count": 120
                              },
                              "pep": {
                                "last_updated_at": "2026-09-13T08:00:00+00:00",
                                "oldest_updated_at": null,
                                "dataset_count": 45,
                                "dated_dataset_count": 44
                              },
                              "warnings": {
                                "last_updated_at": "2026-09-12T18:45:00+00:00",
                                "oldest_updated_at": "2026-09-01T00:00:00+00:00",
                                "dataset_count": 30,
                                "dated_dataset_count": 30
                              }
                            }
                          }
                        },
                        {
                          "uuid": "eeeeeeee-1111-2222-3333-444444444444",
                          "run_id": "bbbbbbbb-1111-2222-3333-444444444444",
                          "completed_at": "2026-09-13T04:11:58.020914Z",
                          "started_at": "2026-09-13T04:00:00.871022Z",
                          "outcome": "FAILED",
                          "trigger": "ONGOING_MONITORING",
                          "provider": "aml_data_source",
                          "status": "Approved",
                          "score": 0.0,
                          "total_hits": 0,
                          "new_hits": null,
                          "entities_screened": 0,
                          "dataset_freshness": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`limit`または`offset`が1,000,000を超えている（メッセージ1件を含むJSON配列）、または`month`が`YYYY-MM`形式の暦月ではない（`month`をキーとするオブジェクト）。",
            "content": {
              "application/json": {
                "examples": {
                  "Limit too large": {
                    "summary": "limit=2000000",
                    "value": [
                      "limit must not exceed 1000000."
                    ]
                  },
                  "Offset too large": {
                    "summary": "offset=2000000",
                    "value": [
                      "offset must not exceed 1000000."
                    ]
                  },
                  "Malformed month": {
                    "summary": "month=2026-13",
                    "value": {
                      "month": [
                        "Not a calendar month. Use YYYY-MM."
                      ]
                    }
                  }
                },
                "schema": {
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    {
                      "type": "object",
                      "properties": {
                        "month": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions read": {
                    "summary": "スコープ付きキーにdecisions: read権限がない",
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーの制限外であるか、（指定された`node_id`について）AMLチェックがありません。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーの制限外です（直前に削除されたセッションにも返されます）",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "No AML check": {
                    "summary": "セッションでAMLステップが実行されていません",
                    "value": {
                      "detail": "The session does not have an AML check."
                    }
                  },
                  "No AML check for node": {
                    "summary": "node_idがセッションのAMLチェックと一致しない",
                    "value": {
                      "detail": "The session does not have an AML check for node 'feature_aml_2'."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。GETリクエストはAPIキーごとに1分あたり600件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/aml-screening-history/export/": {
      "get": {
        "summary": "AMLスクリーニング履歴をCSVでエクスポート",
        "description": "`GET /v3/session/{sessionId}/aml-screening-history/`と同じ継続的なモニタリングの履歴をCSVファイルとしてダウンロードします。完了した再スクリーニングごとに1行で、新しい順に並び、そのまま監査担当者に渡せます。ファイルは一括でストリーミングされ（ページネーションなし）、先頭にヘッダー行があります。空のセルは不明を意味し、データセットの日付が推定されることはありません。また、スプレッドシートの数式として解釈される文字で始まる値にはアポストロフィが付加されます。KYCとKYBのセッションIDのどちらにも使用でき、セッションで複数のAMLステップが実行された場合は`node_id`を指定してください。1か月分をエクスポートするには`month`を指定します。エラーはCSVではなくJSONで返されます。スコープ付きのAPIキーには`decisions: read`と`media: read`が必要です。レスポンスはファイルであるため、`media: read`のないキーでは`403`が返されます。",
        "operationId": "get_v3_session_aml_screening_history_export",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "export_aml_screening_history",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。サーバーは両方のセッションタイプにわたってIDを解決します。正しい形式のUUIDである必要があります。形式が不正な値はルートに一致せず、HTMLの`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "AMLチェックのワークフローグラフのノードID。セッションで複数のAMLステップが実行された場合にのみ必要です。指定しない場合は最新のAMLチェックが使用されます。不明なノードを指定すると`404`が返されます。",
            "schema": {
              "type": "string",
              "example": "feature_aml_1"
            }
          },
          {
            "name": "month",
            "in": "query",
            "required": false,
            "description": "`YYYY-MM`形式のUTC暦月。その月に完了したスクリーニングのみが返されます。指定しない場合はすべての月が返されます。形式が不正な月を指定すると`400`が返されます。",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2026-09"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/aml-screening-history/export/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -o aml-screening-history.csv"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.sessions.export_aml_screening_history(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nwith open(\"download.csv\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.sessions.exportAmlScreeningHistory(\"11111111-2222-3333-4444-555555555555\");\nawait writeFile(\"download.csv\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.ExportAMLScreeningHistory(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsExportAMLScreeningHistoryParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.csv\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().exportAmlScreeningHistory(\"11111111-2222-3333-4444-555555555555\")\n        .writeTo(Path.of(\"download.csv\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->sessions->exportAmlScreeningHistory('11111111-2222-3333-4444-555555555555');\n$content->saveTo('download.csv');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.sessions.export_aml_screening_history(\"11111111-2222-3333-4444-555555555555\")\nFile.binwrite(\"download.csv\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Sessions.ExportAmlScreeningHistoryAsync(\"11111111-2222-3333-4444-555555555555\");\nawait content.SaveToAsync(\"download.csv\");"
          }
        ],
        "responses": {
          "200": {
            "description": "CSVファイル。CRLF改行の`text/csv`としてストリーミングされます。列は次の順です: `screened_at`（再スクリーニングが完了した日時）、`outcome`（`NO_CHANGE`、`CHANGED`または`FAILED`）、`provider`（AMLデータソースの不透明な識別子。これに基づいて分岐しないでください）、`aml_status`、`aml_score`、`total_hits`、`datasets_captured_at`、`datasets_sanctions_last_updated_at`、`datasets_pep_last_updated_at`、`datasets_warnings_last_updated_at`、`datasets_adverse_media_last_updated_at`、`datasets_catalog_version`、`run_id`（モニタリングの実行）、`entities_screened`（`1`、または失敗した実行では`0`）、`new_hits`（不明な場合は空）。日付はUTCオフセット付きのISO 8601形式です。まだ再スクリーニングが行われていないセッションでは、ヘッダー行のみが返されます。",
            "headers": {
              "Content-Disposition": {
                "description": "`attachment; filename=\"aml-screening-history-{sessionId}.csv\"`、または`month`を渡した場合は`aml-screening-history-{sessionId}-{month}.csv`です。",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"aml-screening-history-11111111-2222-3333-4444-555555555555.csv\""
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "screened_at,outcome,provider,aml_status,aml_score,total_hits,datasets_captured_at,datasets_sanctions_last_updated_at,datasets_pep_last_updated_at,datasets_warnings_last_updated_at,datasets_adverse_media_last_updated_at,datasets_catalog_version,run_id,entities_screened,new_hits\r\n2026-09-14T04:12:33.481207+00:00,NO_CHANGE,aml_data_source,Approved,0.0,0,2026-09-14T03:58:02.114820+00:00,2026-09-13T21:10:00+00:00,2026-09-13T08:00:00+00:00,2026-09-12T18:45:00+00:00,,2026-09-13,aaaaaaaa-1111-2222-3333-444444444444,1,0\r\n2026-09-13T04:11:58.020914+00:00,FAILED,aml_data_source,Approved,0.0,0,,,,,,,bbbbbbbb-1111-2222-3333-444444444444,0,\r\n"
              }
            }
          },
          "400": {
            "description": "`month`が`YYYY-MM`形式の暦月ではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "month": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "examples": {
                  "Malformed month": {
                    "summary": "month=2026-13",
                    "value": {
                      "month": [
                        "Not a calendar month. Use YYYY-MM."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions read": {
                    "summary": "スコープ付きキーにdecisions: read権限がない",
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  },
                  "Scoped key without media read": {
                    "summary": "スコープ付きキーにmedia: read権限がない（レスポンスはファイル）",
                    "value": {
                      "detail": "This API key has no read access to media."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーの制限外であるか、（指定された`node_id`について）AMLチェックがありません。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーの制限外です（直前に削除されたセッションにも返されます）",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "No AML check": {
                    "summary": "セッションでAMLステップが実行されていません",
                    "value": {
                      "detail": "The session does not have an AML check."
                    }
                  },
                  "No AML check for node": {
                    "summary": "node_idがセッションのAMLチェックと一致しない",
                    "value": {
                      "detail": "The session does not have an AML check for node 'feature_aml_2'."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。GETリクエストはAPIキーごとに1分あたり600件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/add-images/": {
      "patch": {
        "summary": "セッションに画像を追加",
        "description": "完了したユーザー認証(KYC)セッションの本人確認(`model_type=kyc`)または住所証明(`model_type=poa`)の結果に、追加の画像またはPDFを1件添付します。たとえばフロー外で収集した証拠などです。セッションは`Approved`、`Declined`、`In Review`、`Kyc Expired`のいずれかで、`model_type`で指定した結果を持っている必要があります。法人確認(KYB)セッションには対応していません。呼び出しごとに1ファイルが追加され(ステップが複数回実行された場合は最新の結果に追加)、既存のファイルは保持され、セッションのアクティビティログに`FILE_ADDED`エントリが記録されます。アップロードによってWebhookは送信されず、セッションのステータスも変わりません。ファイルはアップロード時に圧縮され、セッション判定の`extra_files`で返されます。このエンドポイントはAPIキーごとに1分あたり10リクエストに制限されています。スコープ付きAPIキーには`sessions: write`が必要で、`media: read`がない場合は`extra_files`のリンクが`null`として返されます。",
        "operationId": "patch_v3_session_add_images",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "add_images",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ファイルを追加するユーザー認証 (KYC) セッションのUUID (`POST /v3/session/`が返す`session_id`) です。法人確認 (KYB) セッションのIDを指定すると`404`が返されます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file",
                  "model_type"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "画像またはPDFです。使用できる拡張子は`jpg`、`jpeg`、`png`、`webp`、`tiff`、`pdf`です。アップロード時点で最大15MBです。その後ファイルは圧縮され、それでも2MB(2,097,152バイト)を超える場合は`400`で拒否されます。空のファイルは拒否されます。"
                  },
                  "model_type": {
                    "type": "string",
                    "enum": [
                      "kyc",
                      "poa"
                    ],
                    "description": "`kyc`はファイルを本人確認の結果に、`poa`は住所証明の結果に追加します。",
                    "example": "kyc"
                  },
                  "file_password": {
                    "type": "string",
                    "description": "暗号化されたPDFのパスワード。パスワードがない場合や誤っている場合、暗号化されたPDFは`400`を返します。"
                  }
                }
              },
              "example": {
                "file": "(binary)",
                "model_type": "kyc"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/add-images/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'file=@./back-of-id.jpg' \\\n  -F 'model_type=kyc'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.add_images(\n    \"11111111-2222-3333-4444-555555555555\",\n    file=open(\"image.jpg\", \"rb\"),\n    model_type=\"kyc\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.addImages(\"11111111-2222-3333-4444-555555555555\", {\n  file: await fileFromPath(\"image.jpg\"),\n  model_type: \"kyc\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.AddImages(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsAddImagesParams{\n\tFile:      didit.FileFromPath(\"image.jpg\"),\n\tModelType: \"kyc\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.types.SessionsAddImagesParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().addImages(\"11111111-2222-3333-4444-555555555555\", SessionsAddImagesParams.builder()\n        .file(Path.of(\"image.jpg\"))\n        .modelType(SessionsAddImagesParams.ModelType.of(\"kyc\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->addImages('11111111-2222-3333-4444-555555555555', [\n    'file' => File::fromPath('image.jpg'),\n    'model_type' => 'kyc',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.add_images(\n  \"11111111-2222-3333-4444-555555555555\",\n  file: Pathname(\"image.jpg\"),\n  model_type: \"kyc\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.AddImagesAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsAddImagesParams\n{\n    File = FileUpload.FromPath(\"image.jpg\"),\n    ModelType = \"kyc\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ファイルが追加されました。新しいファイルを含め、その結果のすべての追加ファイルを返します。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "extra_files"
                  ],
                  "properties": {
                    "extra_files": {
                      "type": "array",
                      "description": "`model_type`で指定された結果のすべての追加ファイルへの有効期間の短い署名付きリンク（古い順）。`media: read`を持たないスコープ付きAPIキーでは、各リンクは`null`です。後から新しいリンクを取得するには、セッションの判定から読み取ってください。",
                      "items": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                      }
                    }
                  }
                },
                "example": {
                  "extra_files": [
                    "https://media.example.com/session/11111111-2222-3333-4444-555555555555/kyc-extra-files/66666666-7777-8888-9999-000000000000.jpg?expires=1789383731&signature=abc123"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドエラーは`{\"<field>\": [\"<message>\"]}`の形式で、暗号化PDFのエラーは`{\"detail\": \"...\"}`の形式で返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing file": {
                    "summary": "フォームにファイルパートがありません",
                    "value": {
                      "file": [
                        "No file was submitted."
                      ]
                    }
                  },
                  "Missing model_type": {
                    "summary": "model_typeが省略されている",
                    "value": {
                      "model_type": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid model_type": {
                    "summary": "model_typeがkycでもpoaでもない",
                    "value": {
                      "model_type": [
                        "\"passport\" is not a valid choice."
                      ]
                    }
                  },
                  "File too large": {
                    "summary": "15MBを超えるアップロード",
                    "value": {
                      "file": [
                        "File size should not exceed 15 MB"
                      ]
                    }
                  },
                  "Too large after compression": {
                    "summary": "圧縮後も2MBを超えています",
                    "value": {
                      "file": [
                        "File size is too big. Max allowed size is 2097152 bytes."
                      ]
                    }
                  },
                  "Encrypted PDF": {
                    "summary": "file_passwordなしの暗号化PDF",
                    "value": {
                      "detail": "The PDF is encrypted. Please upload a decrypted PDF or a photo instead."
                    }
                  },
                  "Wrong PDF password": {
                    "summary": "file_passwordでPDFを開けません",
                    "value": {
                      "detail": "The PDF password is incorrect. Please provide the correct password."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without sessions write": {
                    "summary": "スコープ付きキーにsessions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to sessions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーの制限外である。KYBセッションである、または`Approved`、`Declined`、`In Review`、`Kyc Expired`のいずれでもない。あるいは、要求された`model_type`の結果がない（ファイルの検証前に確認されます）。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーのワークフローまたは承認済みのみの制限外です",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "Not eligible": {
                    "summary": "セッションがまだ完了していないか、KYBセッションのIDです",
                    "value": {
                      "detail": "No Session matches the given query."
                    }
                  },
                  "No ID verification": {
                    "summary": "本人確認のないセッションでmodel_type=kycを指定した",
                    "value": {
                      "detail": "The session does not have KYC data."
                    }
                  },
                  "No Proof of Address": {
                    "summary": "住所証明のないセッションでmodel_type=poaを指定した",
                    "value": {
                      "detail": "The session does not have POA data."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。画像追加リクエストはAPIキーごとに1分あたり10件までです（拒否されたリクエストもカウントされます）。1分あたり300件の書き込みリクエストという共通の上限も適用されます。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Session add-images rate limit exceeded. You can make up to 10 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/update-aml-status/": {
      "patch": {
        "summary": "AMLチェックのステータスを更新",
        "description": "セッションのAMLスクリーニングチェック全体のステータス(セッションの判定における`aml_screenings[]`エントリの`status`)を設定します。たとえば、チームがすべてのヒットを解消した後に`Approved`に設定します。KYCとKYBのセッションIDに対応しています。セッションで複数のAMLステップが実行された場合は`node_id`(クエリパラメーターまたはボディのフィールド)を渡してください。渡さない場合は、最新のAMLチェックが更新されます。ステータスが実際に変更されると、`AML_STATUS_UPDATED`アクティビティエントリが記録され、`data.updated` [Webhook](https://docs.didit.me/ja/integration/webhooks)が送信されます。現在のステータスを送信した場合は`200`が返され、何も変更されません。セッションのステータスは再計算されません。セッションの判定には`PATCH /v3/session/{sessionId}/update-status/`を、単一のヒットには`PATCH /v3/session/{sessionId}/update-aml-hit-status/`を使用してください。スコープ付きのAPIキーには`decisions: write`が必要です。",
        "operationId": "patch_v3_session_update_aml_status",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_aml_status",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。サーバーは両方のセッションタイプにわたってIDを解決します。正しい形式のUUIDである必要があります。形式が不正な値はルートに一致せず、HTMLの`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "更新するAMLチェックのワークフローグラフのノードID。セッションで複数のAMLステップが実行された場合にのみ必要です。ボディ内の`node_id`より優先されます。",
            "schema": {
              "type": "string",
              "example": "feature_aml_1"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "Not Finished",
                      "Approved",
                      "Declined",
                      "In Review",
                      "Resub Requested"
                    ],
                    "description": "AMLチェックの新しいステータス。",
                    "example": "Approved"
                  },
                  "node_id": {
                    "type": "string",
                    "description": "AMLチェックのワークフローグラフのノードID。クエリパラメーターの代わりに指定できます。",
                    "example": "feature_aml_1"
                  }
                }
              },
              "example": {
                "status": "Approved"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PATCH 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-aml-status/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"status\": \"Approved\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_aml_status(\n    \"11111111-2222-3333-4444-555555555555\",\n    status=\"Approved\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateAmlStatus(\"11111111-2222-3333-4444-555555555555\", {\n  status: \"Approved\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateAMLStatus(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdateAMLStatusParams{\n\tStatus: \"Approved\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsUpdateAmlStatusParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateAmlStatus(\"11111111-2222-3333-4444-555555555555\", SessionsUpdateAmlStatusParams.builder()\n        .status(SessionsUpdateAmlStatusParams.Status.of(\"Approved\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateAmlStatus('11111111-2222-3333-4444-555555555555', [\n    'status' => 'Approved',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_aml_status(\n  \"11111111-2222-3333-4444-555555555555\",\n  status: \"Approved\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateAmlStatusAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsUpdateAmlStatusParams\n{\n    Status = \"Approved\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "設定されたAMLチェックのステータス（すでにこの値だった場合は変更なし）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message",
                    "status",
                    "previous_status"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "常に`AML status updated successfully`です。"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "Not Finished",
                        "Approved",
                        "Declined",
                        "In Review",
                        "Resub Requested"
                      ],
                      "description": "現在のAMLチェックのステータス。"
                    },
                    "previous_status": {
                      "type": "string",
                      "enum": [
                        "Not Finished",
                        "Approved",
                        "Declined",
                        "In Review",
                        "Resub Requested"
                      ],
                      "description": "呼び出し前のステータス。何も変更されなかった場合は`status`と同じです。"
                    }
                  }
                },
                "example": {
                  "message": "AML status updated successfully",
                  "status": "Approved",
                  "previous_status": "In Review"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: `status`がない、または許可された値のいずれでもありません。AMLチェックの検索が先に実行されるため、AMLチェックのないセッションでは、ボディが無効であっても`404`が返されます。",
            "content": {
              "application/json": {
                "examples": {
                  "Missing status": {
                    "summary": "空のボディ、またはstatusなし",
                    "value": {
                      "status": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid status": {
                    "summary": "statusがenumに含まれていません",
                    "value": {
                      "status": [
                        "\"Cleared\" is not a valid choice."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、またはスコープ付きキーの制限外であるか、（指定された`node_id`について）AMLチェックがありません。セッションの照会は認証情報の確認より前に行われるため、有効なキーがなくても、不明な`sessionId`には`404`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Unknown session": {
                    "summary": "このIDのセッションが存在しないか、削除されています",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Outside key limits": {
                    "summary": "セッションがスコープ付きキーの制限外です（直前に削除されたセッションにも返されます）",
                    "value": {
                      "detail": "Session not found."
                    }
                  },
                  "No AML check": {
                    "summary": "セッションでAMLステップが実行されていません",
                    "value": {
                      "detail": "The session does not have an AML check."
                    }
                  },
                  "No AML check for node": {
                    "summary": "node_idがセッションのAMLチェックと一致しない",
                    "value": {
                      "detail": "The session does not have an AML check for node 'feature_aml_2'."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/status/": {
      "get": {
        "summary": "サービスステータスを取得(公開、認証不要)",
        "description": "Diditの各サービスの状態（`operational`、`degraded`、`down`）、全体の状態（その中で最も悪い状態）、および進行中または過去7日間に解決したインシデントを返します。ステータスウィジェットの表示や、連携からのDiditの稼働状況の確認に使用します。\n\n公開API：認証ヘッダーは送信しないでください。レスポンスには組織データは含まれず、すべての呼び出し元に対して同じ内容です。レスポンスは30秒間キャッシュされるため、ポーリングは30秒に1回までにしてください。",
        "operationId": "get_v3_status",
        "tags": [
          "Status"
        ],
        "security": [
          {}
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "現在のサービスステータス。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceStatusFeed"
                },
                "examples": {
                  "One service degraded": {
                    "summary": "進行中のインシデントと、今週解決したインシデント",
                    "value": {
                      "status": "degraded",
                      "updated_at": "2026-10-13T09:41:07.512345Z",
                      "services": [
                        {
                          "key": "service_id_verification",
                          "name": "ID verification",
                          "status": "operational"
                        },
                        {
                          "key": "service_liveness_face_match",
                          "name": "Liveness and face match",
                          "status": "operational"
                        },
                        {
                          "key": "service_aml_screening",
                          "name": "AML screening",
                          "status": "operational"
                        },
                        {
                          "key": "service_kyb_registries",
                          "name": "KYB registries",
                          "status": "operational"
                        },
                        {
                          "key": "service_database_validation",
                          "name": "Database validation",
                          "status": "degraded"
                        },
                        {
                          "key": "service_phone_delivery",
                          "name": "Phone verification delivery",
                          "status": "operational"
                        },
                        {
                          "key": "service_email_delivery",
                          "name": "Email verification delivery",
                          "status": "operational"
                        },
                        {
                          "key": "service_transaction_monitoring",
                          "name": "Transaction monitoring",
                          "status": "operational"
                        }
                      ],
                      "incidents": [
                        {
                          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                          "service": "service_database_validation",
                          "service_name": "Database validation",
                          "state": "degraded",
                          "status": "ongoing",
                          "title": "Database validation is degraded in Brazil.",
                          "body": "Checks against Brazil (CPF) may be slow or fail since 08:55 UTC.",
                          "affected": "Brazil (CPF)",
                          "country_name": "Brazil",
                          "started_at": "2026-10-13T08:55:00Z",
                          "resolved_at": null,
                          "duration_minutes": null
                        },
                        {
                          "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
                          "service": "service_aml_screening",
                          "service_name": "AML screening",
                          "state": "down",
                          "status": "resolved",
                          "title": "AML screening is back to normal.",
                          "body": "Recovered at 14:32 UTC after 17 minutes.",
                          "affected": "",
                          "country_name": "",
                          "started_at": "2026-10-11T14:15:00Z",
                          "resolved_at": "2026-10-11T14:32:00Z",
                          "duration_minutes": 17
                        }
                      ]
                    }
                  },
                  "All operational": {
                    "summary": "過去7日間にインシデントはありません",
                    "value": {
                      "status": "operational",
                      "updated_at": "2026-10-13T09:41:07.512345Z",
                      "services": [
                        {
                          "key": "service_id_verification",
                          "name": "ID verification",
                          "status": "operational"
                        },
                        {
                          "key": "service_liveness_face_match",
                          "name": "Liveness and face match",
                          "status": "operational"
                        },
                        {
                          "key": "service_aml_screening",
                          "name": "AML screening",
                          "status": "operational"
                        },
                        {
                          "key": "service_kyb_registries",
                          "name": "KYB registries",
                          "status": "operational"
                        },
                        {
                          "key": "service_database_validation",
                          "name": "Database validation",
                          "status": "operational"
                        },
                        {
                          "key": "service_phone_delivery",
                          "name": "Phone verification delivery",
                          "status": "operational"
                        },
                        {
                          "key": "service_email_delivery",
                          "name": "Email verification delivery",
                          "status": "operational"
                        },
                        {
                          "key": "service_transaction_monitoring",
                          "name": "Transaction monitoring",
                          "status": "operational"
                        }
                      ],
                      "incidents": []
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "同じIPアドレス（APIキーを送信している場合は同じAPIキー）から1分間に600件を超えるGETリクエスト。再試行する前に`Retry-After`に従ってください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "detail"
                  ],
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "GET request rate limit exceeded. You can make up to 600 requests per minute."
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -fsS https://verification.didit.me/v3/status/"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "import requests\n\nresp = requests.get('https://verification.didit.me/v3/status/', timeout=5)\nresp.raise_for_status()\nfeed = resp.json()\nprint(feed['status'])\nfor service in feed['services']:\n    if service['status'] != 'operational':\n        print(service['key'], service['status'])"
          },
          {
            "lang": "javascript",
            "label": "JavaScript",
            "source": "const feed = await fetch('https://verification.didit.me/v3/status/').then((r) => r.json());\nconsole.log(feed.status);\nconst affected = feed.services.filter((s) => s.status !== 'operational');\nconsole.log(affected.map((s) => `${s.key}: ${s.status}`));"
          }
        ],
        "x-didit-sdk": {
          "resource": "system",
          "method": "retrieve_status",
          "auth": "public",
          "server": false
        }
      }
    },
    "/v3/organization/bank-verification-pricing/": {
      "get": {
        "summary": "銀行認証の料金を取得（公開、認証不要）",
        "description": "各国における銀行認証の各手法の定価を返します。対象は、残高と取引のアドオンを含む銀行ログインと、口座確認です。銀行認証はまだ本番環境で有効になっていないため、有効になるまでは本番環境のワークフローで銀行ステップは拒否されます。これらの料金は定価として扱い、現時点で購入できるオファーとしては扱わないでください。ワークフローを構築する前に銀行ステップの見積もりを出す場合や、自社製品で銀行の料金を表示する場合に使用します。\n\n公開API：認証ヘッダーは送信しないでください。レスポンスには組織データは含まれず、すべての呼び出し元に対して同じ内容です。レスポンスは1時間パブリックにキャッシュされ、`ETag`が付与されるため、`If-None-Match`を送信すると、変更がない場合に`304 Not Modified`を受け取れます。\n\n手法が`available`になるのは、現時点でDiditが本番環境で提供している場合のみで、それ以外では`price_usd`は`null`になります。そのため、このフィードに購入できない料金が表示されることはありません。`available: false`には、承認済みの料金がない国、その国が対応していない手法、まだ有効化されていないルートが含まれます。\n\nこれらはプラン割引適用前の定価です。プラン割引は銀行の料金全体に適用され、交渉済みの料金または契約料金がある場合は、お客様の組織には定価の代わりにその料金が適用されます。",
        "operationId": "get_v3_bank_verification_pricing",
        "tags": [
          "Pricing"
        ],
        "security": [
          {}
        ],
        "parameters": [],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -fsS https://verification.didit.me/v3/organization/bank-verification-pricing/"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# This call needs no API key.\nclient = Didit()\n\nresult = client.pricing.bank_verification()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// This call needs no API key.\nconst didit = new Didit();\n\nconst result = await didit.pricing.bankVerification();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// This call needs no API key.\nclient := didit.NewClient()\n\nresult, err := client.Pricing.BankVerification(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// This call needs no API key.\nDidit client = new Didit();\n\nvar result = client.pricing().bankVerification();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// This call needs no API key.\n$didit = new DiditClient();\n\n$result = $didit->pricing->bankVerification();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# This call needs no API key.\ndidit = Didit::Client.new\n\nresult = didit.pricing.bank_verification\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// This call needs no API key.\nusing var client = new DiditClient();\n\nvar result = await client.Pricing.BankVerificationAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-sdk": {
          "resource": "pricing",
          "method": "bank_verification",
          "auth": "none",
          "server": true
        },
        "responses": {
          "200": {
            "description": "国別の銀行認証の標準料金。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankVerificationPricing"
                },
                "examples": {
                  "Two countries": {
                    "summary": "両方の方法がある国が1つ、どちらもない国が1つ",
                    "value": {
                      "currency": "USD",
                      "statement_upload": {
                        "price_usd": "0.0000",
                        "included_after_charged_bank_attempt": true,
                        "standalone_available": false
                      },
                      "own_provider_fee_usd": "0.0200",
                      "countries": {
                        "GBR": {
                          "name": "United Kingdom",
                          "methods": {
                            "open_banking": {
                              "available": true,
                              "market": "UK and EEA",
                              "price_usd": "0.7900",
                              "add_ons": {
                                "balance": "0.3500",
                                "transactions": "1.3000"
                              }
                            },
                            "account_lookup": {
                              "available": true,
                              "price_usd": "0.4000"
                            }
                          }
                        },
                        "CAN": {
                          "name": "Canada",
                          "methods": {
                            "open_banking": {
                              "available": false,
                              "market": null,
                              "price_usd": null,
                              "add_ons": {}
                            },
                            "account_lookup": {
                              "available": false,
                              "price_usd": null
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "未変更: `If-None-Match`で送信した`ETag`がまだ一致しています。ボディはありません。"
          }
        }
      }
    },
    "/v3/session/{sessionId}/simulate/": {
      "post": {
        "summary": "サンドボックスセッションのステータスをシミュレートする",
        "description": "バックエンドから、フローを実行せずに、サンドボックスのセッションを事後的に終了ステータスへ強制的に変更します。サンドボックスのアプリケーション専用で、本番環境のセッションでは`404`が返ります。ユーザー認証（KYC）と法人確認（KYB）のセッションに対応しています。\n\n`new_status`を設定するか、`scenario`または`risk`から値を指定させます。`risk`（またはシナリオのマジック値が持つ最初のリスク）を指定すると、その警告がセッションに追加されます。この変更はセッションのアクティビティに記録されます。\n\n`send_webhooks`（デフォルトは`true`）は、実際のステータス変更で送信されるのとまったく同じWebhookを送信します。`false`の場合もステータスは変更され、コンソールもリアルタイムで更新されますが、Webhookは記録も送信もされず、未送信Webhookの復旧処理がこの判定を再送することもありません。次のステータス変更では通常どおりWebhookが送信されます。レスポンスには適用された値が返されます。\n\n`write:sessions`権限が必要です。スコープ付きのAPIキーには、セッションへの書き込みアクセスが必要です。存在しない`session_id`では`404`、別のアプリケーションのセッションでは`403`が返り、いずれもボディを読み取る前に返されます。本番環境のセッションでは、ボディの検証が終わってから`404`が返ります。セッション自身のトークンを使ってホスト型フローからシミュレーションするには、`POST /v3/session/{sessionId}/sandbox/simulate/`を使用してください。シナリオの一覧は[サンドボックスとテストデータ](/ja/integration/sandbox-testing)を参照してください。",
        "operationId": "post_v3_session_simulate",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "サンドボックス検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxSimulateRequest"
              },
              "examples": {
                "Scenario Without Webhooks": {
                  "summary": "Webhookを送信せずにシナリオで却下する",
                  "value": {
                    "scenario": "decline_aml_hit",
                    "send_webhooks": false
                  }
                },
                "Status Only": {
                  "summary": "承認して通常のWebhookを送信する",
                  "value": {
                    "new_status": "Approved"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ステータスが変更されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxSimulateResponse"
                },
                "examples": {
                  "Simulated": {
                    "summary": "シナリオで却下、Webhookは未送信",
                    "value": {
                      "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                      "previous_status": "In Progress",
                      "status": "Declined",
                      "scenario": "decline_aml_hit",
                      "risk": "POSSIBLE_MATCH_FOUND",
                      "send_webhooks": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: 不明なシナリオまたはリスク、`scenario`と`risk`のどちらからも提供されない場合に`new_status`がない、このエンドポイントでは設定できないステータス、またはセッションがすでに要求されたステータスになっている（素のJSON配列）。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown Scenario": {
                    "summary": "scenarioがカタログにありません",
                    "value": {
                      "scenario": [
                        "Unknown sandbox scenario: 'not-a-scenario'."
                      ]
                    }
                  },
                  "Unknown Risk": {
                    "summary": "riskがカタログに存在しない",
                    "value": {
                      "risk": [
                        "Unknown sandbox risk case: 'NOT_A_RISK'."
                      ]
                    }
                  },
                  "Missing new_status": {
                    "summary": "new_status、scenario、riskのいずれも指定されていません",
                    "value": {
                      "new_status": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid new_status": {
                    "summary": "シミュレーションでは設定されないステータス",
                    "value": {
                      "new_status": [
                        "\"Resubmitted\" is not a valid choice."
                      ]
                    }
                  },
                  "Same Status": {
                    "summary": "セッションはすでにこのステータスです",
                    "value": [
                      "The new status is the same as the current status."
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がない、呼び出し元に`write:sessions`権限がない、スコープ付きAPIキーにこのエンドポイントに必要なアクセス権がない、または`session_id`が別のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "呼び出し元にwrite:sessions権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped Key Without Access": {
                    "summary": "このアクセス権を持たないスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has no write access to sessions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`のセッションが存在しないか、本番(サンドボックス以外)のセッションです。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "不明なセッション、または本番環境のセッション",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/simulate/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"scenario\": \"decline_aml_hit\", \"send_webhooks\": false}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.simulate(\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    scenario=\"decline_aml_hit\",\n    send_webhooks=False,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.simulate(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", {\n  scenario: \"decline_aml_hit\",\n  send_webhooks: false,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Simulate(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\", didit.SandboxSimulateRequest{\n\tScenario:     didit.String(\"decline_aml_hit\"),\n\tSendWebhooks: didit.Bool(false),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SandboxSimulateRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().simulate(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", SandboxSimulateRequest.builder()\n        .scenario(\"decline_aml_hit\")\n        .sendWebhooks(false)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->simulate('3fa85f64-5717-4562-b3fc-2c963f66afa6', [\n    'scenario' => 'decline_aml_hit',\n    'send_webhooks' => false,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.simulate(\n  \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  scenario: \"decline_aml_hit\",\n  send_webhooks: false\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.SimulateAsync(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", new SandboxSimulateRequest\n{\n    Scenario = \"decline_aml_hit\",\n    SendWebhooks = false,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "simulate",
          "auth": "api_key",
          "server": true
        }
      }
    },
    "/v3/session/{sessionId}/sandbox/simulate/": {
      "post": {
        "summary": "クライアントからサンドボックスセッションのステータスをシミュレートする",
        "description": "`POST /v3/session/{sessionId}/simulate/`と同じシミュレーションですが、APIキーではなくセッション自体の`Session-Token`（[Create Session](/ja/sessions-api/create-session)の`session_token`で返されます）で認証するため、テストハーネスやホスト型フローからクライアント側で呼び出せます。リクエストボディ、レスポンス、`send_webhooks`の動作は、そのエンドポイントとまったく同じです。\n\n本番環境（サンドボックス以外）のアプリケーションの`Session-Token`を使用した場合、またはパス内の`sessionId`と一致しないトークンを使用した場合は、`404`が返されます。[Sandbox & Test Data](/ja/integration/sandbox-testing)を参照してください。",
        "operationId": "post_v3_session_sandbox_simulate",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "SessionTokenAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "サンドボックス検証セッションのUUID。認証に使用したSession-Tokenにエンコードされたセッションと一致する必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxSimulateRequest"
              },
              "examples": {
                "Scenario Without Webhooks": {
                  "summary": "Webhookを送信せずにシナリオで却下する",
                  "value": {
                    "scenario": "decline_aml_hit",
                    "send_webhooks": false
                  }
                },
                "Status Only": {
                  "summary": "承認して通常のWebhookを送信する",
                  "value": {
                    "new_status": "Approved"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ステータスが変更されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxSimulateResponse"
                },
                "examples": {
                  "Simulated": {
                    "summary": "シナリオで却下、Webhookは未送信",
                    "value": {
                      "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                      "previous_status": "In Progress",
                      "status": "Declined",
                      "scenario": "decline_aml_hit",
                      "risk": "POSSIBLE_MATCH_FOUND",
                      "send_webhooks": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: 不明なシナリオまたはリスク、`scenario`と`risk`のどちらからも提供されない場合に`new_status`がない、このエンドポイントでは設定できないステータス、またはセッションがすでに要求されたステータスになっている（素のJSON配列）。",
            "content": {
              "application/json": {
                "examples": {
                  "Unknown Scenario": {
                    "summary": "scenarioがカタログにありません",
                    "value": {
                      "scenario": [
                        "Unknown sandbox scenario: 'not-a-scenario'."
                      ]
                    }
                  },
                  "Unknown Risk": {
                    "summary": "riskがカタログに存在しない",
                    "value": {
                      "risk": [
                        "Unknown sandbox risk case: 'NOT_A_RISK'."
                      ]
                    }
                  },
                  "Missing new_status": {
                    "summary": "new_status、scenario、riskのいずれも指定されていません",
                    "value": {
                      "new_status": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid new_status": {
                    "summary": "シミュレーションでは設定されないステータス",
                    "value": {
                      "new_status": [
                        "\"Resubmitted\" is not a valid choice."
                      ]
                    }
                  },
                  "Same Status": {
                    "summary": "セッションはすでにこのステータスです",
                    "value": [
                      "The new status is the same as the current status."
                    ]
                  }
                }
              }
            }
          },
          "403": {
            "description": "`Session-Token`ヘッダーがないか、無効です。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Session Token": {
                    "summary": "Session-Tokenがないか無効です",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`Session-Token`が本番環境（サンドボックス以外）のアプリケーションに属しているか、パス内の`sessionId`と一致しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "本番環境のセッション、またはsession_id / tokenの不一致",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/sandbox/simulate/ \\\n  -H 'Session-Token: YOUR_SESSION_TOKEN' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"new_status\": \"Approved\", \"send_webhooks\": false}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "import requests\n\nresponse = requests.post(\n    \"https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/sandbox/simulate/\",\n    headers={\"Session-Token\": \"YOUR_SESSION_TOKEN\"},\n    json={\"new_status\": \"Approved\", \"send_webhooks\": False},\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ],
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "simulate_sandbox",
          "auth": "device_token",
          "server": false
        }
      }
    },
    "/v3/session/{sessionId}/features/overrides/": {
      "get": {
        "summary": "セッションのチェックのオーバーライド一覧を取得",
        "description": "ユーザー認証 (KYC) または法人確認 (KYB) セッションにおける個々の機能(ステップ)のステータスに対するすべてのオーバーライドを、新しい順に、ページネーションなしで返します。適用済みのもの、本人がフローを完了するのを待っているもの(`pending_until_flow_finishes`)、キャンセルされたものが含まれ、それぞれに依頼者、理由、および本人がまだフロー中に適用されたかどうか(`forced`)が含まれます。\n\n`person_in_flow`は、`defer_until_flow_finishes: true`を指定した新しいオーバーライドが待機状態になるかどうかを示します。`flow_finished_at`は本人が最後にフローを完了した日時です。本人がまだフロー中の場合(再提出を含む)や、本人が完了する前にセッションが終了した場合は`null`になります。\n\n`read:sessions`権限が必要です。スコープ付きAPIキーには判定への読み取りアクセスが必要です。",
        "operationId": "get_v3_session_feature_overrides",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "セッションのチェックのオーバーライド。新しい順。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "session_id",
                    "person_in_flow",
                    "flow_finished_at",
                    "overrides"
                  ],
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid",
                      "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
                    },
                    "person_in_flow": {
                      "type": "boolean",
                      "description": "本人がまだフロー内にいるかどうか。この場合、`defer_until_flow_finishes: true`を指定した新しいオーバーライドは待機します。",
                      "example": true
                    },
                    "flow_finished_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "本人が最後にフローを完了した日時。本人がまだフローの途中にいる間（再提出を含む）、および本人が完了する前にセッションが終了した場合（放棄、期限切れ、またはフロー途中での判定）は`null`です。",
                      "example": null
                    },
                    "overrides": {
                      "type": "array",
                      "description": "セッションのすべてのオーバーライドを新しい順に示します。",
                      "items": {
                        "$ref": "#/components/schemas/FeatureStatusOverride"
                      }
                    }
                  }
                },
                "examples": {
                  "Overrides": {
                    "summary": "上書き1件が待機中、1件が適用済み",
                    "value": {
                      "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                      "person_in_flow": true,
                      "flow_finished_at": null,
                      "overrides": [
                        {
                          "id": "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
                          "node_id": "feature_liveness_1",
                          "feature_type": "",
                          "feature_model": "Face",
                          "previous_status": "Declined",
                          "new_status": "Approved",
                          "state": "pending_until_flow_finishes",
                          "forced": false,
                          "reason": "Liveness retried with a reviewer present.",
                          "requested_by": {
                            "email": "reviewer@example.com",
                            "name": "Alex Reviewer",
                            "type": "CONSOLE_USER"
                          },
                          "requested_at": "2026-10-13T09:15:00Z",
                          "applied_at": null,
                          "cancelled_at": null,
                          "cancel_reason": null
                        },
                        {
                          "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
                          "node_id": "feature_ocr_1",
                          "feature_type": "",
                          "feature_model": "KYC",
                          "previous_status": "In Review",
                          "new_status": "Approved",
                          "state": "applied",
                          "forced": true,
                          "reason": "Document manually verified by compliance.",
                          "requested_by": {
                            "email": "reviewer@example.com",
                            "name": "Alex Reviewer",
                            "type": "CONSOLE_USER"
                          },
                          "requested_at": "2026-10-13T09:15:00Z",
                          "applied_at": "2026-10-13T09:15:00Z",
                          "cancelled_at": null,
                          "cancel_reason": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がない、呼び出し元に`read:sessions`権限がない、スコープ付きAPIキーにこのエンドポイントに必要なアクセス権がない、または`session_id`が別のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "呼び出し元にread:sessions権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped Key Without Access": {
                    "summary": "このアクセス権を持たないスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has no read access to decisions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`を持つKYCまたはKYBセッションが存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "不明なsession_id",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET \\\n  https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.list_feature_overrides(\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.listFeatureOverrides(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ListFeatureOverrides(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().listFeatureOverrides(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->listFeatureOverrides('3fa85f64-5717-4562-b3fc-2c963f66afa6');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.list_feature_overrides(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ListFeatureOverridesAsync(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list_feature_overrides",
          "auth": "api_key",
          "server": true
        }
      }
    },
    "/v3/session/{sessionId}/features/overrides/{overrideId}/cancel/": {
      "post": {
        "summary": "フローの完了を待っているチェックのオーバーライドをキャンセル",
        "description": "まだ`pending_until_flow_finishes`の状態にある機能(ステップ)ステータスのオーバーライドをキャンセルし、適用されないようにします。チェックのステータスはそのまま維持され、キャンセルはセッションのアクティビティに`FEATURE_OVERRIDE_CANCELLED`として記録されます。Webhookは送信されません。レスポンスは`state: cancelled`および`cancel_reason: cancelled_by_reviewer`を持つオーバーライドです。\n\nすでに適用済みまたはキャンセル済みのオーバーライドの場合は、コード`feature_override_not_pending`とともに`409`が返されます。オーバーライドIDは`GET /v3/session/{sessionId}/features/overrides/`、または機能ステータスの更新で返される`override`で確認できます。\n\n`write:sessions`権限が必要です。スコープ付きのAPIキーには判定への書き込みアクセスが必要です。",
        "operationId": "post_v3_session_feature_override_cancel",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          },
          {
            "in": "path",
            "name": "overrideId",
            "required": true,
            "description": "取り消すオーバーライドの`id`です。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "オーバーライドはキャンセルされ、今後適用されることはありません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeatureStatusOverride"
                },
                "examples": {
                  "Cancelled": {
                    "summary": "キャンセルされたオーバーライド",
                    "value": {
                      "id": "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
                      "node_id": "feature_liveness_1",
                      "feature_type": "",
                      "feature_model": "Face",
                      "previous_status": "Declined",
                      "new_status": "Approved",
                      "state": "cancelled",
                      "forced": false,
                      "reason": "Liveness retried with a reviewer present.",
                      "requested_by": {
                        "email": "reviewer@example.com",
                        "name": "Alex Reviewer",
                        "type": "CONSOLE_USER"
                      },
                      "requested_at": "2026-10-13T09:15:00Z",
                      "applied_at": null,
                      "cancelled_at": "2026-10-13T09:20:00Z",
                      "cancel_reason": "cancelled_by_reviewer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がない、呼び出し元に`write:sessions`権限がない、スコープ付きAPIキーにこのエンドポイントに必要なアクセス権がない、または`session_id`が別のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "呼び出し元にwrite:sessions権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped Key Without Access": {
                    "summary": "このアクセス権を持たないスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`を持つKYCまたはKYBセッションが存在しないか、セッションにこの`overrideId`を持つオーバーライドがありません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "不明なsession_id",
                    "value": {
                      "detail": "Not found."
                    }
                  },
                  "Override Not Found": {
                    "summary": "このセッションにこのidのオーバーライドはありません",
                    "value": {
                      "detail": "Override not found."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "オーバーライドはすでに適用済みか、キャンセルされています。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Pending": {
                    "summary": "キャンセルできるのは待機中のオーバーライドのみです",
                    "value": {
                      "detail": "This override is no longer pending: it already applied or was cancelled.",
                      "code": "feature_override_not_pending"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3/cancel/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.cancel_feature_override(\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    \"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.cancelFeatureOverride(\n  \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  \"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.CancelFeatureOverride(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\", \"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().cancelFeatureOverride(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", \"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->cancelFeatureOverride('3fa85f64-5717-4562-b3fc-2c963f66afa6', '9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.cancel_feature_override(\n  \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  \"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.CancelFeatureOverrideAsync(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", \"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "cancel_feature_override",
          "auth": "api_key",
          "server": true
        }
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/": {
      "post": {
        "summary": "ネットワークにタグを追加",
        "description": "アプリケーションのタグの1つをネットワークに付与します。ネットワークの詳細を返し、その`tags`にはネットワーク上のアプリケーションのタグが一覧表示されます。タグが追加された場合は`201`、すでにネットワークに付与されていた場合は`200`を返します。他のアプリケーションに属するタグ、または存在しないタグの場合は404 `Tag not found.`を返します。フルアクセスのAPIキー、またはコンソールメンバーの場合は`write:networks`が必要です。",
        "operationId": "add_network_tag",
        "tags": [
          "Networks"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "description": "ネットワークのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NetworkTagRequest"
              },
              "example": {
                "tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/3fa85f64-5717-4562-b3fc-2c963f66afa6/tags/add/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.add_tag(\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    tag_uuid=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.addTag(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", {\n  tag_uuid: \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.AddTag(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\", didit.NetworkTagRequest{\n\tTagUUID: \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.NetworkTagRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().addTag(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", NetworkTagRequest.builder()\n        .tagUuid(\"7c9e6679-7425-40de-944b-e07fc1f90ae7\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->addTag('3fa85f64-5717-4562-b3fc-2c963f66afa6', [\n    'tag_uuid' => '7c9e6679-7425-40de-944b-e07fc1f90ae7',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.add_tag(\n  \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  tag_uuid: \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.AddTagAsync(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", new NetworkTagRequest\n{\n    TagUuid = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "タグが追加されました。ネットワークの詳細を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkDetailResponse"
                },
                "example": {
                  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "network_id": "N-0042",
                  "name": null,
                  "status": "in_review",
                  "risk": {
                    "score": 82,
                    "band": "high",
                    "bar": 0.82
                  },
                  "pattern_types": [
                    "exact_same_device",
                    "same_email"
                  ],
                  "signal_types": [
                    "device",
                    "email"
                  ],
                  "member_counts": {
                    "total": 3,
                    "users": 3,
                    "businesses": 0,
                    "transaction_parties": 0
                  },
                  "member_status": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "not_completed": 1
                  },
                  "signal_coverage": {
                    "device": {
                      "signals": 1,
                      "subjects": 3,
                      "coverage": 1.0
                    },
                    "email": {
                      "signals": 1,
                      "subjects": 2,
                      "coverage": 0.6667
                    }
                  },
                  "first_activity_at": "2026-10-01T09:12:44Z",
                  "last_activity_at": "2026-10-12T16:03:10Z",
                  "stats": {
                    "members": {
                      "total": 3,
                      "users": 3,
                      "businesses": 0,
                      "transaction_parties": 0
                    },
                    "member_status": {
                      "approved": 1,
                      "declined": 1,
                      "in_review": 0,
                      "not_completed": 1
                    },
                    "signals": {
                      "total": 2,
                      "by_type": {
                        "device": {
                          "signals": 1,
                          "subjects": 3,
                          "coverage": 1.0
                        },
                        "email": {
                          "signals": 1,
                          "subjects": 2,
                          "coverage": 0.6667
                        }
                      }
                    }
                  },
                  "fraud_tags": [],
                  "risk_signals": {
                    "residential_proxy_reuse": {
                      "detected": false,
                      "signal_count": 0,
                      "max_subject_count": 0
                    },
                    "email_intelligence": {
                      "enriched_signal_count": 1,
                      "high_risk_count": 0,
                      "social_profile_count": 0
                    },
                    "phone_intelligence": {
                      "enriched_signal_count": 0,
                      "high_risk_count": 0
                    }
                  },
                  "reviewed_at": "2026-10-12T16:30:00Z",
                  "reviewed_by": "reviewer@example.com",
                  "review_reason": "Shared device across three new accounts.",
                  "notes_count": 0,
                  "sharing_mode": "global",
                  "cross_org_available": true,
                  "cross_org_unavailable_reason": null,
                  "tags": [
                    {
                      "uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
                      "name": "SUSPICIOUS",
                      "color": "#6366F1",
                      "source": "custom",
                      "added_by": null,
                      "added_at": "2026-10-13T08:15:00Z"
                    }
                  ],
                  "outcomes": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "total": 3
                  },
                  "patterns": [
                    {
                      "type": "background",
                      "score": 0.8125,
                      "members": 3,
                      "reason": null,
                      "computed_at": "2026-10-13T08:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "200": {
            "description": "タグはすでにネットワークに付いているため、そのまま変更されません。ネットワークの詳細を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkDetailResponse"
                },
                "example": {
                  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "network_id": "N-0042",
                  "name": null,
                  "status": "in_review",
                  "risk": {
                    "score": 82,
                    "band": "high",
                    "bar": 0.82
                  },
                  "pattern_types": [
                    "exact_same_device",
                    "same_email"
                  ],
                  "signal_types": [
                    "device",
                    "email"
                  ],
                  "member_counts": {
                    "total": 3,
                    "users": 3,
                    "businesses": 0,
                    "transaction_parties": 0
                  },
                  "member_status": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "not_completed": 1
                  },
                  "signal_coverage": {
                    "device": {
                      "signals": 1,
                      "subjects": 3,
                      "coverage": 1.0
                    },
                    "email": {
                      "signals": 1,
                      "subjects": 2,
                      "coverage": 0.6667
                    }
                  },
                  "first_activity_at": "2026-10-01T09:12:44Z",
                  "last_activity_at": "2026-10-12T16:03:10Z",
                  "stats": {
                    "members": {
                      "total": 3,
                      "users": 3,
                      "businesses": 0,
                      "transaction_parties": 0
                    },
                    "member_status": {
                      "approved": 1,
                      "declined": 1,
                      "in_review": 0,
                      "not_completed": 1
                    },
                    "signals": {
                      "total": 2,
                      "by_type": {
                        "device": {
                          "signals": 1,
                          "subjects": 3,
                          "coverage": 1.0
                        },
                        "email": {
                          "signals": 1,
                          "subjects": 2,
                          "coverage": 0.6667
                        }
                      }
                    }
                  },
                  "fraud_tags": [],
                  "risk_signals": {
                    "residential_proxy_reuse": {
                      "detected": false,
                      "signal_count": 0,
                      "max_subject_count": 0
                    },
                    "email_intelligence": {
                      "enriched_signal_count": 1,
                      "high_risk_count": 0,
                      "social_profile_count": 0
                    },
                    "phone_intelligence": {
                      "enriched_signal_count": 0,
                      "high_risk_count": 0
                    }
                  },
                  "reviewed_at": "2026-10-12T16:30:00Z",
                  "reviewed_by": "reviewer@example.com",
                  "review_reason": "Shared device across three new accounts.",
                  "notes_count": 0,
                  "sharing_mode": "global",
                  "cross_org_available": true,
                  "cross_org_unavailable_reason": null,
                  "tags": [
                    {
                      "uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
                      "name": "SUSPICIOUS",
                      "color": "#6366F1",
                      "source": "custom",
                      "added_by": null,
                      "added_at": "2026-10-13T08:15:00Z"
                    }
                  ],
                  "outcomes": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "total": 3
                  },
                  "patterns": [
                    {
                      "type": "background",
                      "score": 0.8125,
                      "members": 3,
                      "reason": null,
                      "computed_at": "2026-10-13T08:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効です。`tag_uuid`が欠落しているか、UUIDではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tag_uuid": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "examples": {
                  "Missing tag_uuid": {
                    "summary": "tag_uuidがありません",
                    "value": {
                      "tag_uuid": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid tag_uuid": {
                    "summary": "tag_uuidが無効です",
                    "value": {
                      "tag_uuid": [
                        "Must be a valid UUID."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報がないか無効です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "認証情報がないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが別のアプリケーションに属しているか、アクセスが制限されたキーです。ネットワークのエンドポイントにはフルアクセスキーが必要です。コンソールメンバーのトークンには`write:networks`が必要です。組織でネットワーク機能が有効になっていない場合も、`code: networks_not_entitled`とともに返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Networks not enabled": {
                    "summary": "ネットワークが有効化されていません",
                    "value": {
                      "detail": "Networks is disabled for this organization. Contact Didit support if you believe this is an error.",
                      "code": "networks_not_entitled"
                    }
                  },
                  "Restricted API key": {
                    "summary": "制限付きAPIキー",
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "No permission": {
                    "summary": "権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "見つかりません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Network not found": {
                    "summary": "ネットワークが見つかりません",
                    "value": {
                      "detail": "Network not found."
                    }
                  },
                  "Tag not found": {
                    "summary": "タグが見つかりません",
                    "value": {
                      "detail": "Tag not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "networks",
          "method": "add_tag",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        }
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/remove/": {
      "post": {
        "summary": "ネットワークからタグを削除する",
        "description": "アプリケーションのタグの1つをネットワークから削除します。ネットワークの詳細を返します。タグがネットワークに付いていない場合、またはタグがアプリケーションに属していない場合は404を返します。フルアクセスのAPIキー、またはコンソールメンバーの場合は`write:networks`が必要です。",
        "operationId": "remove_network_tag",
        "tags": [
          "Networks"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          },
          {
            "name": "network_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "description": "ネットワークのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NetworkTagRequest"
              },
              "example": {
                "tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/3fa85f64-5717-4562-b3fc-2c963f66afa6/tags/remove/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.networks.remove_tag(\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    tag_uuid=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.networks.removeTag(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", {\n  tag_uuid: \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Networks.RemoveTag(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\", didit.NetworkTagRequest{\n\tTagUUID: \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.NetworkTagRequest;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.networks().removeTag(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", NetworkTagRequest.builder()\n        .tagUuid(\"7c9e6679-7425-40de-944b-e07fc1f90ae7\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->networks->removeTag('3fa85f64-5717-4562-b3fc-2c963f66afa6', [\n    'tag_uuid' => '7c9e6679-7425-40de-944b-e07fc1f90ae7',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.networks.remove_tag(\n  \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  tag_uuid: \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Networks.RemoveTagAsync(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", new NetworkTagRequest\n{\n    TagUuid = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "タグがネットワークから削除されました。ネットワークの詳細を返します。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkDetailResponse"
                },
                "example": {
                  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "network_id": "N-0042",
                  "name": null,
                  "status": "in_review",
                  "risk": {
                    "score": 82,
                    "band": "high",
                    "bar": 0.82
                  },
                  "pattern_types": [
                    "exact_same_device",
                    "same_email"
                  ],
                  "signal_types": [
                    "device",
                    "email"
                  ],
                  "member_counts": {
                    "total": 3,
                    "users": 3,
                    "businesses": 0,
                    "transaction_parties": 0
                  },
                  "member_status": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "not_completed": 1
                  },
                  "signal_coverage": {
                    "device": {
                      "signals": 1,
                      "subjects": 3,
                      "coverage": 1.0
                    },
                    "email": {
                      "signals": 1,
                      "subjects": 2,
                      "coverage": 0.6667
                    }
                  },
                  "first_activity_at": "2026-10-01T09:12:44Z",
                  "last_activity_at": "2026-10-12T16:03:10Z",
                  "stats": {
                    "members": {
                      "total": 3,
                      "users": 3,
                      "businesses": 0,
                      "transaction_parties": 0
                    },
                    "member_status": {
                      "approved": 1,
                      "declined": 1,
                      "in_review": 0,
                      "not_completed": 1
                    },
                    "signals": {
                      "total": 2,
                      "by_type": {
                        "device": {
                          "signals": 1,
                          "subjects": 3,
                          "coverage": 1.0
                        },
                        "email": {
                          "signals": 1,
                          "subjects": 2,
                          "coverage": 0.6667
                        }
                      }
                    }
                  },
                  "fraud_tags": [],
                  "risk_signals": {
                    "residential_proxy_reuse": {
                      "detected": false,
                      "signal_count": 0,
                      "max_subject_count": 0
                    },
                    "email_intelligence": {
                      "enriched_signal_count": 1,
                      "high_risk_count": 0,
                      "social_profile_count": 0
                    },
                    "phone_intelligence": {
                      "enriched_signal_count": 0,
                      "high_risk_count": 0
                    }
                  },
                  "reviewed_at": "2026-10-12T16:30:00Z",
                  "reviewed_by": "reviewer@example.com",
                  "review_reason": "Shared device across three new accounts.",
                  "notes_count": 0,
                  "sharing_mode": "global",
                  "cross_org_available": true,
                  "cross_org_unavailable_reason": null,
                  "tags": [],
                  "outcomes": {
                    "approved": 1,
                    "declined": 1,
                    "in_review": 0,
                    "total": 3
                  },
                  "patterns": [
                    {
                      "type": "background",
                      "score": 0.8125,
                      "members": 3,
                      "reason": null,
                      "computed_at": "2026-10-13T08:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効です。`tag_uuid`が欠落しているか、UUIDではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tag_uuid": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "examples": {
                  "Missing tag_uuid": {
                    "summary": "tag_uuidがありません",
                    "value": {
                      "tag_uuid": [
                        "This field is required."
                      ]
                    }
                  },
                  "Invalid tag_uuid": {
                    "summary": "tag_uuidが無効です",
                    "value": {
                      "tag_uuid": [
                        "Must be a valid UUID."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "認証情報がないか無効です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "認証情報がないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーが別のアプリケーションに属しているか、アクセスが制限されたキーです。ネットワークのエンドポイントにはフルアクセスキーが必要です。コンソールメンバーのトークンには`write:networks`が必要です。組織でネットワーク機能が有効になっていない場合も、`code: networks_not_entitled`とともに返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Networks not enabled": {
                    "summary": "ネットワークが有効化されていません",
                    "value": {
                      "detail": "Networks is disabled for this organization. Contact Didit support if you believe this is an error.",
                      "code": "networks_not_entitled"
                    }
                  },
                  "Restricted API key": {
                    "summary": "制限付きAPIキー",
                    "value": {
                      "detail": "This API key has no access to this endpoint."
                    }
                  },
                  "No permission": {
                    "summary": "権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "見つかりません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "description": "コード付きのエラーに含まれます。例: `networks_not_entitled`。"
                    }
                  }
                },
                "examples": {
                  "Network not found": {
                    "summary": "ネットワークが見つかりません",
                    "value": {
                      "detail": "Network not found."
                    }
                  },
                  "Tag not found": {
                    "summary": "タグが見つかりません",
                    "value": {
                      "detail": "Tag not found."
                    }
                  },
                  "Tag not on the network": {
                    "summary": "タグがネットワーク上にありません",
                    "value": {
                      "detail": "This tag is not on the network."
                    }
                  }
                }
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "networks",
          "method": "remove_tag",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        }
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/cases/{case_uuid}/requests/{request_uuid}/remind/": {
      "post": {
        "summary": "リクエストについて顧客にリマインドする",
        "description": "待機中の顧客リクエストのメールを、同じ検証済みの受信者に同じ内容で再送します。リクエストのリマインドは24時間に最大1回までです。リマインドによってほかは何も変わりません。リクエストの期限はそのままで、ケースのステータスも変わりません。各リマインドは、アクションが`reminded`のCUSTOMER_REQUESTイベントとしてケースに記録されます。レスポンスの`delivery_status`は、今回のリマインドの配信結果を示し、SENT、SIMULATED（メールは送信されていません）、UNKNOWN（メールが受け付けられた可能性があります。自動では再送されません）のいずれかです。`next_reminder_at`は、このリクエストを次にリマインドできる日時です。顧客が回答すべきリクエストがもう存在しない場合は`reason`付きで409を返し、過去24時間以内にリマインド済みの場合は`retry_at`と`Retry-After`ヘッダー付きで429を返します。`write:cases`が必要です。",
        "operationId": "organization_application_cases_requests_remind_create",
        "parameters": [
          {
            "in": "path",
            "name": "organization_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "組織のUUIDです。"
          },
          {
            "in": "path",
            "name": "application_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "アプリケーションのUUID。"
          },
          {
            "in": "path",
            "name": "case_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "ケースのUUID。"
          },
          {
            "in": "path",
            "name": "request_uuid",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "顧客リクエストのUUID。ケースのリクエスト一覧から取得します。"
          }
        ],
        "tags": [
          "Case Management"
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/cases/c1a5e000-0000-4000-8000-000000000001/requests/3fa85f64-5717-4562-b3fc-2c963f66afa6/remind/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nresult = client.cases.requests.remind(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nconst result = await didit.cases.requests.remind(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Cases.Requests.Remind(ctx, \"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nvar result = client.cases().requests().remind(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$result = $didit->cases->requests->remind('11111111-2222-3333-4444-555555555555', '11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\nresult = didit.cases.requests.remind(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"11111111-2222-3333-4444-555555555555\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nvar result = await client.Cases.Requests.RemindAsync(\"11111111-2222-3333-4444-555555555555\", \"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "リマインダーが記録され、そのメールが送信されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "request",
                    "reminded_at",
                    "delivery_status",
                    "next_reminder_at"
                  ],
                  "properties": {
                    "request": {
                      "$ref": "#/components/schemas/CustomerMessagingCaseRequest"
                    },
                    "reminded_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "このリマインダーが記録された日時。"
                    },
                    "delivery_status": {
                      "type": "string",
                      "enum": [
                        "SENT",
                        "SIMULATED",
                        "UNKNOWN"
                      ],
                      "description": "このリマインダーの配信がどのように終了したか。SIMULATED：メールは送信されていません。UNKNOWN：メールが受理された可能性があります。自動的に再送信されることはありません。"
                    },
                    "next_reminder_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "このリクエストに再度リマインドできる日時（`reminded_at`の24時間後）。"
                    }
                  }
                },
                "example": {
                  "request": {
                    "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                    "purpose": "confirm_details",
                    "language": "en",
                    "recipient": "customer@example.com",
                    "expires_at": "2026-10-20T09:00:00Z",
                    "actor_email": "reviewer@example.com",
                    "delivery_status": "SENT",
                    "delivered_at": "2026-10-13T09:00:04Z",
                    "cancelled_at": null,
                    "responded_at": null,
                    "response": null,
                    "has_attachment": false,
                    "created_at": "2026-10-13T09:00:00Z"
                  },
                  "reminded_at": "2026-10-14T10:30:00Z",
                  "delivery_status": "SENT",
                  "next_reminder_at": "2026-10-15T10:30:00Z"
                }
              }
            }
          },
          "400": {
            "description": "ケースに承認待ちの解決内容があります。ボディは文字列のリストです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "example": [
                  "Customer messages require an active case without a pending resolution."
                ]
              }
            }
          },
          "403": {
            "description": "呼び出し元に必要なケースの権限がありません。"
          },
          "404": {
            "description": "このリクエストまたはケースは、この呼び出し元では利用できません。"
          },
          "409": {
            "description": "このリクエストはすでに顧客の対応を待っていないため、リマインドする内容がありません。`reason`に理由が示されます。`answered`（顧客が回答した）、`cancelled`、`expired`、`closed`（リクエスト送信後にケースが解決された。その後再オープンされた場合も含む）、`not_actionable`（レビュー進行中の更新で何も求めていない）、`not_delivered`（最初のメールがまだ送信されていない）、`contact_unavailable`（認証済みのメールアドレスが利用できなくなった）のいずれかです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "case_request_not_waiting"
                      ]
                    },
                    "reason": {
                      "type": "string",
                      "enum": [
                        "answered",
                        "cancelled",
                        "expired",
                        "closed",
                        "not_actionable",
                        "not_delivered",
                        "contact_unavailable"
                      ]
                    }
                  }
                },
                "example": {
                  "detail": "This request no longer waits on the customer, so there is nothing to remind them of.",
                  "code": "case_request_not_waiting",
                  "reason": "answered"
                }
              }
            }
          },
          "429": {
            "description": "このリクエストには過去24時間以内にすでにリマインドが送信されています。`retry_at`と`Retry-After`ヘッダーで、次にリマインドできる日時が示されます。",
            "headers": {
              "Retry-After": {
                "description": "このリクエストを再度リマインドできるようになるまでの待機秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 3600
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "case_request_reminder_too_soon"
                      ]
                    },
                    "retry_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "example": {
                  "detail": "This request was already reminded in the last 24 hours.",
                  "code": "case_request_reminder_too_soon",
                  "retry_at": "2026-10-15T10:30:00Z"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-didit-sdk": {
          "resource": "cases.requests",
          "method": "remind",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        }
      }
    },
    "/v3/session/{sessionId}/decision-email-preview/": {
      "post": {
        "summary": "セッションの判定メールをプレビューする",
        "description": "`send_email: true`を指定してセッションを`Approved`または`Declined`に設定したときに本人が受け取るメールを、セッションを変更したり何かを送信したりせずにレンダリングします。レスポンスには、送信されるとおりの件名とHTML、受信者、送信者、言語、そして変更を確定した場合に実際にメールが送信されるかどうか(`will_be_sent`、`not_sent_reason`)が含まれます。\n\n受信者は本人自身のアドレスです。フローのメールアドレス認証ステップで本人が検証したアドレス、それがない場合はセッション作成時に`contact_details`で指定されたアドレスです。送信者は、ホワイトラベルが適用される場合はアプリケーションの検証済み送信ドメイン(`sender_kind: customer`)、それ以外の場合はDiditの送信元(`sender_kind: didit`)です。\n\nプレビューしたとおりの内容を送信するには、同じ`new_status`、`send_email: true`、`recipient`の値を設定した`email_address`、`language`の値を設定した`email_language`、`preview_token`の値を設定した`email_preview_token`を指定して[Update Session Status](/ja/sessions-api/update-status)を呼び出します。このレシートの有効期限は15分です。プレビュー後に受信者、言語、セッションのステータス、送信者、またはメールが変更された場合、更新は何も変更する前に`409`を返します。再度プレビューし、新しいレシートで確定してください。\n\n`Approved`、`Declined`、`In Review`、`Kyc Expired`、`Abandoned`、`Resubmitted`ステータスのユーザー認証(KYC)および法人確認(KYB)セッションで利用できます。ステータスのチェックはボディの検証より前に実行されます。`write:sessions`権限が必要です。スコープ付きAPIキーには判定への書き込みアクセスが必要です。レスポンスには`Cache-Control: no-store`が使用されます。機密性の高い検証コンテンツとして扱ってください。",
        "operationId": "post_v3_session_decision_email_preview",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "required": true,
            "description": "検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "new_status"
                ],
                "properties": {
                  "new_status": {
                    "type": "string",
                    "enum": [
                      "Approved",
                      "Declined"
                    ],
                    "description": "メールをプレビューする対象の判定です。",
                    "example": "Approved"
                  },
                  "email_language": {
                    "type": "string",
                    "default": "en",
                    "description": "メールの言語。デフォルトはUpdate Session Statusと同じです。提供されていない言語は英語にフォールバックします。実際に使用される言語はレスポンスの`language`で確認できます。",
                    "example": "en"
                  }
                }
              },
              "examples": {
                "Approved": {
                  "summary": "承認済みメールを英語でプレビューする",
                  "value": {
                    "new_status": "Approved"
                  }
                },
                "Declined in Spanish": {
                  "summary": "却下メールをスペイン語でプレビューする",
                  "value": {
                    "new_status": "Declined",
                    "email_language": "es"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "プレビューのみです。セッションは変更されず、メールも送信されません。",
            "headers": {
              "Cache-Control": {
                "description": "常に`no-store`です。プレビューには認証内容が含まれるため、キャッシュしてはなりません。",
                "schema": {
                  "type": "string",
                  "example": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "recipient",
                    "recipient_source",
                    "sender",
                    "sender_name",
                    "sender_email",
                    "sender_kind",
                    "subject",
                    "html",
                    "text",
                    "language",
                    "will_be_sent",
                    "not_sent_reason",
                    "preview_token"
                  ],
                  "properties": {
                    "recipient": {
                      "type": "string",
                      "description": "メールの送信先アドレス。その人物のアドレスが不明な場合は空文字列です。その場合はメールを送信できず、`preview_token`も空になります。確認時に`email_address`として渡してください。",
                      "example": "person@example.com"
                    },
                    "recipient_source": {
                      "type": "string",
                      "enum": [
                        "email_verification",
                        "contact_details",
                        ""
                      ],
                      "description": "`recipient`の取得元。`email_verification`：フローのメールアドレス認証ステップで本人が認証したアドレス。`contact_details`：セッション作成時に`contact_details`で指定されたアドレス。アドレスがない場合は空文字列です。",
                      "example": "email_verification"
                    },
                    "sender": {
                      "type": "string",
                      "description": "メールの送信時に使われる`From`ヘッダーです。",
                      "example": "Example App <no-reply@mail.example.com>"
                    },
                    "sender_name": {
                      "type": "string",
                      "description": "`sender`の表示名の部分です。",
                      "example": "Example App"
                    },
                    "sender_email": {
                      "type": "string",
                      "format": "email",
                      "description": "`sender`のアドレス部分。",
                      "example": "no-reply@mail.example.com"
                    },
                    "sender_kind": {
                      "type": "string",
                      "enum": [
                        "customer",
                        "didit"
                      ],
                      "description": "`customer`: メールはアプリケーションの検証済み送信元ドメインから送信されます（ホワイトラベル）。`didit`: メールはDidit独自の送信元から送信されます。",
                      "example": "customer"
                    },
                    "subject": {
                      "type": "string",
                      "description": "送信されたとおりの件名。",
                      "example": "Your verification has been approved in Example App"
                    },
                    "html": {
                      "type": "string",
                      "description": "送信されるとおりのメールのHTMLで、ロゴはデータURLとして埋め込まれています。サンドボックス化されたフレーム内でレンダリングし、アプリケーションのDOMに直接レンダリングしないでください。",
                      "example": "<!DOCTYPE html><html><body>...</body></html>"
                    },
                    "text": {
                      "type": "string",
                      "description": "コンパクトなプレビュー用の、メール本文のプレーンテキストです。本人のメッセージスレッドに保存されている内容と同じです（本人が受け取るメールはHTMLのままです）。",
                      "example": "Verification Approved\n\nYour identity has been successfully verified with Acme Pay. No further action is needed on your part."
                    },
                    "language": {
                      "type": "string",
                      "description": "メールの記述言語です。指定した`email_language`が提供されていない場合は英語(`en`)です。",
                      "example": "en"
                    },
                    "will_be_sent": {
                      "type": "boolean",
                      "description": "`send_email: true`で変更を確定したときにこのメールが送信されるかどうかです。`not_sent_reason`が設定されている場合は`false`です。",
                      "example": true
                    },
                    "not_sent_reason": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "status_unchanged",
                        "notification_emails_disabled",
                        "no_recipient",
                        "sandbox",
                        null
                      ],
                      "description": "確定してもメールが送信されない理由、または送信される場合は`null`。`status_unchanged`：セッションはすでにこのステータスであるため、更新しても何も変わらず、何も送信されません。`notification_emails_disabled`：セッションが`contact_details.send_notification_emails: true`なしで作成されたため、`contact_details`で指定したアドレスに判定メールは送信されません。`no_recipient`：本人のアドレスが不明です。`sandbox`：受信者がサンドボックスでのメール配信をオプトインしていないサンドボックスセッションのため、送信はシミュレーションのみです。",
                      "example": null
                    },
                    "preview_token": {
                      "type": "string",
                      "description": "このメールに対する署名付きレシートで、有効期間は15分です。[セッションステータスを更新](/ja/sessions-api/update-status)に`email_preview_token`として渡してください。受信者がいない場合は空文字列です。",
                      "example": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
                    }
                  }
                },
                "examples": {
                  "Will Be Sent": {
                    "summary": "「承認済み」メールは、フローで検証されたメールアドレスに送信されます",
                    "value": {
                      "recipient": "person@example.com",
                      "recipient_source": "email_verification",
                      "sender": "Example App <no-reply@mail.example.com>",
                      "sender_name": "Example App",
                      "sender_email": "no-reply@mail.example.com",
                      "sender_kind": "customer",
                      "subject": "Your verification has been approved in Example App",
                      "html": "<!DOCTYPE html><html><body>...</body></html>",
                      "language": "en",
                      "will_be_sent": true,
                      "not_sent_reason": null,
                      "preview_token": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
                    }
                  },
                  "No Recipient": {
                    "summary": "この人物の住所は不明です",
                    "value": {
                      "recipient": "",
                      "recipient_source": "",
                      "sender": "Example App <no-reply@mail.example.com>",
                      "sender_name": "Example App",
                      "sender_email": "no-reply@mail.example.com",
                      "sender_kind": "customer",
                      "subject": "Your verification has been declined in Example App",
                      "html": "<!DOCTYPE html><html><body>...</body></html>",
                      "language": "en",
                      "will_be_sent": false,
                      "not_sent_reason": "no_recipient",
                      "preview_token": ""
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "セッションがこのエンドポイントで受け付けるステータスではない（`{\"detail\": ...}`）か、リクエストボディが無効です（`{\"<field>\": [\"<message>\"]}`）。",
            "content": {
              "application/json": {
                "examples": {
                  "Wrong Current Status": {
                    "summary": "セッションが、このエンドポイントで受け付けるステータスではありません",
                    "value": {
                      "detail": "Only sessions with status Approved, Declined, In Review, Kyc Expired, Abandoned, Resubmitted can be updated. Current status: In Progress"
                    }
                  },
                  "Invalid new_status": {
                    "summary": "new_statusがApprovedでもDeclinedでもない",
                    "value": {
                      "new_status": [
                        "\"Resubmitted\" is not a valid choice."
                      ]
                    }
                  },
                  "Missing new_status": {
                    "summary": "必須フィールドが省略されています",
                    "value": {
                      "new_status": [
                        "This field is required."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。",
            "content": {
              "application/json": {
                "examples": {
                  "Expired API Key": {
                    "summary": "有効期限を過ぎたスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証情報がない、呼び出し元に`write:sessions`権限がない、スコープ付きAPIキーにこのエンドポイントに必要なアクセス権がない、または`session_id`が別のアプリケーションに属しています。",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Credentials": {
                    "summary": "x-api-keyがないか無効です",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Missing Privilege": {
                    "summary": "呼び出し元にwrite:sessions権限がありません",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped Key Without Access": {
                    "summary": "このアクセス権を持たないスコープ付きAPIキー",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "この`session_id`を持つKYCまたはKYBセッションが存在しません。",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "summary": "不明なsession_id",
                    "value": {
                      "detail": "Not found."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST \\\n  https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/decision-email-preview/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"new_status\": \"Approved\", \"email_language\": \"en\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.preview_decision_email(\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    new_status=\"Approved\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.previewDecisionEmail(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", {\n  new_status: \"Approved\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.PreviewDecisionEmail(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\", didit.SessionsPreviewDecisionEmailParams{\n\tNewStatus: \"Approved\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsPreviewDecisionEmailParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().previewDecisionEmail(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", SessionsPreviewDecisionEmailParams.builder()\n        .newStatus(SessionsPreviewDecisionEmailParams.NewStatus.of(\"Approved\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->previewDecisionEmail('3fa85f64-5717-4562-b3fc-2c963f66afa6', [\n    'new_status' => 'Approved',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.preview_decision_email(\n  \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  new_status: \"Approved\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.PreviewDecisionEmailAsync(\"3fa85f64-5717-4562-b3fc-2c963f66afa6\", new SessionsPreviewDecisionEmailParams\n{\n    NewStatus = \"Approved\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "preview_decision_email",
          "auth": "api_key",
          "server": true
        }
      }
    },
    "/v3/travel-rule/join/{token}/": {
      "get": {
        "summary": "無料参加の招待を取得",
        "description": "公開、認証不要。参加リンクが有効な間、そのリンクの対象となる招待を表示します。依頼者、送信先のアドレス、事前入力されるディレクトリの値が含まれます。トークンが認証となります。",
        "operationId": "getTravelRuleJoinInvitation",
        "x-didit-sdk": {
          "resource": "travel_rule.join",
          "method": "get_invitation",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "参加リンクに含まれる招待トークンです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl https://verification.didit.me/v3/travel-rule/join/{token}/"
          }
        ],
        "responses": {
          "200": {
            "description": "招待です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleJoinInvitation"
                }
              }
            }
          },
          "404": {
            "description": "このリンクの招待はありません。"
          },
          "410": {
            "description": "招待はすでに有効ではありません。期限切れ、使用済み、または取り消されています。"
          }
        }
      },
      "post": {
        "summary": "無料のトラベルルールアカウントを登録する",
        "description": "公開、認証不要。リクエストを受け取った取引相手VASP向けに、無料のトラベルルールアカウントを作成します。メールアドレスは、招待が送信されたアドレスである必要があります。そのアドレスに6文字のコードがメールで送信されるので、検証エンドポイントに送信して登録を完了してください。登録の試行には、アドレスごとおよびIPごとにレート制限があります。",
        "operationId": "registerTravelRuleJoin",
        "x-didit-sdk": {
          "resource": "travel_rule.join",
          "method": "register",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "参加リンクに含まれる招待トークンです。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleJoinRegisterRequest"
              },
              "example": {
                "email": "compliance@example.com",
                "password": "a-long-passphrase"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/join/{token}/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"email\": \"compliance@example.com\", \"password\": \"a-long-passphrase\"}'"
          }
        ],
        "responses": {
          "202": {
            "description": "アカウントが作成され、コードがメールで送信されました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "認証コードをメールで確認するよう取引相手に伝えます。"
                    },
                    "email": {
                      "type": "string",
                      "format": "email",
                      "description": "コードの送信先アドレス。"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "メールアドレスが招待されたアドレスではないか、パスワードまたはアドレスが拒否されました。"
          },
          "404": {
            "description": "このリンクの招待はありません。"
          },
          "410": {
            "description": "招待はすでに有効ではありません。期限切れ、使用済み、または取り消されています。"
          },
          "429": {
            "description": "参加の試行回数が多すぎます。`X-RateLimit-*`ヘッダーは、使い切った割り当て枠を示します。"
          }
        }
      }
    },
    "/v3/travel-rule/join/{token}/verify/": {
      "post": {
        "summary": "無料のトラベルルールアカウントを認証する",
        "description": "公開、認証不要。メールで送信されたコードを使用し、無料の組織を作成して、その組織のアプリケーションがワークスペースエンドポイントで使用する認証情報をレスポンスとして返します。トラベルルールデータの受信は無料です。",
        "operationId": "verifyTravelRuleJoin",
        "x-didit-sdk": {
          "resource": "travel_rule.join",
          "method": "verify",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "参加リンクに含まれる招待トークンです。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleJoinVerifyRequest"
              },
              "example": {
                "email": "compliance@example.com",
                "code": "123456"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/join/{token}/verify/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"email\": \"compliance@example.com\", \"code\": \"123456\"}'"
          }
        ],
        "responses": {
          "201": {
            "description": "組織とアプリケーションの認証情報。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleJoinCredentials"
                }
              }
            }
          },
          "400": {
            "description": "コードまたはメールアドレスが拒否されました。"
          },
          "404": {
            "description": "このリンクの招待はありません。"
          },
          "410": {
            "description": "招待はすでに有効ではありません。期限切れ、使用済み、または取り消されています。"
          },
          "429": {
            "description": "参加の試行回数が多すぎます。`X-RateLimit-*`ヘッダーは、使い切った割り当て枠を示します。"
          }
        }
      }
    },
    "/v3/travel-rule/workspace/": {
      "get": {
        "summary": "無料のトラベルルールワークスペースを取得",
        "description": "無料で参加したアプリケーションの無料ワークスペースを読み取ります。ディレクトリの申請、ドメインの証明、請求、Diditネットワークへの掲載が含まれます。",
        "operationId": "getTravelRuleWorkspace",
        "x-didit-sdk": {
          "resource": "travel_rule.workspace",
          "method": "get",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/workspace/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.workspace.get()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.workspace.get();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.Workspace.Get(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().workspace().get();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->workspace->get();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.workspace.get\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Workspace.GetAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ワークスペース。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWorkspace"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションは無料で参加していないため、無料のワークスペースがありません。"
          }
        }
      }
    },
    "/v3/travel-rule/workspace/claim/": {
      "post": {
        "summary": "ディレクトリエントリを申請する",
        "description": "このワークスペースに該当するディレクトリエントリを申請します。業務用メールアドレスのドメインがエントリに記載されたドメインである場合、申請は証明済みとなり即座に適用されます。VASPプロファイルとトラベルルール設定がエントリから入力され、トラベルルールが有効になるため、その宛先への次回の送金はDiditネットワーク経由でルーティングされます。それ以外の場合、申請はレビュー待ち（`pending_review`）になります。",
        "operationId": "claimTravelRuleWorkspace",
        "x-didit-sdk": {
          "resource": "travel_rule.workspace",
          "method": "claim",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleWorkspaceClaimRequest"
              },
              "example": {
                "vasp_id": "0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/workspace/claim/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"vasp_id\": \"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.workspace.claim(\n    vasp_id=\"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.workspace.claim({\n  vasp_id: \"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.Workspace.Claim(ctx, didit.TravelRuleWorkspaceClaimRequest{\n\tVASPID: \"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleWorkspaceClaimRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().workspace().claim(TravelRuleWorkspaceClaimRequest.builder()\n        .vaspId(\"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->workspace->claim([\n    'vasp_id' => '0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.workspace.claim(vasp_id: \"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Workspace.ClaimAsync(new TravelRuleWorkspaceClaimRequest\n{\n    VaspId = \"0b0c9d3e-5a53-4a3e-9d6e-1f2f6f6a1c11\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "申請ステータスを含むワークスペース。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "このidのディレクトリエントリはありません。"
          },
          "404": {
            "description": "このアプリケーションは無料で参加していないため、無料のワークスペースがありません。"
          }
        }
      }
    },
    "/v3/travel-rule/workspace/domain/code/": {
      "post": {
        "summary": "ドメイン認証コードをメールで送信",
        "description": "ワークスペースの業務用メールアドレスにワンタイムコードをメールで送信し、そのメールドメインを管理していることを証明します。送信回数には制限があり、コード1件あたりに許容される誤入力の回数も限られています。DNSによる代替手段用のTXTレコードも返します。",
        "operationId": "sendTravelRuleWorkspaceDomainCode",
        "x-didit-sdk": {
          "resource": "travel_rule.workspace",
          "method": "send_domain_code",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/workspace/domain/code/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.workspace.send_domain_code()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.workspace.sendDomainCode();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.Workspace.SendDomainCode(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().workspace().sendDomainCode();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->workspace->sendDomainCode();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.workspace.send_domain_code\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Workspace.SendDomainCodeAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ドメイン、そのステータス、TXTレコードです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWorkspaceDomainCodeResponse"
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションは無料で参加していないため、無料のワークスペースがありません。"
          }
        }
      }
    },
    "/v3/travel-rule/workspace/domain/confirm/": {
      "post": {
        "summary": "ドメイン認証コードを確認する",
        "description": "メールで送信されたコードを使用し、メールドメインを検証済みにします。",
        "operationId": "confirmTravelRuleWorkspaceDomain",
        "x-didit-sdk": {
          "resource": "travel_rule.workspace",
          "method": "confirm_domain",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleWorkspaceDomainConfirmRequest"
              },
              "example": {
                "code": "123456"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/workspace/domain/confirm/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"code\": \"123456\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.workspace.confirm_domain(\n    code=\"123456\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.workspace.confirmDomain({\n  code: \"123456\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.Workspace.ConfirmDomain(ctx, didit.TravelRuleWorkspaceDomainConfirmRequest{\n\tCode: \"123456\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleWorkspaceDomainConfirmRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().workspace().confirmDomain(TravelRuleWorkspaceDomainConfirmRequest.builder()\n        .code(\"123456\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->workspace->confirmDomain([\n    'code' => '123456',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.workspace.confirm_domain(code: \"123456\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Workspace.ConfirmDomainAsync(new TravelRuleWorkspaceDomainConfirmRequest\n{\n    Code = \"123456\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ワークスペース。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "コードが間違っているか、期限切れか、すでに使用されています。"
          },
          "404": {
            "description": "このアプリケーションは無料で参加していないため、無料のワークスペースがありません。"
          }
        }
      }
    },
    "/v3/travel-rule/workspace/domain/dns/": {
      "post": {
        "summary": "TXTレコードでドメインを検証",
        "description": "コードエンドポイントが返す`didit-tr-verify.<domain>` TXTレコードを確認し、一致した場合にドメインを検証済みにします。メールで送信されたコードとTXTレコードの2つの証明のうち、いずれか1つで十分です。",
        "operationId": "verifyTravelRuleWorkspaceDomainDns",
        "x-didit-sdk": {
          "resource": "travel_rule.workspace",
          "method": "verify_domain_dns",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/workspace/domain/dns/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.workspace.verify_domain_dns()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.workspace.verifyDomainDns();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.Workspace.VerifyDomainDNS(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().workspace().verifyDomainDns();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->workspace->verifyDomainDns();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.workspace.verify_domain_dns\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Workspace.VerifyDomainDnsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ワークスペース。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "TXTレコードが見つからないか、一致しません。"
          },
          "404": {
            "description": "このアプリケーションは無料で参加していないため、無料のワークスペースがありません。"
          }
        }
      }
    },
    "/v3/travel-rule/workspace/billing/": {
      "post": {
        "summary": "アウトバウンド請求を有効にする",
        "description": "ワークスペースで送信側のトラベルルール請求を有効にします。受信は引き続き無料です。APIからこれを再び無効にすることはできません。Diditサポートにお問い合わせください。",
        "operationId": "enableTravelRuleWorkspaceBilling",
        "x-didit-sdk": {
          "resource": "travel_rule.workspace",
          "method": "enable_billing",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleWorkspaceBillingRequest"
              },
              "example": {
                "enabled": true
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/workspace/billing/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"enabled\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.workspace.enable_billing(\n    enabled=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.workspace.enableBilling({\n  enabled: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.Workspace.EnableBilling(ctx, didit.TravelRuleWorkspaceBillingRequest{\n\tEnabled: didit.Bool(true),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleWorkspaceBillingRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().workspace().enableBilling(TravelRuleWorkspaceBillingRequest.builder()\n        .enabled(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->workspace->enableBilling([\n    'enabled' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.workspace.enable_billing(enabled: true)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Workspace.EnableBillingAsync(new TravelRuleWorkspaceBillingRequest\n{\n    Enabled = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "`billing_enabled`がtrueのワークスペース。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "`enabled`がfalseでした。"
          },
          "404": {
            "description": "このアプリケーションは無料で参加していないため、無料のワークスペースがありません。"
          }
        }
      }
    },
    "/v3/investigator/summary/": {
      "get": {
        "operationId": "investigator_summary",
        "summary": "調査担当者のサマリー",
        "description": "ステージ、キューの件数、本日準備および判定されたレポート、30日間の一致率、料金、各キューの自律レベル。制限付きキーには`decisions`スコープ（読み取り）が必要です。取引アラートにはさらに`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "stage": {
                      "type": "string"
                    },
                    "last_report_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    },
                    "prepared_today": {
                      "type": "integer"
                    },
                    "ready_to_accept": {
                      "type": "integer"
                    },
                    "open": {
                      "type": "integer"
                    },
                    "decided_today": {
                      "type": "integer"
                    },
                    "automation_rate_month": {
                      "type": "number",
                      "nullable": true
                    },
                    "preparing": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "identity",
                "transactions"
              ],
              "default": "all"
            },
            "description": "`identity`（セッション、および取引ルール以外で作成されたケース）または`transactions`（取引アラート、および取引ルールが作成したケース）。"
          },
          {
            "in": "query",
            "name": "timezone",
            "schema": {
              "type": "string"
            },
            "description": "「今日」の起点となるIANAタイムゾーン（例: `Europe/Madrid`）。デフォルトはUTCです。"
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "retrieve_summary",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.retrieve_summary()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.retrieveSummary();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.RetrieveSummary(ctx, didit.InvestigatorRetrieveSummaryParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().retrieveSummary();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->retrieveSummary();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.retrieve_summary\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.RetrieveSummaryAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/queue/": {
      "get": {
        "operationId": "investigator_queue",
        "summary": "Investigatorキューを一覧表示",
        "description": "未処理のレポートを、**Ready to accept**を先頭に、続いて期限、リスク、待機時間の順で返します。`counts`は対象範囲内のすべての種類を対象とします。`count`の上限は100です。制限付きキーには`decisions`スコープ（読み取り）が必要で、取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "counts": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/InvestigatorQueueRow"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "identity",
                "transactions"
              ],
              "default": "all"
            },
            "description": "`identity`（セッション、および取引ルール以外で作成されたケース）または`transactions`（取引アラート、および取引ルールが作成したケース）。"
          },
          {
            "in": "query",
            "name": "kind",
            "schema": {
              "type": "string"
            },
            "description": "`session`、`business_session`、`transaction`、`case`のいずれか、またはカンマ区切りで複数を指定します。"
          },
          {
            "in": "query",
            "name": "queue",
            "schema": {
              "type": "string",
              "enum": [
                "kyc",
                "kyb",
                "aml",
                "transactions",
                "cases"
              ]
            }
          },
          {
            "in": "query",
            "name": "recommendation",
            "schema": {
              "type": "string",
              "enum": [
                "approve",
                "decline",
                "escalate",
                "request"
              ]
            }
          },
          {
            "in": "query",
            "name": "confidence",
            "schema": {
              "type": "string",
              "enum": [
                "high",
                "moderate",
                "low"
              ]
            }
          },
          {
            "in": "query",
            "name": "ready",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "search",
            "schema": {
              "type": "string"
            },
            "description": "氏名、会社名、ケースのタイトル、番号、取引ID、またはアイテムID。"
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "list_queue",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.investigator.list_queue():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.investigator.listQueue()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Investigator.ListQueueAutoPaging(ctx, didit.InvestigatorListQueueParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.investigator().listQueue()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->investigator->listQueue() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.investigator.list_queue.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Investigator.ListQueueAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/investigator/runs/{run_id}/": {
      "get": {
        "operationId": "investigator_run_retrieve",
        "summary": "Investigatorレポートを取得",
        "description": "1回の実行の完全なレポートです。実行に完了したレポートがない場合、またはその項目が削除された場合は404を返します。制限付きキーには`decisions`スコープ（読み取り）が必要です。取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigatorRunDetail"
                }
              }
            }
          },
          "404": {
            "description": "見つからないか、レポートがありません。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "retrieve_run",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.retrieve_run(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.retrieveRun(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.RetrieveRun(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().retrieveRun(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->retrieveRun('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.retrieve_run(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.RetrieveRunAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/runs/{run_id}/accept/": {
      "post": {
        "operationId": "investigator_run_accept",
        "summary": "推奨を受け入れる",
        "description": "推奨アクションを対象項目の通常の処理経路で適用するため、通常どおりWebhookが送信されます。`narrative`を指定すると、編集されたうえで受け入れられた状態になります。制限付きキーには`decisions`スコープ（書き込み）が必要で、取引アラートにはさらに`transactions`（書き込み）も必要です。認証または取引をエスカレーションするとケースが作成されます。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigatorDecision"
                }
              }
            }
          },
          "409": {
            "description": "すでに判定済みである、レポートの準備ができていない、またはガードレールによって項目が保留されています。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvestigatorAcceptRequest"
              },
              "example": {
                "send_email": false
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "accept_run",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.accept_run(\n    \"11111111-2222-3333-4444-555555555555\",\n    send_email=False,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.acceptRun(\"11111111-2222-3333-4444-555555555555\", {\n  send_email: false,\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.AcceptRun(ctx, \"11111111-2222-3333-4444-555555555555\", didit.InvestigatorAcceptRequest{\n\tSendEmail: didit.Bool(false),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.InvestigatorAcceptRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().acceptRun(\"11111111-2222-3333-4444-555555555555\", InvestigatorAcceptRequest.builder()\n        .sendEmail(false)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->acceptRun('11111111-2222-3333-4444-555555555555', [\n    'send_email' => false,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.accept_run(\n  \"11111111-2222-3333-4444-555555555555\",\n  send_email: false\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.AcceptRunAsync(\"11111111-2222-3333-4444-555555555555\", new InvestigatorAcceptRequest\n{\n    SendEmail = false,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/runs/{run_id}/override/": {
      "post": {
        "operationId": "investigator_run_override",
        "summary": "推奨を上書きする",
        "description": "カテゴリと理由を指定して別のアクションを実行します。Investigatorが自ら下した判定が有効な間は、その判定を上書きすることもできます。制限付きキーには`decisions`スコープ(書き込み)が必要で、取引アラートにはさらに`transactions`(書き込み)も必要です。認証または取引をエスカレーションするとケースが作成されます。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigatorDecision"
                }
              }
            }
          },
          "409": {
            "description": "すでに判定済みであるか、ガードレールによって項目が保留されています。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvestigatorOverrideRequest"
              },
              "example": {
                "action": "decline",
                "category": "evidence_misread",
                "reason": "The proof of address is older than three months."
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "override_run",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.override_run(\n    \"11111111-2222-3333-4444-555555555555\",\n    action=\"decline\",\n    category=\"evidence_misread\",\n    reason=\"The proof of address is older than three months.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.overrideRun(\"11111111-2222-3333-4444-555555555555\", {\n  action: \"decline\",\n  category: \"evidence_misread\",\n  reason: \"The proof of address is older than three months.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.OverrideRun(ctx, \"11111111-2222-3333-4444-555555555555\", didit.InvestigatorOverrideRequest{\n\tAction:   \"decline\",\n\tCategory: \"evidence_misread\",\n\tReason:   \"The proof of address is older than three months.\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.InvestigatorOverrideRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().overrideRun(\"11111111-2222-3333-4444-555555555555\", InvestigatorOverrideRequest.builder()\n        .action(InvestigatorOverrideRequest.Action.of(\"decline\"))\n        .category(InvestigatorOverrideRequest.Category.of(\"evidence_misread\"))\n        .reason(\"The proof of address is older than three months.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->overrideRun('11111111-2222-3333-4444-555555555555', [\n    'action' => 'decline',\n    'category' => 'evidence_misread',\n    'reason' => 'The proof of address is older than three months.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.override_run(\n  \"11111111-2222-3333-4444-555555555555\",\n  action: \"decline\",\n  category: \"evidence_misread\",\n  reason: \"The proof of address is older than three months.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.OverrideRunAsync(\"11111111-2222-3333-4444-555555555555\", new InvestigatorOverrideRequest\n{\n    Action = \"decline\",\n    Category = \"evidence_misread\",\n    Reason = \"The proof of address is older than three months.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/runs/batch-accept/": {
      "post": {
        "operationId": "investigator_batch_accept",
        "summary": "推奨事項の一括承認",
        "description": "受け入れ準備完了とマークされたレポートを最大50件まで受け入れます。各レポートはそれぞれ個別の判定となり、受け入れられないものは理由とともにスキップされます。制限付きキーには`decisions`スコープ（書き込み）が必要で、取引アラートにはさらに`transactions`（書き込み）も必要です。認証または取引をエスカレーションすると、ケースが作成されます。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigatorBatchAcceptResponse"
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvestigatorBatchAcceptRequest"
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "batch_accept_runs",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.batch_accept_runs(\n    run_ids=[\"11111111-2222-3333-4444-555555555555\"],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.batchAcceptRuns({\n  run_ids: [\"11111111-2222-3333-4444-555555555555\"],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.BatchAcceptRuns(ctx, didit.InvestigatorBatchAcceptRequest{\n\tRunIDs: []string{\"11111111-2222-3333-4444-555555555555\"},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.InvestigatorBatchAcceptRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().batchAcceptRuns(InvestigatorBatchAcceptRequest.builder()\n        .runIds(List.of(\"11111111-2222-3333-4444-555555555555\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->batchAcceptRuns([\n    'run_ids' => ['11111111-2222-3333-4444-555555555555'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.batch_accept_runs(run_ids: [\"11111111-2222-3333-4444-555555555555\"])\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.BatchAcceptRunsAsync(new InvestigatorBatchAcceptRequest\n{\n    RunIds = new string[] { \"11111111-2222-3333-4444-555555555555\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/transactions/{transaction_id}/": {
      "get": {
        "operationId": "investigator_transaction_retrieve",
        "summary": "取引のInvestigatorレビューを取得",
        "description": "取引の最新のレビュー。レビューが一度もない場合は`investigator: null`です。制限付きキーには`decisions`および`transactions`スコープ（読み取り）が必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transaction_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "investigator": {
                      "$ref": "#/components/schemas/InvestigatorBlock"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "このアプリケーションの取引ではありません。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "transaction_id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "retrieve_transaction",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.retrieve_transaction(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.retrieveTransaction(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.RetrieveTransaction(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().retrieveTransaction(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->retrieveTransaction('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.retrieve_transaction(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.RetrieveTransactionAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/guardrails/": {
      "get": {
        "operationId": "investigator_guardrails",
        "summary": "ロックされたガードレールを一覧表示",
        "description": "すべてのキューに適用される5つのガードレールです。無効にすることはできません。制限付きキーには`decisions`スコープ（読み取り）が必要です。取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "key": {
                            "type": "string",
                            "enum": [
                              "sanctions_to_person",
                              "no_tipping_off",
                              "no_protected_characteristics",
                              "never_files_reports",
                              "every_decision_logged"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "locked": {
                            "type": "boolean"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "list_guardrails",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.list_guardrails()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.listGuardrails();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.ListGuardrails(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().listGuardrails();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->listGuardrails();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.list_guardrails\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.ListGuardrailsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/dashboard/": {
      "get": {
        "operationId": "investigator_dashboard",
        "summary": "調査担当者ダッシュボード",
        "description": "直近30日間の数値です。レビュー、判定、自動化率、削減時間、支出、オーバーライド、本番稼働以降の品質サンプル、キューごとおよび週ごとの数値を含みます。制限付きキーには`decisions`スコープ(読み取り)が必要です。取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "stage": {
                      "type": "string"
                    },
                    "window_days": {
                      "type": "integer"
                    },
                    "reviews": {
                      "type": "integer"
                    },
                    "decided": {
                      "type": "integer"
                    },
                    "automated": {
                      "type": "integer"
                    },
                    "automation_rate": {
                      "type": "number",
                      "nullable": true
                    },
                    "hours_saved": {
                      "type": "number",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "identity",
                "transactions"
              ],
              "default": "all"
            },
            "description": "`identity`（セッション、および取引ルール以外で作成されたケース）または`transactions`（取引アラート、および取引ルールが作成したケース）。"
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "retrieve_dashboard",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.retrieve_dashboard()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.retrieveDashboard();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.RetrieveDashboard(ctx, didit.InvestigatorRetrieveDashboardParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().retrieveDashboard();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->retrieveDashboard();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.retrieve_dashboard\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.RetrieveDashboardAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/performance/": {
      "get": {
        "operationId": "investigator_performance",
        "summary": "調査担当者のパフォーマンス",
        "description": "指定期間における、チームとの一致率、処理件数、削減時間、信頼度のキャリブレーション、キューごとの結果、オーバーライドの理由、および不一致です。制限付きキーには`decisions`スコープ（読み取り）が必要です。取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "period": {
                      "type": "integer"
                    },
                    "start": {
                      "type": "string",
                      "format": "date"
                    },
                    "end": {
                      "type": "string",
                      "format": "date"
                    },
                    "investigated": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "identity",
                "transactions"
              ],
              "default": "all"
            },
            "description": "`identity`（セッション、および取引ルール以外で作成されたケース）または`transactions`（取引アラート、および取引ルールが作成したケース）。"
          },
          {
            "in": "query",
            "name": "period",
            "schema": {
              "type": "string",
              "enum": [
                "7",
                "30",
                "90"
              ],
              "default": "30"
            },
            "description": "今日を最終日とする日数。"
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "retrieve_performance",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.retrieve_performance()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.retrievePerformance();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.RetrievePerformance(ctx, didit.InvestigatorRetrievePerformanceParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().retrievePerformance();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->retrievePerformance();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.retrieve_performance\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.RetrievePerformanceAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/investigator/activity/": {
      "get": {
        "operationId": "investigator_activity",
        "summary": "Investigatorのアクティビティの一覧取得",
        "description": "追記専用の監査証跡で、新しい順に並びます。一括承認は1件のエントリーになります。グループごとの`counts`と`actors`が追加されます。制限付きキーには`decisions`スコープ（読み取り）が必要です。取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "counts": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "actors": {
                      "type": "array",
                      "items": {}
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "`id`、`at`、`kind`、`group`、`queue`、`run_id`、`item`、`actor`、`agent_version`、`data`、`report_version`、`steps`、`sources`、`batch`。"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "identity",
                "transactions"
              ],
              "default": "all"
            },
            "description": "`identity`（セッション、および取引ルール以外で作成されたケース）または`transactions`（取引アラート、および取引ルールが作成したケース）。"
          },
          {
            "in": "query",
            "name": "group",
            "schema": {
              "type": "string",
              "enum": [
                "agent",
                "decisions",
                "overrides",
                "autonomy"
              ]
            }
          },
          {
            "in": "query",
            "name": "actor",
            "schema": {
              "type": "string"
            },
            "description": "Investigatorの場合は`agent`、それ以外は人のメールアドレスです。"
          },
          {
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "in": "query",
            "name": "until",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "list_activity",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.investigator.list_activity():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.investigator.listActivity()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Investigator.ListActivityAutoPaging(ctx, didit.InvestigatorListActivityParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.investigator().listActivity()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->investigator->listActivity() as $item) {\n    print_r($item);\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.investigator.list_activity.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.Investigator.ListActivityAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/investigator/activity/export/": {
      "get": {
        "operationId": "investigator_activity_export",
        "summary": "Investigatorのアクティビティをエクスポート",
        "description": "同じエントリをCSV形式で返します。1判定につき1行、新しい順で、最大10,000件です。制限付きキーには`decisions`スコープ（読み取り）が必要です。取引アラートには`transactions`も必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "identity",
                "transactions"
              ],
              "default": "all"
            },
            "description": "`identity`（セッション、および取引ルール以外で作成されたケース）または`transactions`（取引アラート、および取引ルールが作成したケース）。"
          },
          {
            "in": "query",
            "name": "group",
            "schema": {
              "type": "string",
              "enum": [
                "agent",
                "decisions",
                "overrides",
                "autonomy"
              ]
            }
          },
          {
            "in": "query",
            "name": "actor",
            "schema": {
              "type": "string"
            },
            "description": "Investigatorの場合は`agent`、それ以外は人のメールアドレスです。"
          },
          {
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "in": "query",
            "name": "until",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "export_activity",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\ncontent = client.investigator.export_activity()\nwith open(\"download.csv\", \"wb\") as file:\n    file.write(content)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import { writeFile } from \"node:fs/promises\";\nimport Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst content = await didit.investigator.exportActivity();\nawait writeFile(\"download.csv\", Buffer.from(await content.arrayBuffer()));"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Investigator.ExportActivity(ctx, didit.InvestigatorExportActivityParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.csv\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.investigator().exportActivity()\n        .writeTo(Path.of(\"download.csv\"));"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$content = $didit->investigator->exportActivity();\n$content->saveTo('download.csv');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ncontent = didit.investigator.export_activity\nFile.binwrite(\"download.csv\", content)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar content = await client.Investigator.ExportActivityAsync();\nawait content.SaveToAsync(\"download.csv\");"
          }
        ]
      }
    },
    "/v3/investigator/settings/": {
      "get": {
        "operationId": "investigator_settings_retrieve",
        "summary": "Investigatorの設定を取得",
        "description": "ステージ（`none`、`shadow`、`live`）と、月間の支出上限および今月の支出額。制限付きキーには`applications`スコープ（読み取り）が必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigatorSettings"
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "retrieve_settings",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.retrieve_settings()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.retrieveSettings();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.RetrieveSettings(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().retrieveSettings();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->retrieveSettings();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.retrieve_settings\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.RetrieveSettingsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "patch": {
        "operationId": "investigator_settings_update",
        "summary": "Investigatorの設定を更新",
        "description": "ステージ、月間利用上限、またはその両方を変更します。`none`より先に進めるには、Investigatorを含むプラン（Growth以上）が必要です。`live`には、契約がある場合、その料金を定めた契約も必要です。制限付きキーには`applications`スコープ（書き込み）が必要です。",
        "tags": [
          "Investigator"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigatorSettings"
                }
              }
            }
          },
          "400": {
            "description": "どちらのフィールドも送信されていないか、値が無効です。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "キーにスコープがない、項目の種類が読み取り可能でない、またはプランにInvestigatorが含まれていません。"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvestigatorSettings"
              },
              "example": {
                "stage": "shadow",
                "monthly_spend_limit": "500.00"
              }
            }
          }
        },
        "x-didit-sdk": {
          "resource": "investigator",
          "method": "update_settings",
          "auth": "api_key",
          "server": true
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.investigator.update_settings(\n    stage=\"shadow\",\n    monthly_spend_limit=\"500.00\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.investigator.updateSettings({\n  stage: \"shadow\",\n  monthly_spend_limit: \"500.00\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Investigator.UpdateSettings(ctx, didit.InvestigatorSettingsParam{\n\tStage:             didit.Some(didit.InvestigatorSettingsStage(\"shadow\")),\n\tMonthlySpendLimit: didit.String(\"500.00\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.InvestigatorSettings;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.investigator().updateSettings(InvestigatorSettings.builder()\n        .stage(InvestigatorSettings.Stage.of(\"shadow\"))\n        .monthlySpendLimit(\"500.00\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->investigator->updateSettings([\n    'stage' => 'shadow',\n    'monthly_spend_limit' => '500.00',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.investigator.update_settings(\n  stage: \"shadow\",\n  monthly_spend_limit: \"500.00\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Investigator.UpdateSettingsAsync(new InvestigatorSettings\n{\n    Stage = new InvestigatorSettingsStage(\"shadow\"),\n    MonthlySpendLimit = \"500.00\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/travel-rule/wallet-addresses/import/": {
      "post": {
        "summary": "ウォレットアドレスを一括インポート",
        "description": "1回の呼び出しで最大10,000件のウォレットを、JSONまたはCSVファイルとしてトラベルルールのアドレス帳に追加できます。ウォレットは、アドレスそのもの、アドレスを非公開にするための小文字化したアドレスのSHA-256（`address_hash`）、またはその両方で送信できます。インポートは冪等です。すでにアドレス帳にあるウォレットは`existing`として報告され、変更されないため、同じファイルを再送信できます。各行は個別に検証されるため、1行が不正でも他の行が失敗することはありません。ハッシュのみでインポートされたウォレットは、そのアドレスへの送金にのみ一致し、他のエントリと同様にウォレット所有権ウィジェットで証明できます。",
        "operationId": "importTravelRuleWalletAddresses",
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_addresses",
          "method": "bulk_import",
          "auth": "api_key",
          "server": true
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "entries"
                    ],
                    "properties": {
                      "entries": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 10000,
                        "items": {
                          "$ref": "#/components/schemas/WalletAddressImportRow"
                        }
                      }
                    }
                  },
                  {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 10000,
                    "items": {
                      "$ref": "#/components/schemas/WalletAddressImportRow"
                    }
                  }
                ]
              },
              "example": {
                "entries": [
                  {
                    "address": "0xBeneficiaryWallet01",
                    "chain": "ETH",
                    "holder_name": "Ana Diaz",
                    "holder_vendor_data": "user-042"
                  },
                  {
                    "address_hash": "4f7d2e1c9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e",
                    "chain": "bitcoin",
                    "holder_vendor_data": "user-043"
                  },
                  {
                    "address": "rExchangeSharedAddress01",
                    "chain": "XRP",
                    "memo": "104729",
                    "holder_name": "Ana Diaz"
                  }
                ]
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "列名（行のフィールドまたはそのエイリアス）を示すヘッダー行を含む、最大5MBのUTF-8 CSVファイル。空のセルは送信されなかったものとして扱われます。インポートで読み取られない列は無視されます。"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl (JSON)",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/wallet-addresses/import/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"entries\": [{\"address\": \"0xBeneficiaryWallet01\", \"chain\": \"ETH\", \"holder_name\": \"Ana Diaz\"}, {\"address\": \"rExchangeSharedAddress01\", \"chain\": \"XRP\", \"memo\": \"104729\"}]}'"
          },
          {
            "lang": "curl",
            "label": "curl (CSV)",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/wallet-addresses/import/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -F 'file=@wallets.csv;type=text/csv'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.wallet_addresses.bulk_import(\n    body={\n        \"entries\": [{\n            \"address\": \"0xBeneficiaryWallet01\",\n            \"chain\": \"ETH\",\n            \"holder_name\": \"Ana Diaz\",\n            \"holder_vendor_data\": \"user-042\",\n        }, {\n            \"address_hash\": \"4f7d2e1c9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e\",\n            \"chain\": \"bitcoin\",\n            \"holder_vendor_data\": \"user-043\",\n        }, {\n            \"address\": \"rExchangeSharedAddress01\",\n            \"chain\": \"XRP\",\n            \"memo\": \"104729\",\n            \"holder_name\": \"Ana Diaz\",\n        }],\n    },\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.walletAddresses.bulkImport({\n  file: await fileFromPath(\"wallet-addresses.csv\"),\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.WalletAddresses.BulkImport(ctx, didit.TravelRuleWalletAddressesBulkImportParams{\n\tFile: didit.Some(didit.FileFromPath(\"wallet-addresses.csv\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport me.didit.Didit;\nimport me.didit.types.TravelRuleWalletAddressesBulkImportParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().walletAddresses().bulkImport(TravelRuleWalletAddressesBulkImportParams.builder()\n        .file(Path.of(\"wallet-addresses.csv\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->walletAddresses->bulkImport([\n    'file' => File::fromPath('wallet-addresses.csv'),\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.wallet_addresses.bulk_import(\n  body: {\n    entries: [{\n      address: \"0xBeneficiaryWallet01\",\n      chain: \"ETH\",\n      holder_name: \"Ana Diaz\",\n      holder_vendor_data: \"user-042\",\n    }, {\n      address_hash: \"4f7d2e1c9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e\",\n      chain: \"bitcoin\",\n      holder_vendor_data: \"user-043\",\n    }, {\n      address: \"rExchangeSharedAddress01\",\n      chain: \"XRP\",\n      memo: \"104729\",\n      holder_name: \"Ana Diaz\",\n    }],\n  }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.WalletAddresses.BulkImportAsync(new TravelRuleWalletAddressesBulkImportParams\n{\n    File = FileUpload.FromPath(\"wallet-addresses.csv\"),\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "すべての行が、作成済み、すでに台帳に存在、または以前の行の重複のいずれかでした。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletAddressImportReport"
                },
                "example": {
                  "total": 3,
                  "created": 2,
                  "existing": 1,
                  "duplicate": 0,
                  "failed": 0,
                  "rows": [
                    {
                      "row": 1,
                      "status": "existing",
                      "entry_id": "11111111-2222-3333-4444-555555555555",
                      "errors": {},
                      "duplicate_of_row": null
                    },
                    {
                      "row": 2,
                      "status": "created",
                      "entry_id": "22222222-3333-4444-5555-666666666666",
                      "errors": {},
                      "duplicate_of_row": null
                    },
                    {
                      "row": 3,
                      "status": "created",
                      "entry_id": "33333333-4444-5555-6666-777777777777",
                      "errors": {},
                      "duplicate_of_row": null
                    }
                  ]
                }
              }
            }
          },
          "207": {
            "description": "少なくとも1行が失敗しました。その他の行はインポートされています。失敗した各行には、そのエラーが示されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletAddressImportReport"
                },
                "example": {
                  "total": 2,
                  "created": 1,
                  "existing": 0,
                  "duplicate": 0,
                  "failed": 1,
                  "rows": [
                    {
                      "row": 1,
                      "status": "created",
                      "entry_id": "44444444-5555-6666-7777-888888888888",
                      "errors": {},
                      "duplicate_of_row": null
                    },
                    {
                      "row": 2,
                      "status": "failed",
                      "entry_id": null,
                      "errors": {
                        "address": [
                          "Send address, address_hash or both."
                        ]
                      },
                      "duplicate_of_row": null
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "リクエスト自体を読み取れません。`entries`と`file`の両方が指定されている、またはどちらも指定されていない、10,000行を超えている、ファイルが5MBを超えている、UTF-8のCSVではない、ヘッダー行がない、または行がない場合です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "file": [
                    "At most 10000 rows per import."
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/counterparty-contacts/": {
      "get": {
        "summary": "取引相手の連絡先一覧を取得",
        "description": "EMAILレールがあなたのアプリケーションのために送信できるコンプライアンス用アドレス。Diditのプラットフォーム連絡先と、あなたのアプリケーション独自の非公開アドレス(バウンスしたものを含む)を、新しい順に返します。`limit`(デフォルトは50)と`offset`でページ分割されます。`count`の上限は100のため、100は100件以上を意味します。",
        "operationId": "listTravelRuleCounterpartyContacts",
        "x-didit-sdk": {
          "resource": "travel_rule.counterparty_contacts",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "counterparty",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "このディレクトリエントリの連絡先のみ。UUIDである必要があります。空の値はフィルターなしを意味します。"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "ページサイズ。デフォルトは50です。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "description": "スキップする行数。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/travel-rule/counterparty-contacts/?counterparty={vasp_id}' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.travel_rule.counterparty_contacts.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.travelRule.counterpartyContacts.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.TravelRule.CounterpartyContacts.ListAutoPaging(ctx, didit.TravelRuleCounterpartyContactsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.travelRule().counterpartyContacts().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->travelRule->counterpartyContacts->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.counterparty_contacts.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.TravelRule.CounterpartyContacts.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "連絡先。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TravelRuleCounterpartyContact"
                      }
                    }
                  }
                },
                "example": {
                  "count": 1,
                  "next": null,
                  "previous": null,
                  "results": [
                    {
                      "uuid": "6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b",
                      "counterparty": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
                      "counterparty_name": "Example Counterparty VASP",
                      "email": "compliance@counterparty.example",
                      "name": "Compliance desk",
                      "source": "application",
                      "scope": "application",
                      "created_by": "",
                      "verified_at": null,
                      "is_invalid": false,
                      "invalid_reason": "",
                      "invalid_detail": "",
                      "invalid_at": null,
                      "created_at": "2026-10-19T09:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`counterparty`がUUIDではありません。",
            "content": {
              "application/json": {
                "example": {
                  "counterparty": [
                    "Must be a valid UUID."
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "取引相手の連絡先を追加",
        "description": "1件のディレクトリエントリに、非公開のコンプライアンス用アドレスを追加します。このアドレスはお客様のアプリケーションのみが参照・使用し、EMAILレールはプラットフォームの連絡先より先にこのアドレスへ送信します。エントリの自社連絡先にすでに登録されているアドレスを追加すると、その連絡先が返されます。",
        "operationId": "createTravelRuleCounterpartyContact",
        "x-didit-sdk": {
          "resource": "travel_rule.counterparty_contacts",
          "method": "create",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleCounterpartyContactCreate"
              },
              "example": {
                "counterparty": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
                "email": "compliance@counterparty.example",
                "name": "Compliance desk"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/counterparty-contacts/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"counterparty\": \"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\", \"email\": \"compliance@counterparty.example\", \"name\": \"Compliance desk\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.counterparty_contacts.create(\n    counterparty=\"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\",\n    email=\"compliance@counterparty.example\",\n    name=\"Compliance desk\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.counterpartyContacts.create({\n  counterparty: \"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\",\n  email: \"compliance@counterparty.example\",\n  name: \"Compliance desk\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.CounterpartyContacts.Create(ctx, didit.TravelRuleCounterpartyContactCreate{\n\tCounterparty: \"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\",\n\tEmail:        \"compliance@counterparty.example\",\n\tName:         didit.String(\"Compliance desk\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleCounterpartyContactCreate;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().counterpartyContacts().create(TravelRuleCounterpartyContactCreate.builder()\n        .counterparty(\"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\")\n        .email(\"compliance@counterparty.example\")\n        .name(\"Compliance desk\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->counterpartyContacts->create([\n    'counterparty' => '0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91',\n    'email' => 'compliance@counterparty.example',\n    'name' => 'Compliance desk',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.counterparty_contacts.create(\n  counterparty: \"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\",\n  email: \"compliance@counterparty.example\",\n  name: \"Compliance desk\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.CounterpartyContacts.CreateAsync(new TravelRuleCounterpartyContactCreate\n{\n    Counterparty = \"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\",\n    Email = \"compliance@counterparty.example\",\n    Name = \"Compliance desk\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "201": {
            "description": "連絡先が追加されました。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleCounterpartyContact"
                },
                "example": {
                  "uuid": "6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b",
                  "counterparty": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
                  "counterparty_name": "Example Counterparty VASP",
                  "email": "compliance@counterparty.example",
                  "name": "Compliance desk",
                  "source": "application",
                  "scope": "application",
                  "created_by": "",
                  "verified_at": null,
                  "is_invalid": false,
                  "invalid_reason": "",
                  "invalid_detail": "",
                  "invalid_at": null,
                  "created_at": "2026-10-19T09:00:00Z"
                }
              }
            }
          },
          "400": {
            "description": "フィールドが欠落しているか無効であるか、このIDのディレクトリエントリが存在しません。",
            "content": {
              "application/json": {
                "example": {
                  "counterparty": [
                    "No directory entry with this id."
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/counterparty-contacts/{contact_uuid}/": {
      "delete": {
        "summary": "取引相手の連絡先を削除",
        "description": "アプリケーション独自の連絡先を1件削除します。EMAILレールは直ちにその連絡先への書き込みを停止します。プラットフォームの連絡先は削除できません。",
        "operationId": "deleteTravelRuleCounterpartyContact",
        "x-didit-sdk": {
          "resource": "travel_rule.counterparty_contacts",
          "method": "delete",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "contact_uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X DELETE https://verification.didit.me/v3/travel-rule/counterparty-contacts/{contact_uuid}/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.travel_rule.counterparty_contacts.delete(\n    \"11111111-2222-3333-4444-555555555555\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.travelRule.counterpartyContacts.delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.TravelRule.CounterpartyContacts.Delete(ctx, \"11111111-2222-3333-4444-555555555555\"); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.travelRule().counterpartyContacts().delete(\"11111111-2222-3333-4444-555555555555\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->travelRule->counterpartyContacts->delete('11111111-2222-3333-4444-555555555555');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.counterparty_contacts.delete(\"11111111-2222-3333-4444-555555555555\")"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.TravelRule.CounterpartyContacts.DeleteAsync(\"11111111-2222-3333-4444-555555555555\");"
          }
        ],
        "responses": {
          "204": {
            "description": "削除しました。"
          },
          "404": {
            "description": "アプリケーションの連絡先にこのidを持つものはありません。プラットフォームの連絡先に対しても404が返されます。"
          }
        }
      }
    },
    "/v3/travel-rule/transfers/": {
      "get": {
        "summary": "トラベルルール送金の一覧を取得",
        "description": "お客様のアプリケーションのトラベルルール送金です。新しい順に並び、`limit`（デフォルト50）と`offset`でページ分割されます。各行にはVASP名、ウォレット、メモのみが含まれ、個人データは一切含まれません。カンマ区切りの値で複数を選択できます。不明な値を指定すると、そのパラメーターを示す400が返されます（例: `{\"direction\": [\"Unknown value(s): inbound.\"]}`）。",
        "operationId": "listTravelRuleTransfers",
        "x-didit-sdk": {
          "resource": "travel_rule.transfers",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "INBOUND、OUTBOUND、またはその両方をカンマ区切りで指定します。大文字と小文字を区別します。"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "1つ以上の送金ステータスをカンマ区切りで指定します。"
          },
          {
            "name": "rail",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "INTERNAL、TRP、GTR、TRUST、VERIFYVASP、SYGNA、EMAIL、TEST_VASPのうち1つ以上をカンマ区切りで指定します。"
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "withdrawal、deposit、messageをカンマ区切りで指定します。"
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "取引の通貨。大文字と小文字は区別されません。"
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "この日（UTC）以降に作成された送金。形式はYYYY-MM-DDです。"
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "この日（UTC）以前に作成された送金。形式はYYYY-MM-DDです。"
          },
          {
            "name": "counterparty",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/から取得したディレクトリエントリまたはDiditネットワークのメンバーの`id`です。その取引相手との送金が対象になります。有効なidではない値には400が返されます。"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "ページサイズ。デフォルトは50です。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "description": "スキップする行数。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/travel-rule/transfers/?direction=OUTBOUND&status=AWAITING_COUNTERPARTY' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.travel_rule.transfers.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.travelRule.transfers.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.TravelRule.Transfers.ListAutoPaging(ctx, didit.TravelRuleTransfersListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.travelRule().transfers().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->travelRule->transfers->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.transfers.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.TravelRule.Transfers.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "送金のページ。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TravelRuleTransferRow"
                      }
                    }
                  }
                },
                "example": {
                  "count": 1,
                  "next": null,
                  "previous": null,
                  "results": [
                    {
                      "id": "5b0f6c2e-2a4d-4f0e-9a41-0c3f9a7e1d22",
                      "transaction_id": "a3c1e8f4-7b62-4d1a-8e0b-2f9d6c4b7a10",
                      "txn_id": "wd-2026-10-19-0042",
                      "txn_date": "2026-10-19T08:41:12Z",
                      "kind": "withdrawal",
                      "direction": "OUTBOUND",
                      "status": "AWAITING_COUNTERPARTY",
                      "rail": "TRP",
                      "asset": "ETH",
                      "amount": "1.25",
                      "originator_vasp": "Origin CASP SL",
                      "beneficiary_vasp": "Example Counterparty VASP",
                      "originator_wallet": "0x77ccff0cc624a53cd8b8d8703ced826710211ec7",
                      "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
                      "originator_memo": "",
                      "beneficiary_memo": "",
                      "originator_wallet_type": "vasp",
                      "beneficiary_wallet_type": "vasp",
                      "matched_transaction_id": null,
                      "deadline_at": "2026-10-21T08:41:13Z",
                      "created_at": "2026-10-19T08:41:13Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "フィルター値が無効です。",
            "content": {
              "application/json": {
                "example": {
                  "start_date": [
                    "Use the YYYY-MM-DD format."
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/v3/session/imports/providers/": {
      "get": {
        "summary": "移行プロバイダーを一覧表示",
        "description": "認証を移行できる15のプロバイダー: 各プロバイダーの接続に必要なもの、APIでレコードを一覧取得できるかどうか、キーに必要な権限、デフォルトのステータスマッピング。",
        "operationId": "get_v3_session_imports_providers_list",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "list_providers",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "responses": {
          "200": {
            "description": "移行元プロバイダー。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "providers": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ImportProvider"
                      }
                    },
                    "mapping_targets": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "skipped_statuses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.list_providers()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.listProviders();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.ListProviders(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().listProviders();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->listProviders();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.list_providers\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.ListProvidersAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/providers/check/": {
      "post": {
        "summary": "プロバイダーキーを確認",
        "description": "移行を作成する前に、お使いのキーでプロバイダーを読み取ります。何も保存されません。",
        "operationId": "post_v3_session_imports_providers_check",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "check_provider",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "sumsub",
                      "jumio",
                      "veriff",
                      "onfido",
                      "persona",
                      "metamap",
                      "socure",
                      "idnow",
                      "shufti",
                      "idenfy",
                      "ondato",
                      "trulioo",
                      "au10tix",
                      "complycube",
                      "other"
                    ],
                    "description": "移行元。`GET /v3/session/imports/providers/`から取得します。`source`が`provider`の場合は必須です。"
                  },
                  "credentials": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "`credential_fields`に記載されたフィールド名を持つ、プロバイダーの読み取り専用キーです。保存時は暗号化され、返されることはなく、インポート終了時に消去されます。multipartではJSON文字列として送信してください。"
                  },
                  "options": {
                    "type": "object",
                    "properties": {
                      "region": {
                        "type": "string",
                        "description": "プロバイダーのリージョンで、`regions`のいずれかです（Onfido：`eu`、`us`、`ca`）。"
                      }
                    }
                  },
                  "record_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "`api_ids`プロバイダーの場合：エクスポートの最初のレコードID。"
                  }
                },
                "required": [
                  "provider",
                  "credentials"
                ]
              },
              "example": {
                "provider": "sumsub",
                "credentials": {
                  "app_token": "YOUR_PROVIDER_APP_TOKEN",
                  "secret_key": "YOUR_PROVIDER_SECRET_KEY"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "このキーはレコードを読み取れます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "provider": {
                      "type": "string"
                    },
                    "credential_hint": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "プロバイダーがキーを拒否しました。`code`、`detail`、`missing_permissions`、`suggested_region`が返されます。"
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.check_provider(\n    provider=\"sumsub\",\n    credentials={\"app_token\": \"YOUR_PROVIDER_APP_TOKEN\", \"secret_key\": \"YOUR_PROVIDER_SECRET_KEY\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.checkProvider({\n  provider: \"sumsub\",\n  credentials: { app_token: \"YOUR_PROVIDER_APP_TOKEN\", secret_key: \"YOUR_PROVIDER_SECRET_KEY\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.CheckProvider(ctx, didit.SessionsImportsCheckProviderParams{\n\tProvider:    \"sumsub\",\n\tCredentials: map[string]string{\"app_token\": \"YOUR_PROVIDER_APP_TOKEN\", \"secret_key\": \"YOUR_PROVIDER_SECRET_KEY\"},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SessionsImportsCheckProviderParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().checkProvider(SessionsImportsCheckProviderParams.builder()\n        .provider(SessionsImportsCheckProviderParams.Provider.of(\"sumsub\"))\n        .credentials(Map.of(\"app_token\", \"YOUR_PROVIDER_APP_TOKEN\", \"secret_key\", \"YOUR_PROVIDER_SECRET_KEY\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->checkProvider([\n    'provider' => 'sumsub',\n    'credentials' => ['app_token' => 'YOUR_PROVIDER_APP_TOKEN', 'secret_key' => 'YOUR_PROVIDER_SECRET_KEY'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.check_provider(\n  provider: \"sumsub\",\n  credentials: { app_token: \"YOUR_PROVIDER_APP_TOKEN\", secret_key: \"YOUR_PROVIDER_SECRET_KEY\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.CheckProviderAsync(new SessionsImportsCheckProviderParams\n{\n    Provider = \"sumsub\",\n    Credentials = new Dictionary<string, string> { [\"app_token\"] = \"YOUR_PROVIDER_APP_TOKEN\", [\"secret_key\"] = \"YOUR_PROVIDER_SECRET_KEY\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/start/": {
      "post": {
        "summary": "ドライランを開始",
        "description": "ドライランが完了した（`READY`）移行を開始します。同じジョブが実際にインポートを行い、ステータスのマッピングと顔テンプレートの選択には今回送信した内容が適用されます。",
        "operationId": "post_v3_session_imports_start",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "start",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status_mapping": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "enum": [
                        "Approved",
                        "Declined",
                        "In Review",
                        "Expired",
                        "Not Finished",
                        "Abandoned"
                      ]
                    },
                    "description": "プロバイダーのデフォルトのステータスマッピング（ソースのステータスからDiditのステータスへの対応）に対する変更。`Not Finished`と`Abandoned`はスキップされてカウントされ、インポートされることはありません。"
                  },
                  "face_templates": {
                    "type": "boolean",
                    "default": false,
                    "description": "インポートしたセルフィーから顔テンプレートを作成し、アプリケーションの顔とブロックリストに対して検索します。一致した場合はレビュー対象としてフラグが付けられるだけです。`lawful_basis_confirmed`が必要です。"
                  },
                  "lawful_basis_confirmed": {
                    "type": "boolean",
                    "default": false,
                    "description": "処理者であるDiditとこれらのセルフィーを共有する法的根拠があることを確認します。"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "インポートジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                }
              }
            }
          },
          "400": {
            "description": "ジョブが、このアクションを適用できる状態ではありません。"
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.start(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.start(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Start(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsImportsStartParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().start(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->start('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.start(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.StartAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/pause/": {
      "post": {
        "summary": "インポートジョブを一時停止",
        "description": "キュー内または実行中のインポートを一時停止します。",
        "operationId": "post_v3_session_imports_pause",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "pause",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "インポートジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                }
              }
            }
          },
          "400": {
            "description": "ジョブが、このアクションを適用できる状態ではありません。"
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.pause(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.pause(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Pause(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().pause(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->pause('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.pause(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.PauseAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/resume/": {
      "post": {
        "summary": "インポートジョブを再開する",
        "description": "一時停止したインポートを再開します。プロバイダーのレート制限によって一時停止したジョブは自動的に再開されます。",
        "operationId": "post_v3_session_imports_resume",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "resume",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "インポートジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                }
              }
            }
          },
          "400": {
            "description": "ジョブが、このアクションを適用できる状態ではありません。"
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.resume(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.resume(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Resume(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().resume(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->resume('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.resume(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.ResumeAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/cancel/": {
      "post": {
        "summary": "インポートジョブをキャンセル",
        "description": "インポートをキャンセルします。インポート済みのデータは残り、アップロードされたファイルとキーは消去されます。",
        "operationId": "post_v3_session_imports_cancel",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "cancel",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "インポートジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                }
              }
            }
          },
          "400": {
            "description": "ジョブが、このアクションを適用できる状態ではありません。"
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.cancel(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.cancel(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Cancel(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().cancel(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->cancel('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.cancel(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.CancelAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/imports/{importId}/retry/": {
      "post": {
        "summary": "移行を再試行",
        "description": "終了した移行を、新しいキーを使った新しいジョブとして再実行します（古いキーは消去済みです）。プロバイダー、ワークフロー、リージョン、ステータスマッピング、顔テンプレートの選択は引き継がれ、Diditにすでに存在するものはすべてスキップされます。",
        "operationId": "post_v3_session_imports_retry",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "retry",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "importId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "credentials": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "`credential_fields`に記載されたフィールド名を持つ、プロバイダーの読み取り専用キーです。保存時は暗号化され、返されることはなく、インポート終了時に消去されます。multipartではJSON文字列として送信してください。"
                  },
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "`api_ids`および`export_file`プロバイダーの場合に、改めて示されるレコードIDまたはエクスポートファイル。"
                  }
                }
              },
              "example": {
                "credentials": {
                  "app_token": "YOUR_PROVIDER_APP_TOKEN",
                  "secret_key": "YOUR_PROVIDER_SECRET_KEY"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "新しいインポートジョブです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionImportJob"
                }
              }
            }
          },
          "400": {
            "description": "移行ではない、終了していない、またはプロバイダーがキーを拒否しました。"
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.retry(\n    \"11111111-2222-3333-4444-555555555555\",\n    credentials={\"app_token\": \"YOUR_PROVIDER_APP_TOKEN\", \"secret_key\": \"YOUR_PROVIDER_SECRET_KEY\"},\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.retry(\"11111111-2222-3333-4444-555555555555\", {\n  credentials: { app_token: \"YOUR_PROVIDER_APP_TOKEN\", secret_key: \"YOUR_PROVIDER_SECRET_KEY\" },\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Retry(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsImportsRetryParams{\n\tCredentials: didit.Some(map[string]string{\"app_token\": \"YOUR_PROVIDER_APP_TOKEN\", \"secret_key\": \"YOUR_PROVIDER_SECRET_KEY\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.Map;\nimport me.didit.Didit;\nimport me.didit.types.SessionsImportsRetryParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().retry(\"11111111-2222-3333-4444-555555555555\", SessionsImportsRetryParams.builder()\n        .credentials(Map.of(\"app_token\", \"YOUR_PROVIDER_APP_TOKEN\", \"secret_key\", \"YOUR_PROVIDER_SECRET_KEY\"))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->retry('11111111-2222-3333-4444-555555555555', [\n    'credentials' => ['app_token' => 'YOUR_PROVIDER_APP_TOKEN', 'secret_key' => 'YOUR_PROVIDER_SECRET_KEY'],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.retry(\n  \"11111111-2222-3333-4444-555555555555\",\n  credentials: { app_token: \"YOUR_PROVIDER_APP_TOKEN\", secret_key: \"YOUR_PROVIDER_SECRET_KEY\" }\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.RetryAsync(\"11111111-2222-3333-4444-555555555555\", new SessionsImportsRetryParams\n{\n    Credentials = new Dictionary<string, string> { [\"app_token\"] = \"YOUR_PROVIDER_APP_TOKEN\", [\"secret_key\"] = \"YOUR_PROVIDER_SECRET_KEY\" },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/import-jobs/": {
      "get": {
        "summary": "リストのインポートジョブを一覧表示",
        "description": "アプリケーションのすべてのインポートを1つの形式で示します。検証のインポートと移行、個人と企業が含まれます。",
        "operationId": "get_v3_import_jobs_list",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "list_jobs",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "sessions",
                "users",
                "businesses"
              ],
              "default": "all"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "インポートジョブの一覧。新しい順に並びます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ImportJobSummary"
                      }
                    },
                    "counts": {
                      "type": "object",
                      "properties": {
                        "all": {
                          "type": "integer"
                        },
                        "running_and_waiting": {
                          "type": "integer"
                        },
                        "needs_attention": {
                          "type": "integer"
                        },
                        "done": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.list_jobs()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.listJobs();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.ListJobs(ctx, didit.SessionsImportsListJobsParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().listJobs();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->listJobs();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.list_jobs\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.ListJobsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/import-jobs/active/": {
      "get": {
        "summary": "実行中のインポートジョブ一覧を取得",
        "description": "進行状況インジケーター用に、実行中または待機中の処理と、直前に終了した処理を示します。",
        "operationId": "get_v3_import_jobs_active",
        "x-didit-sdk": {
          "resource": "sessions.imports",
          "method": "list_active_jobs",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "responses": {
          "200": {
            "description": "実行中のインポートジョブ。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ImportJobSummary"
                      }
                    },
                    "running": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "APIキーがない、無効、または失効しています。または、呼び出し元がこのアプリケーションの認証をインポートできません。",
            "content": {
              "application/json": {
                "examples": {
                  "Forbidden": {
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.imports.list_active_jobs()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.imports.listActiveJobs();\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.ListActiveJobs(ctx)\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().imports().listActiveJobs();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->imports->listActiveJobs();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.imports.list_active_jobs\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.Imports.ListActiveJobsAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/organization/{organization_id}/application/{application_id}/transactions/delete/": {
      "delete": {
        "summary": "取引の一括削除",
        "description": "1件以上の取引を完全に削除します。`transaction_uuids`で対象を選択するか、`delete_all: true`でアプリケーション内のすべての取引を削除します。\n\n取引を削除すると、その取引にのみ属するレコードも一緒に削除されます。対象は、当事者、タグ、メモ、支払い方法のリンク、書類とそのファイルの保存済みバージョンすべて、ルールの実行結果、アラート、プロバイダーの結果、ネットワークのスナップショット、トラベルルールのデータです。ケース、人物、企業は残りますが、削除された取引との紐付けは解除されます。下書きの規制当局向けレポートにはその取引が記載されなくなり、その取引を除いて再作成されます。削除は完全に行われ、元に戻せません。取り消し用のエンドポイントはありません。\n\n選択した取引のいずれかが確定済みの規制当局向けレポートに記載されている場合、リクエスト全体が`409`で拒否され、何も削除されません。レスポンス本文は`code: in_filed_report`を使用し、該当する各取引と、それを記載しているレポートを示します。それらのレポートを削除してから、リクエストを再度実行してください。",
        "operationId": "batch_delete_transactions",
        "x-didit-sdk": {
          "resource": "transactions",
          "method": "batch_delete",
          "auth": "api_key",
          "server": true,
          "scope": "application"
        },
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "組織のUUIDです。"
          },
          {
            "name": "application_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "アプリケーションのUUID。"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "title": "Selected transactions",
                    "required": [
                      "transaction_uuids"
                    ],
                    "properties": {
                      "transaction_uuids": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "description": "削除するDiditの取引UUIDです。`delete_all`がtrueでない限り必須です。",
                        "minItems": 1
                      },
                      "delete_all": {
                        "type": "boolean",
                        "enum": [
                          false
                        ],
                        "default": false,
                        "description": "`transaction_uuids`で取引を選択する場合は、省略するか`false`を送信してください。"
                      }
                    }
                  },
                  {
                    "title": "All transactions",
                    "required": [
                      "delete_all"
                    ],
                    "properties": {
                      "delete_all": {
                        "type": "boolean",
                        "enum": [
                          true
                        ],
                        "description": "アプリケーション内のすべての取引を削除します。`transaction_uuids`は無視されます。"
                      },
                      "transaction_uuids": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "description": "`delete_all`がtrueの場合は無視されます。"
                      }
                    }
                  }
                ]
              },
              "examples": {
                "Selected transactions": {
                  "value": {
                    "transaction_uuids": [
                      "abcdef12-3456-7890-abcd-ef1234567890",
                      "12345678-90ab-cdef-1234-567890abcdef"
                    ]
                  }
                },
                "All transactions": {
                  "value": {
                    "delete_all": true
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl (selected transactions)",
            "source": "curl -X DELETE 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/transactions/delete/' \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"transaction_uuids\": [\"abcdef12-3456-7890-abcd-ef1234567890\"]}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\nclient = Didit()\n\nclient.transactions.batch_delete(\n    body={\n        \"transaction_uuids\": [\"abcdef12-3456-7890-abcd-ef1234567890\", \"12345678-90ab-cdef-1234-567890abcdef\"],\n    },\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nconst didit = new Didit();\n\nawait didit.transactions.batchDelete({\n  transaction_uuids: [\"abcdef12-3456-7890-abcd-ef1234567890\", \"12345678-90ab-cdef-1234-567890abcdef\"],\n});"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.TransactionsBatchDeleteParams;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nDidit client = new Didit();\n\nclient.transactions().batchDelete(TransactionsBatchDeleteParams.builder()\n        .putAdditionalProperty(\"transaction_uuids\", List.of(\"abcdef12-3456-7890-abcd-ef1234567890\", \"12345678-90ab-cdef-1234-567890abcdef\"))\n        .build());"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\n$didit = new DiditClient();\n\n$didit->transactions->batchDelete([\n    'transaction_uuids' => ['abcdef12-3456-7890-abcd-ef1234567890', '12345678-90ab-cdef-1234-567890abcdef'],\n]);"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n# and DIDIT_APPLICATION_ID.\ndidit = Didit::Client.new\n\ndidit.transactions.batch_delete(\n  body: {\n    transaction_uuids: [\"abcdef12-3456-7890-abcd-ef1234567890\", \"12345678-90ab-cdef-1234-567890abcdef\"],\n  }\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nusing var client = new DiditClient();\n\nawait client.Transactions.BatchDeleteAsync(new TransactionsBatchDeleteParams\n{\n    TransactionUuids = new string[] { \"abcdef12-3456-7890-abcd-ef1234567890\", \"12345678-90ab-cdef-1234-567890abcdef\" },\n});"
          }
        ],
        "responses": {
          "204": {
            "description": "削除された選択済みの取引です。"
          },
          "400": {
            "description": "取引のセレクターが指定されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transaction_uuids": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "example": {
                  "transaction_uuids": [
                    "This field is required unless delete_all is true."
                  ]
                }
              }
            }
          },
          "403": {
            "description": "このAPIキーでは取引を削除できません。このエンドポイントには`write:transactions`が必要です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "選択した取引のうち少なくとも1件が、確定済みの規制レポートに記載されています。何も削除されません。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InFiledReportError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/travel-rule/networks/": {
      "get": {
        "summary": "トラベルルールのネットワークを取得",
        "description": "このアプリケーションについて、各ネットワークの実際の状態を読み取ります。自社のメンバーシップ経由で送信するのか、Diditのメンバーシップ経由で送信するのか、まだ送信できない場合はその理由がわかります。デューデリジェンスのアンケートと参加者も返されます。読み取りによって何かが作成されることはありません。",
        "operationId": "getTravelRuleNetworks",
        "x-didit-sdk": {
          "resource": "travel_rule.networks",
          "method": "retrieve",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/networks/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.networks.retrieve()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.networks.retrieve();\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().networks().retrieve();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->networks->retrieve();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.networks.retrieve\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Networks.RetrieveAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワークの状態、アンケート、参加者。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleNetworksOverview"
                },
                "examples": {
                  "Before the questionnaire": {
                    "value": {
                      "platform_networks_enabled": false,
                      "questionnaire": {
                        "status": "draft",
                        "answers": {},
                        "submitted_at": null,
                        "reviewed_at": null,
                        "review_note": "",
                        "history": [],
                        "updated_at": null
                      },
                      "participants": [],
                      "networks": {
                        "gtr": {
                          "rail": "GTR",
                          "mode": "unavailable",
                          "state": "didit_onboarding",
                          "reason": "didit_membership_not_live",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        },
                        "trust": {
                          "rail": "TRUST",
                          "mode": "unavailable",
                          "state": "unavailable",
                          "reason": "own_membership_only",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        },
                        "verifyvasp": {
                          "rail": "VERIFYVASP",
                          "mode": "unavailable",
                          "state": "didit_onboarding",
                          "reason": "didit_membership_not_live",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        },
                        "sygna": {
                          "rail": "SYGNA",
                          "mode": "unavailable",
                          "state": "didit_onboarding",
                          "reason": "didit_membership_not_live",
                          "platform_available": false,
                          "connected": false,
                          "participant": null,
                          "vasps_reachable": 0,
                          "routed_30d": 0
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          }
        }
      }
    },
    "/v3/travel-rule/networks/questionnaire/": {
      "get": {
        "summary": "ネットワークアンケートを取得",
        "description": "このアプリケーションに対するDiditのネットワークデューデリジェンス質問票、そのステータス、Diditのレビューメモを取得します。一度も保存していないアプリケーションでは、空の下書きが返されます。",
        "operationId": "getTravelRuleNetworkQuestionnaire",
        "x-didit-sdk": {
          "resource": "travel_rule.networks",
          "method": "retrieve_questionnaire",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET https://verification.didit.me/v3/travel-rule/networks/questionnaire/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.networks.retrieve_questionnaire()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.networks.retrieveQuestionnaire();\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().networks().retrieveQuestionnaire();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->networks->retrieveQuestionnaire();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.networks.retrieve_questionnaire\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Networks.RetrieveQuestionnaireAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "アンケート。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleNetworkQuestionnaire"
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          }
        }
      },
      "put": {
        "summary": "ネットワークアンケートの回答を保存",
        "description": "アンケートがdraftまたはchanges_requestedの間に回答を保存します。保存は部分的に行われ、送信しなかった回答はそのまま保持されます。",
        "operationId": "updateTravelRuleNetworkQuestionnaire",
        "x-didit-sdk": {
          "resource": "travel_rule.networks",
          "method": "update_questionnaire",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X PUT https://verification.didit.me/v3/travel-rule/networks/questionnaire/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"legal_name\": \"Example VASP Ltd\", \"incorporation_country\": \"ES\", \"aml_ctf_policy_attested\": true}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.networks.update_questionnaire(\n    legal_name=\"Example VASP Ltd\",\n    incorporation_country=\"ES\",\n    aml_ctf_policy_attested=True,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.networks.updateQuestionnaire({\n  legal_name: \"Example VASP Ltd\",\n  incorporation_country: \"ES\",\n  aml_ctf_policy_attested: true,\n});\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleNetworkQuestionnaireAnswers;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().networks().updateQuestionnaire(TravelRuleNetworkQuestionnaireAnswers.builder()\n        .legalName(\"Example VASP Ltd\")\n        .incorporationCountry(\"ES\")\n        .amlCtfPolicyAttested(true)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->networks->updateQuestionnaire([\n    'legal_name' => 'Example VASP Ltd',\n    'incorporation_country' => 'ES',\n    'aml_ctf_policy_attested' => true,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.networks.update_questionnaire(\n  legal_name: \"Example VASP Ltd\",\n  incorporation_country: \"ES\",\n  aml_ctf_policy_attested: true\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Networks.UpdateQuestionnaireAsync(new TravelRuleNetworkQuestionnaireAnswers\n{\n    LegalName = \"Example VASP Ltd\",\n    IncorporationCountry = \"ES\",\n    AmlCtfPolicyAttested = true,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleNetworkQuestionnaireAnswers"
              },
              "example": {
                "legal_name": "Example VASP Ltd",
                "incorporation_country": "ES",
                "aml_ctf_policy_attested": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "回答をマージしたアンケート。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleNetworkQuestionnaire"
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー。フィールドごとのキーで返されます。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "Diditのメンバーシップを通じたネットワークアクセスは、まだ開放されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "travel_rule_platform_networks_disabled"
                      ]
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "アンケートはDiditで処理中か、判定済みです。変更できるのはdraftまたはchanges_requestedの間のみです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "travel_rule_questionnaire_not_editable"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/networks/questionnaire/submit/": {
      "post": {
        "summary": "ネットワークアンケートを送信する",
        "description": "保存したアンケートをDiditの審査に提出します。保存済みの回答は完全である必要があります。leiとdata_protection_contact_emailを除くすべてのフィールドが入力され、3つの証明がtrueであることが条件です。Diditはこれを承認するか、変更を求める（編集して再提出します）か、却下します。保留中にリクエストしたネットワークは、承認時にそれぞれのオンボーディングに引き渡されます。",
        "operationId": "submitTravelRuleNetworkQuestionnaire",
        "x-didit-sdk": {
          "resource": "travel_rule.networks",
          "method": "submit_questionnaire",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/networks/questionnaire/submit/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.networks.submit_questionnaire()\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.networks.submitQuestionnaire();\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().networks().submitQuestionnaire();\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->networks->submitQuestionnaire();\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.networks.submit_questionnaire\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Networks.SubmitQuestionnaireAsync();\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "送信されたアンケート。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleNetworkQuestionnaire"
                }
              }
            }
          },
          "400": {
            "description": "保存された回答が不完全または無効です。フィールドごとに示されます。"
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "Diditのメンバーシップを通じたネットワークアクセスは、まだ開放されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "travel_rule_platform_networks_disabled"
                      ]
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "アンケートはDiditで処理中か、判定済みです。変更できるのはdraftまたはchanges_requestedの間のみです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "travel_rule_questionnaire_not_editable"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/networks/{network}/request/": {
      "post": {
        "summary": "トラベルルールネットワークをリクエストする",
        "description": "Diditのメンバーシップが対象とするネットワーク(GTRまたはSygna)上で、このアプリケーション独自の参加者を申請します。承認済みのアンケートがない場合、参加者はアンケートを待機する状態になります(questionnaire_pending)。承認済みのアンケートがある場合はネットワークのオンボーディングに進み(submitted_to_network)、ネットワークからコードが付与されると有効になります。この操作は冪等です。保留中、オンボーディング中、または稼働中の参加者はそのまま返されます。ネットワークが登録を拒否した場合(last_errorが設定されている場合)、再度リクエストすると再試行されます。TRUSTとVerifyVASPには、お客様自身のメンバーシップを通じてのみアクセスできます。TRUSTはVASPごとにメンバーを受け入れ、VerifyVASP Enclaveは1つのVASP IDに対応するためです。",
        "operationId": "requestTravelRuleNetworkAccess",
        "x-didit-sdk": {
          "resource": "travel_rule.networks",
          "method": "request_access",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "gtr",
                "sygna"
              ]
            },
            "description": "Diditのメンバーシップを通じて参加するネットワークです。"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/networks/gtr/request/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.networks.request_access(\n    \"your-network\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.networks.requestAccess(\"your-network\");\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().networks().requestAccess(\"your-network\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->networks->requestAccess('your-network');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.networks.request_access(\"your-network\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.Networks.RequestAccessAsync(\"your-network\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "ネットワーク上のお客様の参加者です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleNetworkParticipant"
                }
              }
            }
          },
          "400": {
            "description": "不明なネットワーク、Diditが対応していないネットワーク(独自のメンバーシップを接続してください)、またはサンドボックスのアプリケーションです。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "travel_rule_network_own_membership_only",
                        "travel_rule_network_sandbox_application"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "APIキーがないか無効です。"
          },
          "403": {
            "description": "Diditのメンバーシップを通じたネットワークアクセスは、まだ開放されていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string",
                      "enum": [
                        "travel_rule_platform_networks_disabled"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v3/address-validation/": {
      "post": {
        "summary": "住所を検証する",
        "description": "住所が実在することを確認し、正規化された住所（配送用の行、構成要素、座標）を返します。確認するのは住所のみで、住所を個人に紐付けることはありません。\n\n**リクエスト。** 住所は1行（`address`）または構造化フィールド（`address_line_1`、および任意で`address_line_2`、`city`、`region`、`postal_code`）のいずれかで送信し、両方を送信しないでください。また、`country`（ISO 3166-1 alpha-2またはalpha-3）を必ず含めてください。\n\n**結果。** `address_validation.status`は、`verified`（建物単位まで確認済み）、`partially_verified`（通り以上の単位でのみ確認済み）、`not_verified`（地域または市区町村のみ一致、または一致なし）、`unavailable`（検証を実行できなかった）のいずれかです。完了したすべてのリクエストでHTTPは`200`となり、`unavailable`も含まれます。`unavailable`の結果は後で再試行してください。\n\n**請求。** 本番環境での呼び出しは、検証済み住所1件あたり$0.10です。`unavailable`の結果は課金されません。利用記録以外は何も保存されません。セッションは作成されず、結果はこのレスポンスでのみ返されます。\n\n**サンドボックス。** サンドボックスキーはリクエストを検証し、送信された住所をそのまま返す決定論的な`verified`結果を常に返します。クレジットは消費されません。\n\n**認証。** アプリケーションのAPIキーを`x-api-key`で送信してください。認証情報が欠落しているか無効な場合は`403`が返されます。このAPIが`401`を返すことはありません。\n\n**レート制限。** すべてのPOST/PATCH/DELETEエンドポイントで共有される書き込み枠として、APIキーごとに1分あたり300リクエストです。",
        "operationId": "post_v3_address_validation",
        "x-didit-sdk": {
          "resource": "address_validation",
          "method": "validate",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Standalone APIs"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/address-validation/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"address_line_1\": \"1600 Amphitheatre Pkwy\",\n    \"city\": \"Mountain View\",\n    \"region\": \"CA\",\n    \"postal_code\": \"94043\",\n    \"country\": \"US\"\n  }'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.address_validation.validate(\n    address_line_1=\"1600 Amphitheatre Pkwy\",\n    city=\"Mountain View\",\n    region=\"CA\",\n    postal_code=\"94043\",\n    country=\"US\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.addressValidation.validate({\n  address_line_1: \"1600 Amphitheatre Pkwy\",\n  city: \"Mountain View\",\n  region: \"CA\",\n  postal_code: \"94043\",\n  country: \"US\",\n});\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.AddressValidationRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.addressValidation().validate(AddressValidationRequest.builder()\n        .addressLine1(\"1600 Amphitheatre Pkwy\")\n        .city(\"Mountain View\")\n        .region(\"CA\")\n        .postalCode(\"94043\")\n        .country(\"US\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->addressValidation->validate([\n    'address_line_1' => '1600 Amphitheatre Pkwy',\n    'city' => 'Mountain View',\n    'region' => 'CA',\n    'postal_code' => '94043',\n    'country' => 'US',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.address_validation.validate(\n  address_line_1: \"1600 Amphitheatre Pkwy\",\n  city: \"Mountain View\",\n  region: \"CA\",\n  postal_code: \"94043\",\n  country: \"US\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.AddressValidation.ValidateAsync(new AddressValidationRequest\n{\n    AddressLine1 = \"1600 Amphitheatre Pkwy\",\n    City = \"Mountain View\",\n    Region = \"CA\",\n    PostalCode = \"94043\",\n    Country = \"US\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressValidationRequest"
              },
              "examples": {
                "Structured": {
                  "summary": "構造化された住所フィールド",
                  "value": {
                    "address_line_1": "1600 Amphitheatre Pkwy",
                    "city": "Mountain View",
                    "region": "CA",
                    "postal_code": "94043",
                    "country": "US"
                  }
                },
                "One line": {
                  "summary": "1行で表した住所全体",
                  "value": {
                    "address": "Paseo de la Castellana 259, 28046 Madrid",
                    "country": "ES"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "検証が完了しました。`address_validation.status`を確認してください。完了したリクエストのHTTPステータスは常に`200`です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressValidationResponse"
                },
                "examples": {
                  "Verified": {
                    "summary": "建物単位まで確認された実在の住所",
                    "value": {
                      "request_id": "6f7d2c1e-1c5a-4a1e-9b8f-2a1f0f4b9c3d",
                      "address_validation": {
                        "status": "verified",
                        "verification_level": "premise",
                        "address": {
                          "address_line_1": "1600 Amphitheatre Pkwy",
                          "address_line_2": null,
                          "city": "Mountain View",
                          "region": "CA",
                          "postal_code": "94043-1351",
                          "country": "US"
                        },
                        "formatted_address": "1600 Amphitheatre Pkwy, Mountain View CA 94043-1351",
                        "latitude": 37.422022,
                        "longitude": -122.08429
                      },
                      "created_at": "2026-10-27T11:20:00.000000+00:00"
                    }
                  },
                  "Not verified": {
                    "summary": "架空の通り名: 市区町村のみが一致",
                    "value": {
                      "request_id": "0b9e3f4a-6c2d-4e8b-a1f7-5d3c2b1a0e9f",
                      "address_validation": {
                        "status": "not_verified",
                        "verification_level": "locality",
                        "address": {
                          "address_line_1": "Calle Inventada Que No Existe 99999 28046",
                          "address_line_2": null,
                          "city": "Madrid",
                          "region": "Madrid",
                          "postal_code": null,
                          "country": "ES"
                        },
                        "formatted_address": "Calle Inventada Que No Existe 99999 28046, Madrid, MADRID, SPAIN",
                        "latitude": 40.42603054,
                        "longitude": -3.68645331
                      },
                      "created_at": "2026-10-27T11:21:00.000000+00:00"
                    }
                  },
                  "Unavailable": {
                    "summary": "検証を実行できませんでした。課金されません",
                    "value": {
                      "request_id": "3c1b2a0f-9e8d-4c7b-b6a5-1f0e9d8c7b6a",
                      "address_validation": {
                        "status": "unavailable",
                        "verification_level": null,
                        "address": null,
                        "formatted_address": null,
                        "latitude": null,
                        "longitude": null
                      },
                      "created_at": "2026-10-27T11:22:00.000000+00:00"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AddressValidationValidationError"
          },
          "403": {
            "$ref": "#/components/responses/AddressValidationPermissionDenied"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitedWrite"
          }
        }
      }
    },
    "/v3/travel-rule/wallet-proofs/": {
      "get": {
        "summary": "レビュー対象のスクリーンショットによるウォレット証明を一覧表示",
        "description": "スクリーンショットによるウォレット所有証明のレビューキューです。スクリーンショットは、Diditが自ら確認できない唯一の証明です。エンドユーザーがウィジェットからアップロードすると、POST /v3/travel-rule/wallet-proofs/{proof_uuid}/decision/で承認または却下するまでPENDINGのまま待機します。古い順に並ぶため、最も長く待機している証明から処理できます。表示されるのはアップロード済みのスクリーンショットのみです。エンドユーザーがまだファイルをアップロードしていない証明や、アドレス帳から削除したウォレットの証明（DiditがOWNERSHIP_CHANGEDとしてクローズします）は表示されません。",
        "operationId": "listTravelRuleWalletProofs",
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_proofs",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "一覧表示する証明。デフォルトはPENDING（まだ判定が必要なもの）です。",
            "schema": {
              "type": "string",
              "enum": [
                "PENDING",
                "VERIFIED",
                "REJECTED",
                "EXPIRED"
              ],
              "default": "PENDING"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl https://verification.didit.me/v3/travel-rule/wallet-proofs/?status=PENDING \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.travel_rule.wallet_proofs.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.travelRule.walletProofs.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.travelRule().walletProofs().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->travelRule->walletProofs->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.wallet_proofs.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.TravelRule.WalletProofs.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ],
        "responses": {
          "200": {
            "description": "ページ分割されたスクリーンショット証跡の一覧。countは100件までは正確な値で、100件を超える場合は100が上限になります。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TravelRuleWalletProofReview"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "不明なステータスです。"
          },
          "401": {
            "description": "x-api-keyがないか無効です。"
          },
          "403": {
            "description": "呼び出し元に取引の権限がありません。"
          }
        }
      }
    },
    "/v3/travel-rule/wallet-proofs/{proof_uuid}/decision/": {
      "post": {
        "summary": "スクリーンショットによるウォレット証明を承認または却下する",
        "description": "レビューキューにあるスクリーンショットのプルーフを判定します。approveはプルーフとアドレス帳のエントリを検証し、ウィジェットセッションの発行対象となった送金に所有権を適用します。これは検証済みの署名とまったく同じ動作です。他のDidit顧客がINTERNALレールで送信した送金は、スクリーンショットでは決して確認されません。その場合は署名付きメッセージまたはテスト入金が必要です。rejectはプルーフをfailure_reason REVIEW_REJECTEDでREJECTEDとしてクローズします。エンドユーザーはウィジェットから新しいプルーフを開始できます。noteはプルーフとともに保持されます。",
        "operationId": "decideTravelRuleWalletProof",
        "x-didit-sdk": {
          "resource": "travel_rule.wallet_proofs",
          "method": "decide",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "proof_uuid",
            "in": "path",
            "required": true,
            "description": "レビューキューから取得したproof_id。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleWalletProofDecision"
              },
              "example": {
                "decision": "approve",
                "note": "Address matches the wallet app."
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/wallet-proofs/{proof_uuid}/decision/ \\\n  -H 'x-api-key: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"decision\": \"approve\", \"note\": \"Address matches the wallet app.\"}'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.wallet_proofs.decide(\n    \"11111111-2222-3333-4444-555555555555\",\n    decision=\"approve\",\n    note=\"Address matches the wallet app.\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.walletProofs.decide(\"11111111-2222-3333-4444-555555555555\", {\n  decision: \"approve\",\n  note: \"Address matches the wallet app.\",\n});\nconsole.log(result);"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleWalletProofDecision;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().walletProofs().decide(\"11111111-2222-3333-4444-555555555555\", TravelRuleWalletProofDecision.builder()\n        .decision(TravelRuleWalletProofDecision.Decision.of(\"approve\"))\n        .note(\"Address matches the wallet app.\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->walletProofs->decide('11111111-2222-3333-4444-555555555555', [\n    'decision' => 'approve',\n    'note' => 'Address matches the wallet app.',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.wallet_proofs.decide(\n  \"11111111-2222-3333-4444-555555555555\",\n  decision: \"approve\",\n  note: \"Address matches the wallet app.\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.WalletProofs.DecideAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleWalletProofDecision\n{\n    Decision = \"approve\",\n    Note = \"Address matches the wallet app.\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "判定された証明です。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWalletProofReview"
                }
              }
            }
          },
          "400": {
            "description": "判定が無効であるか、メモが512文字を超えています。"
          },
          "401": {
            "description": "x-api-keyがないか無効です。"
          },
          "403": {
            "description": "呼び出し元に取引の権限がありません。"
          },
          "404": {
            "description": "このIDの提出済みスクリーンショット証明がアプリケーション内に存在しません。"
          },
          "409": {
            "description": "証明はすでに判定済みです（本文にステータスが含まれます）。またはコードOWNERSHIP_CHANGEDです。ウィジェットセッションの発行後にウォレットの保有者が変わったか、ウォレットが削除されたため、証明はクローズされており、現在の保有者は新しい証明を行う必要があります。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofError"
                }
              }
            }
          }
        }
      }
    },
    "/v3/travel-rule/widget/{token}/proofs/": {
      "post": {
        "summary": "ウォレット所有の証明を開始",
        "description": "ウィジェットのセッショントークンで識別する公開エンドポイントで、APIキーは不要です。エンドユーザーが証明方式を選択したときに、ホスト型ウィジェットがこのエンドポイントを呼び出します。証明はこの呼び出しによってのみ作成され、証明ファネルにカウントされます。同じ方式を再度選択すると、2つ目の証明を開始するのではなく、すでに開いている証明が返されます(200、同じチャレンジまたは入金額)。別の方式を選択すると、未完了の証明はMETHOD_SWITCHEDとしてクローズされます。ただし、送信済みのスクリーンショットや確認中のテスト入金は除きます。MESSAGE_SIGNINGは署名するチャレンジを返し、SATOSHI_TESTは入金先アドレス、正確な金額、期間を返します。SELF_DECLARATIONは即座に検証されます(ステータスVERIFIED)。チェーンファミリーごとに検証される署名形式は次のとおりです。EVMチェーンはpersonal_sign(EIP-191)署名を16進数エンコードで受け付けます。Bitcoinは、BIP-137のsignmessage署名(P2PKH、P2SH-P2WPKH、P2WPKHアドレス)またはBIP-322のsimple署名(P2WPKH、P2TRアドレス)をbase64エンコードで受け付けます。Solanaはチャレンジに対するEd25519署名をbase58エンコードで受け付けます。TronはsignMessageV2(TIP-191)署名を16進数エンコードで受け付けます。BIP-322のfull署名またはproof-of-funds署名、あるいはマルチシグアドレスは、SIGNATURE_UNSUPPORTED_SCHEMEで失敗します。",
        "operationId": "createTravelRuleWidgetProof",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "create_widget_proof",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "ウィジェットセッションの発行時に返される不透明なセッショントークンです。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleWidgetProofCreate"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"method\": \"MESSAGE_SIGNING\"}'"
          }
        ],
        "responses": {
          "201": {
            "description": "新しいPENDINGの証明（SELF_DECLARATIONの場合はVERIFIED）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofSummary"
                }
              }
            }
          },
          "200": {
            "description": "この方法ですでに開かれている証明を再開したものです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofSummary"
                }
              }
            }
          },
          "400": {
            "description": "リクエストボディが無効である、ウォレットが転送と一致しない、SCREENSHOTが許可されていない、またはそのチェーンでメソッドが利用できない場合のコードCHAIN_UNSUPPORTEDです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofError"
                }
              }
            }
          },
          "403": {
            "description": "このアプリケーションではSELF_DECLARATIONは許可されていません。"
          },
          "404": {
            "description": "不明なトークンです。"
          },
          "409": {
            "description": "コードOWNERSHIP_CHANGED：セッションの発行後に、ウォレットの保有者が変わったか、ウォレットが削除されました。現在の保有者向けに新しいセッションを発行してください。セッションにsatoshi_deposit_addressがない場合のSATOSHI_TEST、およびセッションに残りの試行回数がない場合（コードなし。ボディにはmax_attempts、attempts_used、attempts_remaining 0が含まれます）にも返されます。この場合は新しいセッションを発行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofError"
                }
              }
            }
          },
          "410": {
            "description": "セッションが期限切れになりました。"
          }
        }
      }
    },
    "/v3/travel-rule/widget/{token}/proofs/{proof_id}/verify/": {
      "post": {
        "summary": "ウォレット所有の証明エビデンスを送信する",
        "description": "ウィジェットのセッショントークンで識別する公開エンドポイントで、APIキーは不要です。証明の方式に必要な証拠を送信します。MESSAGE_SIGNINGの場合はsignature、SATOSHI_TESTの場合はtxid(JSON)、SCREENSHOTの場合はファイル(multipart)です。送信はすべて1回の試行としてカウントされます。署名が検証できない場合、または入金が一致しない場合は、コード付きで400を返し、エンドユーザーが再試行できるよう証明はPENDINGのまま残ります。入金が検出されたもののまだ承認されていない場合は、ステータスPENDINGで200を返し、期間が終了するまで自動的に再確認されます。スクリーンショットの場合は、ステータスPENDINGで200を返し、レビューキュー(GET /v3/travel-rule/wallet-proofs/)で待機します。EXPIREDまたはREJECTEDの証明が後から検証済みになることはありません。新しい証明を開始してください。チェーンファミリーごとに検証される署名形式は次のとおりです。EVMチェーンはpersonal_sign(EIP-191)署名を16進数エンコードで受け付けます。Bitcoinは、BIP-137のsignmessage署名(P2PKH、P2SH-P2WPKH、P2WPKHアドレス)またはBIP-322のsimple署名(P2WPKH、P2TRアドレス)をbase64エンコードで受け付けます。Solanaはチャレンジに対するEd25519署名をbase58エンコードで受け付けます。TronはsignMessageV2(TIP-191)署名を16進数エンコードで受け付けます。BIP-322のfull署名またはproof-of-funds署名、あるいはマルチシグアドレスは、SIGNATURE_UNSUPPORTED_SCHEMEで失敗します。",
        "operationId": "verifyTravelRuleWidgetProof",
        "x-didit-sdk": {
          "resource": "travel_rule",
          "method": "verify_widget_proof",
          "auth": "public",
          "server": false
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "ウィジェットセッションの発行時に返される不透明なセッショントークンです。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "proof_id",
            "in": "path",
            "required": true,
            "description": "証明の開始時に返されたproof_id。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "signature": {
                    "type": "string",
                    "description": "MESSAGE_SIGNING: 証明のチャレンジに対するウォレットの署名。"
                  },
                  "txid": {
                    "type": "string",
                    "description": "SATOSHI_TEST：テスト入金の取引ID。"
                  }
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "SCREENSHOT：エンドユーザーのウォレットアプリに表示されたウォレットの画像。"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/{proof_id}/verify/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"signature\": \"0x...\"}'"
          }
        ],
        "responses": {
          "200": {
            "description": "VERIFIED、またはまだPENDING（レビュー待ちのスクリーンショット、またはまだインデックスされていないか確認されていない入金で、コードはDEPOSIT_NOT_FOUNDまたはDEPOSIT_UNCONFIRMED）。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofVerifyResult"
                }
              }
            }
          },
          "400": {
            "description": "証拠がありません。または、エンドユーザーが再試行できるよう証明をPENDINGのまま維持する失敗した試行です（コードSIGNATURE_INVALID、SIGNATURE_UNSUPPORTED_SCHEMEまたはDEPOSIT_LOOKUP_FAILED）。または、証明を却下するテスト入金です（コードDEPOSIT_MISMATCH、DEPOSIT_STALEまたはTXID_REUSED、ステータスREJECTED、セッションの試行回数を含む）。attempts_remainingが0より大きい間は、方法を再度選択すると新しい証明が開始されます。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofError"
                }
              }
            }
          },
          "404": {
            "description": "不明なトークン、またはこのセッションに該当する証明がありません。"
          },
          "409": {
            "description": "コードOWNERSHIP_CHANGED（証明はこのコードでクローズされます）。または、クローズ済みの証明（REJECTEDまたはEXPIRED）。ステータス、クローズ時のコード、セッションの試行回数が含まれます。新しい証明を開始するには、方法を選び直してください。または、開始時に検証済みとなるSELF_DECLARATIONの証明。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofError"
                }
              }
            }
          },
          "410": {
            "description": "セッションが期限切れになったか、サトシテストの期間が終了した場合はコードWINDOW_EXPIRED。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleWidgetProofError"
                }
              }
            }
          }
        }
      }
    },
    "/v3/id-verification/wallets/verifications/{request_id}/response/": {
      "post": {
        "operationId": "submit_wallet_verification_response",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "submit_verification_response",
          "auth": "api_key",
          "server": true
        },
        "description": "Digital Credentials APIのウォレット（Google Wallet）：next_actionがrequest_digital_credentialである検証について、ウォレットがページまたはアプリに返した内容を送信します。Diditはそれを復号し、信頼できる発行者ルートに照らして発行者の署名を、署名済みダイジェストに照らして返された各値を、さらにオリジンとこのリクエストに対するデバイス署名を検証したうえで、検証を判定します。結果はverified（1回のみ請求）またはエラーコード付きのdeclinedです。1回限りの使用で、2回目の送信では判定済みの検証が返されます。",
        "summary": "ウォレットのレスポンスを送信する",
        "parameters": [
          {
            "in": "path",
            "name": "request_id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "開始エンドポイントが返したrequest_idです。",
            "required": true
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest"
              },
              "example": {
                "response": {
                  "protocol": "openid4vp-v1-signed",
                  "data": {
                    "response": "<compact JWE returned by the wallet>"
                  }
                }
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest"
              },
              "example": {
                "response": {
                  "protocol": "openid4vp-v1-signed",
                  "data": {
                    "response": "<compact JWE returned by the wallet>"
                  }
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest"
              },
              "example": {
                "response": {
                  "protocol": "openid4vp-v1-signed",
                  "data": {
                    "response": "<compact JWE returned by the wallet>"
                  }
                }
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "google_wallet",
                      "name": "Google Wallet",
                      "issuing_authority": "Google Wallet (ID pass) and US state issuers (mobile driving licence)"
                    },
                    "country": "USA",
                    "status": "Approved",
                    "outcome": "verified",
                    "error": null,
                    "interaction": "digital_credentials",
                    "simulated": false,
                    "expires_at": "2026-01-01T10:10:00Z",
                    "next_action": null,
                    "identity": {
                      "full_name": "Alex Example",
                      "first_name": "Alex",
                      "last_name": "Example",
                      "date_of_birth": "1990-01-31",
                      "nationality": "USA",
                      "issuing_state": "USA"
                    },
                    "attributes": {
                      "document_number": "X0000000",
                      "document_expiry_date": "2030-01-31"
                    },
                    "level_of_assurance": "substantial",
                    "verified_at": "2026-01-01T10:01:00Z",
                    "signature_valid": true,
                    "credential_type": "person_identification"
                  },
                  "vendor_data": "your-customer-reference",
                  "metadata": {
                    "reference": "example"
                  },
                  "created_at": "2026-01-01T10:00:00Z"
                }
              }
            },
            "description": ""
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage"
                }
              }
            },
            "description": "認証情報がありません（x-api-keyまたはAuthorization: Bearer）。"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーnot_found：このアプリケーションのウォレット認証に、このrequest_idを持つものはありません。"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーnot_a_digital_credentials_wallet：この認証はウォレットのレスポンスを受け付けません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境ではウォレットを検証できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/verifications/REQUEST_ID/response/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"response\": {\n    \"protocol\": \"openid4vp-v1-signed\",\n    \"data\": {\n      \"response\": \"<compact JWE returned by the wallet>\"\n    }\n  }\n}'"
          }
        ]
      }
    },
    "/v3/id-verification/wallets/google-wallet/": {
      "post": {
        "operationId": "start_google_wallet_wallet_verification",
        "x-didit-sdk": {
          "resource": "id_wallets",
          "method": "start_google_wallet",
          "auth": "api_key",
          "server": true
        },
        "description": "ワークフローを使わずにGoogle Walletのサインイン(Google Wallet (ID pass)および米国の州発行者 (モバイル運転免許証)、USA、GBR、BRA、SGP、TWN)を開始します。本人確認が完了した場合にのみ、1回だけ課金されます。レスポンスにはnext_action.type=request_digital_credentialと、Diditがお客様のアプリケーション向けに署名したリクエストが含まれます。このリクエストはoriginからのみ使用できます。そのorigin上のユーザー操作内で、next_action.digital_credentials.requestをnavigator.credentials.get({digital: ...})に渡し(またはAndroid Credential ManagerにGetDigitalCredentialOptionのrequestJsonとして渡し)、ウォレットが返した内容を/v3/id-verification/wallets/verifications/{request_id}/response/にPOSTします。ウォレットが別のデバイスにある場合は、ブラウザが独自のQRコードを表示します。サンドボックスのアプリケーションでは、プロバイダーに一切接続しない決定的なシミュレーション(simulated: true)が実行されます。",
        "summary": "Google Wallet認証を開始",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string"
            },
            "description": "任意の再試行安全キーです（最大255文字）。同じキー、ウォレット、リクエストボディで再試行すると、2回目のサインインを開始せずに元の検証結果が返されます。同じキーで別のウォレットまたはリクエストボディを指定すると、409 idempotency_key_reusedが返されます。"
          }
        ],
        "tags": [
          "Digital ID wallets"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGoogleWalletWalletVerificationStartRequest"
              },
              "example": {
                "country": "USA",
                "vendor_data": "your-customer-reference",
                "metadata": {
                  "reference": "example"
                },
                "origin": "https://app.example.com"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGoogleWalletWalletVerificationStartRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/DigitalIdWalletApiGoogleWalletWalletVerificationStartRequest"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResponse"
                },
                "example": {
                  "request_id": "00000000-0000-4000-8000-000000000001",
                  "wallet_verification": {
                    "wallet": {
                      "id": "google_wallet",
                      "name": "Google Wallet",
                      "issuing_authority": "Google Wallet (ID pass) and US state issuers (mobile driving licence)"
                    },
                    "country": "USA",
                    "status": "Not Finished",
                    "outcome": "pending",
                    "error": null,
                    "interaction": "digital_credentials",
                    "simulated": false,
                    "expires_at": "2026-01-01T10:10:00Z",
                    "next_action": {
                      "type": "request_digital_credential",
                      "digital_credentials": {
                        "protocol": "openid4vp-v1-signed",
                        "request": {
                          "requests": [
                            {
                              "protocol": "openid4vp-v1-signed",
                              "data": {
                                "request": "<compact JWS signed by Didit>"
                              }
                            }
                          ]
                        }
                      }
                    },
                    "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"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest"
                }
              }
            },
            "description": "フィールドのバリデーションエラー({field: [messages]})、またはエラーreturn_url_invalid、return_url_not_allowed、origin_invalid、origin_not_allowed、invalid_personal_code、invalid_phone_number、idempotency_key_invalid。"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationStartForbidden"
                }
              }
            },
            "description": "認証情報がありません（{detail}）。または、エラーwallet_unavailable、insufficient_creditsまたはcontract_rate_missingです。"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーidempotency_key_reusedまたはidempotency_key_in_progress（Retry-After付き）。"
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_provider_unavailable：プロバイダーを開始できませんでした。何も作成されていません。"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
                }
              }
            },
            "description": "エラーwallet_not_configured：この環境はウォレットに接続できません。"
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "cURL",
            "source": "curl --request POST \\\n  --url https://verification.didit.me/v3/id-verification/wallets/google-wallet/ \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'Idempotency-Key: your-unique-attempt-key' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"country\": \"USA\",\n  \"vendor_data\": \"your-customer-reference\",\n  \"metadata\": {\n    \"reference\": \"example\"\n  },\n  \"origin\": \"https://app.example.com\"\n}'"
          }
        ],
        "x-didit-wallet-id": "google_wallet"
      }
    },
    "/v3/session/{sessionId}/kyb/documents/": {
      "post": {
        "summary": "セッションにKYB書類をアップロード",
        "description": "1つ以上の法人書類(定款、株主名簿、設立証明書など)を、ホスト型ページではなく自社サーバーから、法人確認セッションのKYB書類ステップにアップロードします。Diditはホスト型と同じパイプライン(圧縮、OCR、改ざんチェックと書類間の照合チェック、書類のグループ化)を実行し、必要な書類グループがそろった時点でセッションを先に進めます。このステップは、送信するファイル数にかかわらず一律の料金がかかります。セッションが開いていてKYB書類ステップにあり、かつ法人登記ステップで選択された企業が存在している必要があります。書類に記載された人物は`GET /v3/session/{sessionId}/kyb/extracted-parties/`で取得できます。`write:businesses`が必要です。",
        "operationId": "post_v3_session_kyb_documents",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "upload_kyb_documents",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "documents"
                ],
                "properties": {
                  "documents": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    },
                    "description": "アップロードするファイル:JPG、JPEG、PNG、TIFF、WEBP、PDF、またはそれらのZIPアーカイブ。PDFは50MBまで、写真は圧縮前で6MBまでです。"
                  },
                  "document_passwords": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "`documents`内のファイルごとに同じ順序で1エントリー。保護されたPDFのパスワードを指定し、それ以外のファイルの場合は空にします。"
                  },
                  "document_group": {
                    "type": "string",
                    "enum": [
                      "LEGAL_PRESENCE",
                      "COMPANY_DETAILS",
                      "OWNERSHIP_STRUCTURE",
                      "REPRESENTATIVES_AUTHORIZATION"
                    ],
                    "description": "このアップロードが対応する必須書類グループ。"
                  },
                  "locale": {
                    "type": "string",
                    "maxLength": 10,
                    "description": "次のステップのレスポンスを翻訳するために使用するロケール。"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "書類を処理しました。必須グループがすべて満たされるとセッションが次に進み、`next_step`が次のステップを示します。満たされていない場合は「書類」ステップにとどまり、`document_groups`と`document_answer`で不足しているものが示されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "valid": {
                      "type": "boolean"
                    },
                    "next_step": {
                      "type": "string",
                      "nullable": true,
                      "description": "アップロード後のセッションの現在のステップ。"
                    },
                    "kyb_status": {
                      "type": "string",
                      "description": "企業チェックのステータス。"
                    },
                    "document_answer": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "アップロードされた書類ごとの結果と、残りのアップロード回数。"
                    }
                  },
                  "additionalProperties": true
                },
                "example": {
                  "valid": true,
                  "next_step": "KYB_KEY_PEOPLE",
                  "kyb_status": "In Progress"
                }
              }
            }
          },
          "400": {
            "description": "書類が却下された(改ざん、判読不能、または非対応)か、セッションにまだKYBの会社がありません。試行回数が残っている間は、別のファイルで再試行してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "message": "No KYB company found. Submit company data first."
                }
              }
            }
          },
          "402": {
            "description": "書類ステップに使用できるクレジットが組織に残っていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Insufficient credits."
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、別のアプリケーションに属している、またはスコープ付きキーの制限外です。これらを区別する詳細は返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          },
          "409": {
            "description": "セッションが終了している（`kyb_session_not_writable`）か、KYB書類ステップにありません（`kyb_step_mismatch`。`next_step`に現在のステップ名が示されます）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string"
                    },
                    "next_step": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "The session is not on the step this operation completes.",
                  "code": "kyb_step_mismatch",
                  "next_step": "KYB_REGISTRY"
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.upload_kyb_documents(\n    \"33333333-4444-5555-6666-777777777777\",\n    documents=[open(\"document.pdf\", \"rb\")],\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit, { fileFromPath } from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.uploadKybDocuments(\"33333333-4444-5555-6666-777777777777\", {\n  documents: [await fileFromPath(\"document.pdf\")],\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UploadKYBDocuments(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsUploadKYBDocumentsParams{\n\tDocuments: []didit.File{didit.FileFromPath(\"document.pdf\")},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.nio.file.Path;\nimport java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.SessionsUploadKybDocumentsParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().uploadKybDocuments(\"33333333-4444-5555-6666-777777777777\", SessionsUploadKybDocumentsParams.builder()\n        .documents(List.of(Path.of(\"document.pdf\")))\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\nuse Didit\\File;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->uploadKybDocuments('33333333-4444-5555-6666-777777777777', [\n    'documents' => [File::fromPath('document.pdf')],\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.upload_kyb_documents(\n  \"33333333-4444-5555-6666-777777777777\",\n  documents: [Pathname(\"document.pdf\")]\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UploadKybDocumentsAsync(\"33333333-4444-5555-6666-777777777777\", new SessionsUploadKybDocumentsParams\n{\n    Documents = new FileUpload[] { FileUpload.FromPath(\"document.pdf\") },\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/extracted-parties/": {
      "get": {
        "summary": "アップロードされた書類に記載された当事者を一覧表示",
        "description": "このKYBセッションにアップロードされた書類に記載されている株主と取締役を、人物ごとに統合し、その人物を記載した書類に紐づけて返します。申請者に提示して確認してもらい、その後パーティのドラフトエンドポイントで申告してください。範囲は範囲のまま保持されます。`ownership_percent.text`には記載どおりの数値が、`min` / `max`にはそこから読み取った数値が入ります。ここでは誰もUBOとして分類されません。UBOかどうかは、パーティの送信時に、ワークフローの役割設定と所有構造のしきい値に基づいて判断されます。同じリストは、セッションの判定に`document_verifications[].extracted_parties`として含まれています。`read:businesses`または`read:sessions`が必要です。",
        "operationId": "get_v3_session_kyb_extracted_parties",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list_kyb_extracted_parties",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "現在の書類に記載されている関係者。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "parties",
                    "document_count"
                  ],
                  "properties": {
                    "parties": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "entity_type": {
                            "type": "string",
                            "enum": [
                              "person",
                              "company"
                            ]
                          },
                          "first_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "last_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "appointment_date": {
                            "type": "string",
                            "nullable": true
                          },
                          "designation": {
                            "type": "string",
                            "nullable": true
                          },
                          "roles": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "role": {
                                  "type": "string",
                                  "enum": [
                                    "director",
                                    "non_executive_director",
                                    "secretary",
                                    "chairman",
                                    "ubo",
                                    "shareholder",
                                    "representative",
                                    "founder",
                                    "legal_advisor",
                                    "authorized_signatory",
                                    "trustee",
                                    "beneficiary",
                                    "settlor",
                                    "protector",
                                    "company_officer",
                                    "investor",
                                    "other"
                                  ]
                                },
                                "ownership_percent": {
                                  "type": "object",
                                  "properties": {
                                    "text": {
                                      "type": "string",
                                      "nullable": true,
                                      "description": "`25-50%`、`>50%`、`NO EXHIBE`など、書類に記載されているとおりの所有比率。"
                                    },
                                    "min": {
                                      "type": "number",
                                      "nullable": true,
                                      "description": "`text`から読み取った小さい方の数値。記載がない場合はnullです。"
                                    },
                                    "max": {
                                      "type": "number",
                                      "nullable": true,
                                      "description": "`text`から読み取った上限の数値。記載がない場合はnullです。"
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "documents": {
                            "type": "array",
                            "description": "この当事者を記載していたアップロード済みの書類。",
                            "items": {
                              "type": "object",
                              "properties": {
                                "document_uuid": {
                                  "type": "string",
                                  "format": "uuid"
                                },
                                "document_type": {
                                  "type": "string",
                                  "nullable": true
                                },
                                "document_subtype": {
                                  "type": "string",
                                  "nullable": true
                                },
                                "original_filename": {
                                  "type": "string",
                                  "nullable": true
                                },
                                "status": {
                                  "type": "string",
                                  "nullable": true
                                }
                              }
                            }
                          }
                        }
                      },
                      "description": "アップロードされた書類に記載された株主と取締役を、人物ごとにまとめたものです。ここでは誰もUBOとして分類されません。UBOかどうかは当事者の提出時に決定されます。"
                    },
                    "document_count": {
                      "type": "integer",
                      "description": "リストの読み取り元となったアップロード済み書類の数です。"
                    },
                    "node_id": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                },
                "example": {
                  "parties": [
                    {
                      "name": "Ana Lopez",
                      "entity_type": "person",
                      "first_name": "Ana",
                      "last_name": "Lopez",
                      "appointment_date": null,
                      "designation": "Administrador unico",
                      "roles": [
                        {
                          "role": "shareholder",
                          "ownership_percent": {
                            "text": "60%",
                            "min": 60,
                            "max": 60
                          }
                        }
                      ],
                      "documents": [
                        {
                          "document_uuid": "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41",
                          "document_type": "OWNERSHIP_STRUCTURE",
                          "document_subtype": "ARTICLES_OF_INCORPORATION",
                          "original_filename": "acta_constitutiva.pdf",
                          "status": "Approved"
                        }
                      ]
                    }
                  ],
                  "document_count": 1,
                  "node_id": "node_kyb_documents"
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、別のアプリケーションに属している、またはスコープ付きキーの制限外です。これらを区別する詳細は返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.list_kyb_extracted_parties(\n    \"33333333-4444-5555-6666-777777777777\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.listKybExtractedParties(\"33333333-4444-5555-6666-777777777777\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ListKYBExtractedParties(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsListKYBExtractedPartiesParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().listKybExtractedParties(\"33333333-4444-5555-6666-777777777777\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->listKybExtractedParties('33333333-4444-5555-6666-777777777777');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.list_kyb_extracted_parties(\"33333333-4444-5555-6666-777777777777\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ListKybExtractedPartiesAsync(\"33333333-4444-5555-6666-777777777777\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/parties/drafts/": {
      "get": {
        "summary": "KYB関係者の下書きを一覧表示",
        "description": "このKYBセッション用に準備中の当事者を古い順に一覧表示します。下書きは申告済みの当事者ではありません。`POST /v3/session/{sessionId}/kyb/parties/submit/`で送信するまで、判定やコンソールには表示されず、認証セッションも作成されません。`write:businesses`が必要です。",
        "operationId": "get_v3_session_kyb_party_drafts",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "list_kyb_party_drafts",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "保存された下書き。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "parties": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "draft_id",
                          "created_at",
                          "updated_at",
                          "party"
                        ],
                        "properties": {
                          "draft_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "updated_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "party": {
                            "type": "object",
                            "required": [
                              "entity_type",
                              "nationality"
                            ],
                            "properties": {
                              "entity_type": {
                                "type": "string",
                                "enum": [
                                  "person",
                                  "company"
                                ],
                                "description": "当事者が個人か企業か。"
                              },
                              "full_name": {
                                "type": "string",
                                "maxLength": 255,
                                "description": "人物の氏名。これを送信するか、`first_name`と`last_name`を送信してください。"
                              },
                              "first_name": {
                                "type": "string",
                                "maxLength": 128
                              },
                              "last_name": {
                                "type": "string",
                                "maxLength": 128
                              },
                              "role": {
                                "type": "string",
                                "enum": [
                                  "director",
                                  "non_executive_director",
                                  "secretary",
                                  "chairman",
                                  "ubo",
                                  "shareholder",
                                  "representative",
                                  "founder",
                                  "legal_advisor",
                                  "authorized_signatory",
                                  "trustee",
                                  "beneficiary",
                                  "settlor",
                                  "protector",
                                  "company_officer",
                                  "investor",
                                  "other"
                                ],
                                "description": "当事者が持つ役割。`roles`と互換性があり、両方が送信された場合は統合されます。"
                              },
                              "roles": {
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "director",
                                    "non_executive_director",
                                    "secretary",
                                    "chairman",
                                    "ubo",
                                    "shareholder",
                                    "representative",
                                    "founder",
                                    "legal_advisor",
                                    "authorized_signatory",
                                    "trustee",
                                    "beneficiary",
                                    "settlor",
                                    "protector",
                                    "company_officer",
                                    "investor",
                                    "other"
                                  ]
                                },
                                "description": "当事者が持つすべての役割です。個人には少なくとも1つの役割(ここまたは`role`で指定)が必要です。"
                              },
                              "position": {
                                "type": "string",
                                "maxLength": 128,
                                "description": "人物の役職。"
                              },
                              "date_of_birth": {
                                "type": "string",
                                "format": "date",
                                "nullable": true
                              },
                              "company_name": {
                                "type": "string",
                                "maxLength": 255,
                                "description": "企業当事者の名称。`entity_type`が`company`の場合は必須です。"
                              },
                              "registration_number": {
                                "type": "string",
                                "maxLength": 100,
                                "description": "企業当事者の登記番号。"
                              },
                              "email": {
                                "type": "string",
                                "format": "email",
                                "description": "認証リンクの送信先です。当事者が検証を完了する必要がある場合は必須です。これはワークフローの役割設定と所有構造のしきい値によって決まります。"
                              },
                              "ownership_percent": {
                                "type": "number",
                                "nullable": true,
                                "description": "当事者が保有する会社の持分割合。"
                              },
                              "nationality": {
                                "type": "string",
                                "maxLength": 100,
                                "description": "個人の国籍、または企業の設立国。すべての当事者で必須です。"
                              },
                              "phone_number": {
                                "type": "string",
                                "maxLength": 32
                              },
                              "custom_fields": {
                                "type": "object",
                                "additionalProperties": true,
                                "description": "ワークフローで定義された追加フィールド。"
                              },
                              "skip_verification": {
                                "type": "boolean",
                                "default": false,
                                "description": "この当事者の認証のスキップを申請します。ワークフローの主要人物設定で、当事者の役割にスキップが許可されている場合にのみ受け付けられます。"
                              }
                            }
                          }
                        }
                      }
                    },
                    "node_id": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                },
                "example": {
                  "parties": [
                    {
                      "draft_id": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
                      "created_at": "2026-10-31T10:00:00Z",
                      "updated_at": "2026-10-31T10:00:00Z",
                      "party": {
                        "entity_type": "person",
                        "first_name": "Ana",
                        "last_name": "Lopez",
                        "roles": [
                          "ubo",
                          "director"
                        ],
                        "ownership_percent": 60,
                        "nationality": "MEX",
                        "email": "ana.lopez@example.com",
                        "date_of_birth": "1984-06-12"
                      }
                    }
                  ],
                  "node_id": "node_kyb_key_people"
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、別のアプリケーションに属している、またはスコープ付きキーの制限外です。これらを区別する詳細は返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.list_kyb_party_drafts(\n    \"33333333-4444-5555-6666-777777777777\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.listKybPartyDrafts(\"33333333-4444-5555-6666-777777777777\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ListKYBPartyDrafts(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsListKYBPartyDraftsParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().listKybPartyDrafts(\"33333333-4444-5555-6666-777777777777\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->listKybPartyDrafts('33333333-4444-5555-6666-777777777777');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.list_kyb_party_drafts(\"33333333-4444-5555-6666-777777777777\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ListKybPartyDraftsAsync(\"33333333-4444-5555-6666-777777777777\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "post": {
        "summary": "KYBパーティの下書きを作成",
        "description": "このKYBセッション用に準備しているリストに、関係者（個人または企業）を追加します。ホスト型の主要人物画面と同じフィールドとルールが適用されます。個人には`full_name`、または`first_name`と`last_name`、少なくとも1つの役割、国籍が必要です。企業には`company_name`と、`nationality`に設立国が必要です。`POST /v3/session/{sessionId}/kyb/parties/submit/`を呼び出すまで、申告も請求も行われません。`write:businesses`が必要です。",
        "operationId": "post_v3_session_kyb_party_drafts",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "create_kyb_party_draft",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "entity_type",
                  "nationality"
                ],
                "properties": {
                  "entity_type": {
                    "type": "string",
                    "enum": [
                      "person",
                      "company"
                    ],
                    "description": "当事者が個人か企業か。"
                  },
                  "full_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "人物の氏名。これを送信するか、`first_name`と`last_name`を送信してください。"
                  },
                  "first_name": {
                    "type": "string",
                    "maxLength": 128
                  },
                  "last_name": {
                    "type": "string",
                    "maxLength": 128
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "director",
                      "non_executive_director",
                      "secretary",
                      "chairman",
                      "ubo",
                      "shareholder",
                      "representative",
                      "founder",
                      "legal_advisor",
                      "authorized_signatory",
                      "trustee",
                      "beneficiary",
                      "settlor",
                      "protector",
                      "company_officer",
                      "investor",
                      "other"
                    ],
                    "description": "当事者が持つ役割。`roles`と互換性があり、両方が送信された場合は統合されます。"
                  },
                  "roles": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "director",
                        "non_executive_director",
                        "secretary",
                        "chairman",
                        "ubo",
                        "shareholder",
                        "representative",
                        "founder",
                        "legal_advisor",
                        "authorized_signatory",
                        "trustee",
                        "beneficiary",
                        "settlor",
                        "protector",
                        "company_officer",
                        "investor",
                        "other"
                      ]
                    },
                    "description": "当事者が持つすべての役割です。個人には少なくとも1つの役割(ここまたは`role`で指定)が必要です。"
                  },
                  "position": {
                    "type": "string",
                    "maxLength": 128,
                    "description": "人物の役職。"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "nullable": true
                  },
                  "company_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "企業当事者の名称。`entity_type`が`company`の場合は必須です。"
                  },
                  "registration_number": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "企業当事者の登記番号。"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "認証リンクの送信先です。当事者が検証を完了する必要がある場合は必須です。これはワークフローの役割設定と所有構造のしきい値によって決まります。"
                  },
                  "ownership_percent": {
                    "type": "number",
                    "nullable": true,
                    "description": "当事者が保有する会社の持分割合。"
                  },
                  "nationality": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "個人の国籍、または企業の設立国。すべての当事者で必須です。"
                  },
                  "phone_number": {
                    "type": "string",
                    "maxLength": 32
                  },
                  "custom_fields": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "ワークフローで定義された追加フィールド。"
                  },
                  "skip_verification": {
                    "type": "boolean",
                    "default": false,
                    "description": "この当事者の認証のスキップを申請します。ワークフローの主要人物設定で、当事者の役割にスキップが許可されている場合にのみ受け付けられます。"
                  }
                }
              },
              "example": {
                "entity_type": "person",
                "first_name": "Ana",
                "last_name": "Lopez",
                "roles": [
                  "ubo",
                  "director"
                ],
                "ownership_percent": 60,
                "nationality": "MEX",
                "email": "ana.lopez@example.com",
                "date_of_birth": "1984-06-12"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "ドラフトを作成しました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "draft_id",
                    "created_at",
                    "updated_at",
                    "party"
                  ],
                  "properties": {
                    "draft_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "party": {
                      "type": "object",
                      "required": [
                        "entity_type",
                        "nationality"
                      ],
                      "properties": {
                        "entity_type": {
                          "type": "string",
                          "enum": [
                            "person",
                            "company"
                          ],
                          "description": "当事者が個人か企業か。"
                        },
                        "full_name": {
                          "type": "string",
                          "maxLength": 255,
                          "description": "人物の氏名。これを送信するか、`first_name`と`last_name`を送信してください。"
                        },
                        "first_name": {
                          "type": "string",
                          "maxLength": 128
                        },
                        "last_name": {
                          "type": "string",
                          "maxLength": 128
                        },
                        "role": {
                          "type": "string",
                          "enum": [
                            "director",
                            "non_executive_director",
                            "secretary",
                            "chairman",
                            "ubo",
                            "shareholder",
                            "representative",
                            "founder",
                            "legal_advisor",
                            "authorized_signatory",
                            "trustee",
                            "beneficiary",
                            "settlor",
                            "protector",
                            "company_officer",
                            "investor",
                            "other"
                          ],
                          "description": "当事者が持つ役割。`roles`と互換性があり、両方が送信された場合は統合されます。"
                        },
                        "roles": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "director",
                              "non_executive_director",
                              "secretary",
                              "chairman",
                              "ubo",
                              "shareholder",
                              "representative",
                              "founder",
                              "legal_advisor",
                              "authorized_signatory",
                              "trustee",
                              "beneficiary",
                              "settlor",
                              "protector",
                              "company_officer",
                              "investor",
                              "other"
                            ]
                          },
                          "description": "当事者が持つすべての役割です。個人には少なくとも1つの役割(ここまたは`role`で指定)が必要です。"
                        },
                        "position": {
                          "type": "string",
                          "maxLength": 128,
                          "description": "人物の役職。"
                        },
                        "date_of_birth": {
                          "type": "string",
                          "format": "date",
                          "nullable": true
                        },
                        "company_name": {
                          "type": "string",
                          "maxLength": 255,
                          "description": "企業当事者の名称。`entity_type`が`company`の場合は必須です。"
                        },
                        "registration_number": {
                          "type": "string",
                          "maxLength": 100,
                          "description": "企業当事者の登記番号。"
                        },
                        "email": {
                          "type": "string",
                          "format": "email",
                          "description": "認証リンクの送信先です。当事者が検証を完了する必要がある場合は必須です。これはワークフローの役割設定と所有構造のしきい値によって決まります。"
                        },
                        "ownership_percent": {
                          "type": "number",
                          "nullable": true,
                          "description": "当事者が保有する会社の持分割合。"
                        },
                        "nationality": {
                          "type": "string",
                          "maxLength": 100,
                          "description": "個人の国籍、または企業の設立国。すべての当事者で必須です。"
                        },
                        "phone_number": {
                          "type": "string",
                          "maxLength": 32
                        },
                        "custom_fields": {
                          "type": "object",
                          "additionalProperties": true,
                          "description": "ワークフローで定義された追加フィールド。"
                        },
                        "skip_verification": {
                          "type": "boolean",
                          "default": false,
                          "description": "この当事者の認証のスキップを申請します。ワークフローの主要人物設定で、当事者の役割にスキップが許可されている場合にのみ受け付けられます。"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "draft_id": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
                  "created_at": "2026-10-31T10:00:00Z",
                  "updated_at": "2026-10-31T10:00:00Z",
                  "party": {
                    "entity_type": "person",
                    "first_name": "Ana",
                    "last_name": "Lopez",
                    "roles": [
                      "ubo",
                      "director"
                    ],
                    "ownership_percent": 60,
                    "nationality": "MEX",
                    "email": "ana.lopez@example.com",
                    "date_of_birth": "1984-06-12"
                  }
                }
              }
            }
          },
          "400": {
            "description": "当事者のフィールドが無効か、必須のフィールドが欠落しています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "non_field_errors": [
                    "Person parties require at least one role."
                  ]
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、別のアプリケーションに属している、またはスコープ付きキーの制限外です。これらを区別する詳細は返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          },
          "409": {
            "description": "セッションが終了しています（`kyb_session_not_writable`）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "This verification session is no longer accepting changes.",
                  "code": "kyb_session_not_writable"
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.create_kyb_party_draft(\n    \"33333333-4444-5555-6666-777777777777\",\n    entity_type=\"person\",\n    first_name=\"Ana\",\n    last_name=\"Lopez\",\n    roles=[\"ubo\", \"director\"],\n    date_of_birth=\"1984-06-12\",\n    email=\"ana.lopez@example.com\",\n    ownership_percent=60.0,\n    nationality=\"MEX\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.createKybPartyDraft(\"33333333-4444-5555-6666-777777777777\", {\n  entity_type: \"person\",\n  first_name: \"Ana\",\n  last_name: \"Lopez\",\n  roles: [\"ubo\", \"director\"],\n  date_of_birth: \"1984-06-12\",\n  email: \"ana.lopez@example.com\",\n  ownership_percent: 60.0,\n  nationality: \"MEX\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.CreateKYBPartyDraft(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsCreateKYBPartyDraftParams{\n\tEntityType:       \"person\",\n\tFirstName:        didit.String(\"Ana\"),\n\tLastName:         didit.String(\"Lopez\"),\n\tRoles:            didit.Some([]didit.SessionsCreateKYBPartyDraftParamsRoles{\"ubo\", \"director\"}),\n\tDateOfBirth:      didit.String(\"1984-06-12\"),\n\tEmail:            didit.String(\"ana.lopez@example.com\"),\n\tOwnershipPercent: didit.Float(60.0),\n\tNationality:      \"MEX\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import java.time.LocalDate;\nimport java.util.List;\nimport me.didit.Didit;\nimport me.didit.types.SessionsCreateKybPartyDraftParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().createKybPartyDraft(\"33333333-4444-5555-6666-777777777777\", SessionsCreateKybPartyDraftParams.builder()\n        .entityType(SessionsCreateKybPartyDraftParams.EntityType.of(\"person\"))\n        .firstName(\"Ana\")\n        .lastName(\"Lopez\")\n        .roles(List.of(SessionsCreateKybPartyDraftParams.Roles.of(\"ubo\"), SessionsCreateKybPartyDraftParams.Roles.of(\"director\")))\n        .dateOfBirth(LocalDate.parse(\"1984-06-12\"))\n        .email(\"ana.lopez@example.com\")\n        .ownershipPercent(60.0)\n        .nationality(\"MEX\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->createKybPartyDraft('33333333-4444-5555-6666-777777777777', [\n    'entity_type' => 'person',\n    'first_name' => 'Ana',\n    'last_name' => 'Lopez',\n    'roles' => ['ubo', 'director'],\n    'date_of_birth' => '1984-06-12',\n    'email' => 'ana.lopez@example.com',\n    'ownership_percent' => 60.0,\n    'nationality' => 'MEX',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.create_kyb_party_draft(\n  \"33333333-4444-5555-6666-777777777777\",\n  entity_type: \"person\",\n  first_name: \"Ana\",\n  last_name: \"Lopez\",\n  roles: [\"ubo\", \"director\"],\n  date_of_birth: \"1984-06-12\",\n  email: \"ana.lopez@example.com\",\n  ownership_percent: 60.0,\n  nationality: \"MEX\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.CreateKybPartyDraftAsync(\"33333333-4444-5555-6666-777777777777\", new SessionsCreateKybPartyDraftParams\n{\n    EntityType = \"person\",\n    FirstName = \"Ana\",\n    LastName = \"Lopez\",\n    Roles = new SessionsCreateKybPartyDraftParamsRoles[] { \"ubo\", \"director\" },\n    DateOfBirth = \"1984-06-12\",\n    Email = \"ana.lopez@example.com\",\n    OwnershipPercent = 60.0,\n    Nationality = \"MEX\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/parties/drafts/{draftId}/": {
      "patch": {
        "summary": "KYB関係者の下書きを編集",
        "description": "当事者ドラフト1件のフィールドを変更します。変更内容は保存済みのドラフトにマージされ、マージ後の当事者全体が検証されるため、当事者が不完全な状態になる変更は拒否されます。`first_name`または`last_name`を変更すると、保存済みの氏名が置き換えられます。`write:businesses`が必要です。",
        "operationId": "patch_v3_session_kyb_party_draft",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "update_kyb_party_draft",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "draftId",
            "in": "path",
            "required": true,
            "description": "当事者ドラフトのUUID(作成時に返される`draft_id`)。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "当事者フィールドの任意のサブセット。編集内容は保存済みのドラフトにマージされ、マージ後の当事者全体として検証されるため、編集前に送信可能だったドラフトは編集後も送信できます。",
                "properties": {
                  "entity_type": {
                    "type": "string",
                    "enum": [
                      "person",
                      "company"
                    ],
                    "description": "当事者が個人か企業か。"
                  },
                  "full_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "人物の氏名。これを送信するか、`first_name`と`last_name`を送信してください。"
                  },
                  "first_name": {
                    "type": "string",
                    "maxLength": 128
                  },
                  "last_name": {
                    "type": "string",
                    "maxLength": 128
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "director",
                      "non_executive_director",
                      "secretary",
                      "chairman",
                      "ubo",
                      "shareholder",
                      "representative",
                      "founder",
                      "legal_advisor",
                      "authorized_signatory",
                      "trustee",
                      "beneficiary",
                      "settlor",
                      "protector",
                      "company_officer",
                      "investor",
                      "other"
                    ],
                    "description": "当事者が持つ役割。`roles`と互換性があり、両方が送信された場合は統合されます。"
                  },
                  "roles": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "director",
                        "non_executive_director",
                        "secretary",
                        "chairman",
                        "ubo",
                        "shareholder",
                        "representative",
                        "founder",
                        "legal_advisor",
                        "authorized_signatory",
                        "trustee",
                        "beneficiary",
                        "settlor",
                        "protector",
                        "company_officer",
                        "investor",
                        "other"
                      ]
                    },
                    "description": "当事者が持つすべての役割です。個人には少なくとも1つの役割(ここまたは`role`で指定)が必要です。"
                  },
                  "position": {
                    "type": "string",
                    "maxLength": 128,
                    "description": "人物の役職。"
                  },
                  "date_of_birth": {
                    "type": "string",
                    "format": "date",
                    "nullable": true
                  },
                  "company_name": {
                    "type": "string",
                    "maxLength": 255,
                    "description": "企業当事者の名称。`entity_type`が`company`の場合は必須です。"
                  },
                  "registration_number": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "企業当事者の登記番号。"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "認証リンクの送信先です。当事者が検証を完了する必要がある場合は必須です。これはワークフローの役割設定と所有構造のしきい値によって決まります。"
                  },
                  "ownership_percent": {
                    "type": "number",
                    "nullable": true,
                    "description": "当事者が保有する会社の持分割合。"
                  },
                  "nationality": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "個人の国籍、または企業の設立国。すべての当事者で必須です。"
                  },
                  "phone_number": {
                    "type": "string",
                    "maxLength": 32
                  },
                  "custom_fields": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "ワークフローで定義された追加フィールド。"
                  },
                  "skip_verification": {
                    "type": "boolean",
                    "default": false,
                    "description": "この当事者の認証のスキップを申請します。ワークフローの主要人物設定で、当事者の役割にスキップが許可されている場合にのみ受け付けられます。"
                  }
                }
              },
              "example": {
                "ownership_percent": 55
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ドラフトを更新しました。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "draft_id",
                    "created_at",
                    "updated_at",
                    "party"
                  ],
                  "properties": {
                    "draft_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "party": {
                      "type": "object",
                      "required": [
                        "entity_type",
                        "nationality"
                      ],
                      "properties": {
                        "entity_type": {
                          "type": "string",
                          "enum": [
                            "person",
                            "company"
                          ],
                          "description": "当事者が個人か企業か。"
                        },
                        "full_name": {
                          "type": "string",
                          "maxLength": 255,
                          "description": "人物の氏名。これを送信するか、`first_name`と`last_name`を送信してください。"
                        },
                        "first_name": {
                          "type": "string",
                          "maxLength": 128
                        },
                        "last_name": {
                          "type": "string",
                          "maxLength": 128
                        },
                        "role": {
                          "type": "string",
                          "enum": [
                            "director",
                            "non_executive_director",
                            "secretary",
                            "chairman",
                            "ubo",
                            "shareholder",
                            "representative",
                            "founder",
                            "legal_advisor",
                            "authorized_signatory",
                            "trustee",
                            "beneficiary",
                            "settlor",
                            "protector",
                            "company_officer",
                            "investor",
                            "other"
                          ],
                          "description": "当事者が持つ役割。`roles`と互換性があり、両方が送信された場合は統合されます。"
                        },
                        "roles": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "director",
                              "non_executive_director",
                              "secretary",
                              "chairman",
                              "ubo",
                              "shareholder",
                              "representative",
                              "founder",
                              "legal_advisor",
                              "authorized_signatory",
                              "trustee",
                              "beneficiary",
                              "settlor",
                              "protector",
                              "company_officer",
                              "investor",
                              "other"
                            ]
                          },
                          "description": "当事者が持つすべての役割です。個人には少なくとも1つの役割(ここまたは`role`で指定)が必要です。"
                        },
                        "position": {
                          "type": "string",
                          "maxLength": 128,
                          "description": "人物の役職。"
                        },
                        "date_of_birth": {
                          "type": "string",
                          "format": "date",
                          "nullable": true
                        },
                        "company_name": {
                          "type": "string",
                          "maxLength": 255,
                          "description": "企業当事者の名称。`entity_type`が`company`の場合は必須です。"
                        },
                        "registration_number": {
                          "type": "string",
                          "maxLength": 100,
                          "description": "企業当事者の登記番号。"
                        },
                        "email": {
                          "type": "string",
                          "format": "email",
                          "description": "認証リンクの送信先です。当事者が検証を完了する必要がある場合は必須です。これはワークフローの役割設定と所有構造のしきい値によって決まります。"
                        },
                        "ownership_percent": {
                          "type": "number",
                          "nullable": true,
                          "description": "当事者が保有する会社の持分割合。"
                        },
                        "nationality": {
                          "type": "string",
                          "maxLength": 100,
                          "description": "個人の国籍、または企業の設立国。すべての当事者で必須です。"
                        },
                        "phone_number": {
                          "type": "string",
                          "maxLength": 32
                        },
                        "custom_fields": {
                          "type": "object",
                          "additionalProperties": true,
                          "description": "ワークフローで定義された追加フィールド。"
                        },
                        "skip_verification": {
                          "type": "boolean",
                          "default": false,
                          "description": "この当事者の認証のスキップを申請します。ワークフローの主要人物設定で、当事者の役割にスキップが許可されている場合にのみ受け付けられます。"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "draft_id": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
                  "created_at": "2026-10-31T10:00:00Z",
                  "updated_at": "2026-10-31T10:00:00Z",
                  "party": {
                    "entity_type": "person",
                    "first_name": "Ana",
                    "last_name": "Lopez",
                    "roles": [
                      "ubo",
                      "director"
                    ],
                    "ownership_percent": 55,
                    "nationality": "MEX",
                    "email": "ana.lopez@example.com",
                    "date_of_birth": "1984-06-12"
                  }
                }
              }
            }
          },
          "400": {
            "description": "マージされた当事者が無効です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "non_field_errors": [
                    "Person parties require at least one role."
                  ]
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションまたは下書きが存在しないか、セッションがキーのアプリケーション外、またはスコープ付きキーの制限外です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          },
          "409": {
            "description": "セッションが終了しています（`kyb_session_not_writable`）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "This verification session is no longer accepting changes.",
                  "code": "kyb_session_not_writable"
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.update_kyb_party_draft(\n    \"33333333-4444-5555-6666-777777777777\",\n    \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\",\n    ownership_percent=55.0,\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.updateKybPartyDraft(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\",\n  {\n    ownership_percent: 55.0,\n  },\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateKYBPartyDraft(ctx, \"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\", didit.SessionsUpdateKYBPartyDraftParams{\n\tOwnershipPercent: didit.Float(55.0),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsUpdateKybPartyDraftParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().updateKybPartyDraft(\"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\", SessionsUpdateKybPartyDraftParams.builder()\n        .ownershipPercent(55.0)\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->updateKybPartyDraft('33333333-4444-5555-6666-777777777777', '5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d', [\n    'ownership_percent' => 55.0,\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.update_kyb_party_draft(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\",\n  ownership_percent: 55.0\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.UpdateKybPartyDraftAsync(\"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\", new SessionsUpdateKybPartyDraftParams\n{\n    OwnershipPercent = 55.0,\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      },
      "delete": {
        "summary": "KYB当事者の下書きを削除",
        "description": "当事者のドラフトを1件削除します。申告済みの当事者には影響しません。`write:businesses`が必要です。",
        "operationId": "delete_v3_session_kyb_party_draft",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "delete_kyb_party_draft",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "draftId",
            "in": "path",
            "required": true,
            "description": "当事者ドラフトのUUID(作成時に返される`draft_id`)。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "ドラフトを削除しました。ボディはありません。"
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションまたは下書きが存在しないか、セッションがキーのアプリケーション外、またはスコープ付きキーの制限外です。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          },
          "409": {
            "description": "セッションが終了しています（`kyb_session_not_writable`）。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "This verification session is no longer accepting changes.",
                  "code": "kyb_session_not_writable"
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nclient.sessions.delete_kyb_party_draft(\n    \"33333333-4444-5555-6666-777777777777\",\n    \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\",\n)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nawait didit.sessions.deleteKybPartyDraft(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\",\n);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nif err := client.Sessions.DeleteKYBPartyDraft(ctx, \"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\", didit.SessionsDeleteKYBPartyDraftParams{}); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nclient.sessions().deleteKybPartyDraft(\"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\");"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$didit->sessions->deleteKybPartyDraft('33333333-4444-5555-6666-777777777777', '5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d');"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.sessions.delete_kyb_party_draft(\n  \"33333333-4444-5555-6666-777777777777\",\n  \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\"\n)"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait client.Sessions.DeleteKybPartyDraftAsync(\"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\");"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/kyb/parties/submit/": {
      "post": {
        "summary": "KYBの関係者ドラフトを送信する",
        "description": "保存済みのドラフトを企業の主要人物として宣言します。これはAPIキーで実行するホスト型の主要人物ステップです。Diditはワークフローの役割設定と所有構造のしきい値から検証が必要な関係者を判断し、それぞれについて個人のKYCセッション（法人の所有者の場合はKYBサブセッション）を1件作成し、ワークフローが求めるメールを送信して、セッションを進めます。各子セッションはホスト型フローと同様に請求されます。ドラフトは消費されます。送信が成功した後に呼び出しを繰り返しても何も変更されず、`200`で`already_submitted: true`と既存の関係者を返します。セッションは主要人物ステップにある必要があります。各人物の`kyc_session_url`を本人に送信するか、埋め込んでください。`write:businesses`が必要です。",
        "operationId": "post_v3_session_kyb_parties_submit",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "submit_kyb_parties",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "法人確認 (KYB) セッションのUUIDです。APIキーのアプリケーションに属している必要があります。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "33333333-4444-5555-6666-777777777777"
            }
          },
          {
            "name": "node_id",
            "in": "query",
            "required": false,
            "description": "KYBステップのワークフローノード。ワークフローに複数のKYBノードがある場合にのみ必要です。デフォルトでは、Diditはセッション自身のノードを使用します。",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "locale": {
                    "type": "string",
                    "maxLength": 10,
                    "description": "セッションの移行先となるステップのレスポンスを翻訳するために使用するロケール。"
                  }
                }
              },
              "example": {
                "locale": "es"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "申告された（または既に申告済みの）関係者。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "valid": {
                      "type": "boolean"
                    },
                    "next_step": {
                      "type": "string",
                      "nullable": true,
                      "description": "セッションの現在のステップ。"
                    },
                    "status": {
                      "type": "string",
                      "description": "企業セッションのステータス。"
                    },
                    "advanced": {
                      "type": "boolean",
                      "description": "この呼び出しで当事者が申告され、セッションが次に進んだ場合は`true`です。"
                    },
                    "already_submitted": {
                      "type": "boolean",
                      "description": "当事者が以前の呼び出しで申告済みだった場合は`true`です。"
                    },
                    "kyb_key_people_status": {
                      "type": "string"
                    },
                    "parties": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/KYBKeyPeopleParty"
                      }
                    }
                  }
                },
                "example": {
                  "valid": true,
                  "next_step": "FINISHED",
                  "status": "In Progress",
                  "advanced": true,
                  "already_submitted": false,
                  "kyb_key_people_status": "In Progress",
                  "parties": []
                }
              }
            }
          },
          "402": {
            "description": "子検証セッションに使用できるクレジットが組織に残っていません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Insufficient credits."
                }
              }
            }
          },
          "401": {
            "description": "スコープ付きAPIキーの有効期限が切れています。`401`が返されるのはこの場合のみです。キーが指定されていない場合、無効な場合、または取り消されている場合は`403`が返されます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Expired key": {
                    "summary": "キーの有効期限が過ぎています",
                    "value": {
                      "detail": "This API key has expired."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "認証または認可に失敗しました。キーがない場合、別のアプリケーションのキーの場合、このエンドポイントに必要な権限を持たないスコープ付きキーの場合、キーのIP許可リスト外からのリクエストの場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。`detail`で区別してください。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Missing or invalid credentials": {
                    "summary": "x-api-keyヘッダーがないか、キーの検証に失敗しました",
                    "value": {
                      "detail": "Authentication credentials were not provided or are invalid."
                    }
                  },
                  "Other application": {
                    "summary": "セッションとは別のアプリケーションに属する有効なキー",
                    "value": {
                      "detail": "You do not have permission to perform this action."
                    }
                  },
                  "Scoped key without decisions write": {
                    "summary": "スコープ付きキーにdecisions: write権限がない",
                    "value": {
                      "detail": "This API key has no write access to decisions."
                    }
                  },
                  "IP not allowed": {
                    "summary": "キーのIP許可リスト外からのリクエスト",
                    "value": {
                      "detail": "This API key can't be used from this IP address."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "セッションが存在しない、削除されている、別のアプリケーションに属している、またはスコープ付きキーの制限外です。これらを区別する詳細は返されません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "example": {
                  "detail": "Session not found."
                }
              }
            }
          },
          "409": {
            "description": "`kyb_no_party_drafts`: 送信するものがありません。`kyb_parties_already_submitted`: 関係者の申告後に下書きが追加されました。`kyb_step_mismatch`: セッションが主要人物ステップにありません（`next_step`が現在のステップを示します）。`kyb_session_not_writable`: セッションは終了しています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    },
                    "code": {
                      "type": "string"
                    },
                    "next_step": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "There are no draft parties to submit.",
                  "code": "kyb_no_party_drafts"
                }
              }
            }
          },
          "429": {
            "description": "レート制限を超過しました。書き込み（POST、PATCH、DELETE）リクエストはAPIキーごとに1分あたり300件までです。`Retry-After`秒待ってから再試行してください。`X-RateLimit-*`ヘッダーで利用枠を確認できます。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string",
                      "description": "人が読めるエラーメッセージ。"
                    }
                  }
                },
                "examples": {
                  "Rate limited": {
                    "summary": "現在の1分間の上限を使い切りました",
                    "value": {
                      "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
                    }
                  }
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "再試行までに待機する秒数。",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "example": 30
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.submit_kyb_parties(\n    \"33333333-4444-5555-6666-777777777777\",\n    locale=\"es\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.submitKybParties(\"33333333-4444-5555-6666-777777777777\", {\n  locale: \"es\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.SubmitKYBParties(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsSubmitKYBPartiesParams{\n\tLocale: didit.String(\"es\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.SessionsSubmitKybPartiesParams;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().submitKybParties(\"33333333-4444-5555-6666-777777777777\", SessionsSubmitKybPartiesParams.builder()\n        .locale(\"es\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->submitKybParties('33333333-4444-5555-6666-777777777777', [\n    'locale' => 'es',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.submit_kyb_parties(\n  \"33333333-4444-5555-6666-777777777777\",\n  locale: \"es\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.SubmitKybPartiesAsync(\"33333333-4444-5555-6666-777777777777\", new SessionsSubmitKybPartiesParams\n{\n    Locale = \"es\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    },
    "/v3/session/{sessionId}/files-export/": {
      "post": {
        "summary": "セッションのすべてのファイルをエクスポート",
        "description": "ユーザー認証 (KYC)または法人確認 (KYB)のセッションに含まれるすべての画像、動画、書類を元の画質でまとめた1つのZIPの準備を開始します。ファイルは撮影時のままZIPに格納され、再圧縮されることはありません。エクスポートとともに`202`を返します。`status`が`READY`になるまで`GET /v3/session/{sessionId}/files-export/{exportId}/`で取得し、その後`download_url`をダウンロードしてください。同じセッションのエクスポートがまだ準備中の場合は、新しいエクスポートではなくそのエクスポートが返されます。\n\nZIPは準備完了から24時間後に削除され、セッションが削除された場合は即座に削除されます。削除されたセッションはエクスポートできません。すべてのエクスポートと発行されたすべてのダウンロードリンクは、セッションの監査ログに記録されます。スコープ付きAPIキーには`media: read`と`decisions: read`が必要です。コンソールユーザーにはセッションを閲覧する権限が必要です。",
        "operationId": "post_v3_session_files_export",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "export_files",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。削除されたセッションは`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X POST 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/files-export/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.export_files(\n    \"11111111-2222-3333-4444-555555555555\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.exportFiles(\"11111111-2222-3333-4444-555555555555\");\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ExportFiles(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().exportFiles(\"11111111-2222-3333-4444-555555555555\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->exportFiles('11111111-2222-3333-4444-555555555555');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.export_files(\"11111111-2222-3333-4444-555555555555\")\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.ExportFilesAsync(\"11111111-2222-3333-4444-555555555555\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "202": {
            "description": "準備中のエクスポートです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionFilesExport"
                },
                "example": {
                  "export_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                  "session_id": "11111111-2222-3333-4444-555555555555",
                  "status": "PENDING",
                  "file_count": null,
                  "size_bytes": null,
                  "download_url": null,
                  "expires_at": null,
                  "error": null,
                  "created_at": "2026-10-29T12:00:03Z",
                  "completed_at": null
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/session/{sessionId}/files-export/{exportId}/": {
      "get": {
        "summary": "セッションファイルのエクスポートを取得",
        "description": "`POST /v3/session/{sessionId}/files-export/`で開始したエクスポートの進捗です。`status`が`READY`になると、`download_url`はZIPの署名付きURLとなり、短時間のみ有効です。`expires_at`までは、エクスポートを再度読み取ることで新しいURLを取得できます。ダウンロードリンクを発行する読み取りは、すべてセッションの監査ログに記録されます。削除されたセッションのエクスポートは`404`を返します。",
        "operationId": "get_v3_session_files_export",
        "x-didit-sdk": {
          "resource": "sessions",
          "method": "get_files_export",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Sessions"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "検証セッションのUUID(`POST /v3/session/`が返す`session_id`)。ユーザー認証(KYC)と法人確認(KYB)の両方のセッションIDを受け付けます。削除されたセッションは`404`を返します。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "11111111-2222-3333-4444-555555555555"
            }
          },
          {
            "name": "exportId",
            "in": "path",
            "required": true,
            "description": "`POST /v3/session/{sessionId}/files-export/`が返した`export_id`です。",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
            }
          }
        ],
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl -X GET 'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/files-export/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/' \\\n  -H 'x-api-key: YOUR_API_KEY'"
          },
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.sessions.get_files_export(\n    \"11111111-2222-3333-4444-555555555555\",\n    \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.sessions.getFilesExport(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\n);\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.GetFilesExport(ctx, \"11111111-2222-3333-4444-555555555555\", \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.sessions().getFilesExport(\"11111111-2222-3333-4444-555555555555\", \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\");\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->sessions->getFilesExport('11111111-2222-3333-4444-555555555555', 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee');\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.sessions.get_files_export(\n  \"11111111-2222-3333-4444-555555555555\",\n  \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.Sessions.GetFilesExportAsync(\"11111111-2222-3333-4444-555555555555\", \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\");\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ],
        "responses": {
          "200": {
            "description": "エクスポートです。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionFilesExport"
                },
                "example": {
                  "export_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
                  "session_id": "11111111-2222-3333-4444-555555555555",
                  "status": "READY",
                  "file_count": 9,
                  "size_bytes": 18734120,
                  "download_url": "https://storage.example.com/session/11111111-2222-3333-4444-555555555555/files-export/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/session-42-files.zip?X-Amz-Signature=...",
                  "expires_at": "2026-10-30T12:00:41Z",
                  "error": null,
                  "created_at": "2026-10-29T12:00:03Z",
                  "completed_at": "2026-10-29T12:00:41Z"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/v3/travel-rule/unmatched/": {
      "get": {
        "summary": "照合されていないトラベルルールの入金を一覧表示",
        "description": "送金元VASPからのトラベルルールデータをまだ待っている受信入金です。その送金のステータスは`AWAITING_COUNTERPARTY`、`NOT_ENOUGH_COUNTERPARTY_DATA`、または`COUNTERPARTY_VASP_NOT_FOUND`で、受信メッセージと紐付けられておらず、誰も手動で照合していません。行とフィルターは`GET /v3/travel-rule/transfers/`と同じで、新しい順に並び、`limit`（デフォルト50）と`offset`でページ分割されます。入金を送金元VASPが送信したメッセージと紐付けるには、`POST /v3/travel-rule/unmatched/{transaction_uuid}/match/`を使用します。",
        "operationId": "listUnmatchedTravelRuleDeposits",
        "x-didit-sdk": {
          "resource": "travel_rule.unmatched_deposits",
          "method": "list",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "INBOUND、OUTBOUND、またはその両方をカンマ区切りで指定します。大文字と小文字を区別します。"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "1つ以上の送金ステータスをカンマ区切りで指定します。"
          },
          {
            "name": "rail",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "INTERNAL、TRP、GTR、TRUST、VERIFYVASP、SYGNA、EMAIL、TEST_VASPのうち1つ以上をカンマ区切りで指定します。"
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "withdrawal、deposit、messageをカンマ区切りで指定します。"
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "取引の通貨。大文字と小文字は区別されません。"
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "この日（UTC）以降に作成された送金。形式はYYYY-MM-DDです。"
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "この日（UTC）以前に作成された送金。形式はYYYY-MM-DDです。"
          },
          {
            "name": "counterparty",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "GET /v3/travel-rule/vasps/から取得したディレクトリエントリまたはDiditネットワークのメンバーの`id`です。その取引相手との送金が対象になります。有効なidではない値には400が返されます。"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000000
            },
            "description": "ページサイズ。デフォルトは50です。"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "description": "スキップする行数。"
          }
        ],
        "responses": {
          "200": {
            "description": "未照合の入金のページ。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous": {
                      "type": "string",
                      "nullable": true
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TravelRuleTransferRow"
                      }
                    }
                  }
                },
                "example": {
                  "count": 1,
                  "next": null,
                  "previous": null,
                  "results": [
                    {
                      "id": "7d3a1c55-0b9e-4d52-8a3c-1f6e2b9d4a08",
                      "transaction_id": "c41f9b2e-5a8d-4e0c-9f17-3b6d8a2e5c91",
                      "txn_id": "dep-2026-10-20-0007",
                      "txn_date": "2026-10-19T08:41:12Z",
                      "kind": "deposit",
                      "direction": "INBOUND",
                      "status": "AWAITING_COUNTERPARTY",
                      "rail": "TRP",
                      "asset": "ETH",
                      "amount": "1.25",
                      "originator_vasp": "",
                      "beneficiary_vasp": "Example Counterparty VASP",
                      "originator_wallet": "0x77ccff0cc624a53cd8b8d8703ced826710211ec7",
                      "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
                      "originator_memo": "",
                      "beneficiary_memo": "",
                      "originator_wallet_type": "vasp",
                      "beneficiary_wallet_type": "vasp",
                      "matched_transaction_id": null,
                      "deadline_at": null,
                      "created_at": "2026-10-19T08:41:13Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "フィルター値が無効です。",
            "content": {
              "application/json": {
                "example": {
                  "start_date": [
                    "Use the YYYY-MM-DD format."
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nfor item in client.travel_rule.unmatched_deposits.list():\n    print(item)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nfor await (const item of didit.travelRule.unmatchedDeposits.list()) {\n  console.log(item);\n}"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.TravelRule.UnmatchedDeposits.ListAutoPaging(ctx, didit.TravelRuleUnmatchedDepositsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nfor (var item : client.travelRule().unmatchedDeposits().list()) {\n    System.out.println(item);\n}"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\nforeach ($didit->travelRule->unmatchedDeposits->list() as $item) {\n    print_r($item->toArray());\n}"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\ndidit.travel_rule.unmatched_deposits.list.auto_paging_each do |item|\n  puts item.to_h\nend"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nawait foreach (var item in await client.TravelRule.UnmatchedDeposits.ListAsync())\n{\n    Console.WriteLine(JsonSerializer.Serialize(item));\n}"
          }
        ]
      }
    },
    "/v3/travel-rule/unmatched/{transaction_uuid}/match/": {
      "post": {
        "summary": "トラベルルールの入金を受信済みメッセージと照合する",
        "operationId": "matchUnmatchedTravelRuleDeposit",
        "x-didit-sdk": {
          "resource": "travel_rule.unmatched_deposits",
          "method": "match",
          "auth": "api_key",
          "server": true
        },
        "tags": [
          "Travel Rule"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "description": "送金人データを待っている受信入金を、送金元VASPがその入金について送信したトラベルルールメッセージと照合します。入金にはメッセージの送金人データ、取引相手VASP、レールが反映され、両方の送金のタイムラインに照合が記録されます。`transaction_uuid`は、`GET /v3/travel-rule/unmatched/`から取得した入金の`transaction_id`です。ボディの`transaction_id`は受信メッセージの`transaction_id`で、`GET /v3/travel-rule/transfers/?kind=message`の行から取得します。送金自体の`id`を指定しても見つかりません。メッセージは入金と同じアセットのものである必要があります。Consoleから削除された入金またはメッセージには`404`が返され、すでに次の状態に進んだもの(照合済み、または待機中でなくなったもの)には`409`が返されます。",
        "parameters": [
          {
            "name": "transaction_uuid",
            "in": "path",
            "required": true,
            "description": "未照合の入金の`transaction_id`。",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleManualMatchRequest"
              },
              "example": {
                "transaction_id": "e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "照合後の両方の送金。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TravelRuleManualMatchResponse"
                },
                "example": {
                  "deposit": {
                    "id": "7d3a1c55-0b9e-4d52-8a3c-1f6e2b9d4a08",
                    "transaction_id": "c41f9b2e-5a8d-4e0c-9f17-3b6d8a2e5c91",
                    "txn_id": "dep-2026-10-20-0007",
                    "txn_date": "2026-10-19T08:41:12Z",
                    "kind": "deposit",
                    "direction": "INBOUND",
                    "status": "AWAITING_COUNTERPARTY",
                    "rail": "TRP",
                    "asset": "ETH",
                    "amount": "1.25",
                    "originator_vasp": "Example Counterparty VASP",
                    "beneficiary_vasp": "Example Counterparty VASP",
                    "originator_wallet": "0x77ccff0cc624a53cd8b8d8703ced826710211ec7",
                    "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
                    "originator_memo": "",
                    "beneficiary_memo": "",
                    "originator_wallet_type": "vasp",
                    "beneficiary_wallet_type": "vasp",
                    "matched_transaction_id": "e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24",
                    "deadline_at": null,
                    "created_at": "2026-10-19T08:41:13Z"
                  },
                  "message": {
                    "id": "2b8e6f10-9c3a-47d1-b5e2-0a4c7d9f3e66",
                    "transaction_id": "e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24",
                    "txn_id": "msg-2026-10-20-0003",
                    "txn_date": "2026-10-19T08:41:12Z",
                    "kind": "message",
                    "direction": "INBOUND",
                    "status": "COMPLETED",
                    "rail": "TRP",
                    "asset": "ETH",
                    "amount": "1.25",
                    "originator_vasp": "Origin CASP SL",
                    "beneficiary_vasp": "Example Counterparty VASP",
                    "originator_wallet": "0x77ccff0cc624a53cd8b8d8703ced826710211ec7",
                    "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
                    "originator_memo": "",
                    "beneficiary_memo": "",
                    "originator_wallet_type": "vasp",
                    "beneficiary_wallet_type": "vasp",
                    "matched_transaction_id": null,
                    "deadline_at": "2026-10-21T08:41:13Z",
                    "created_at": "2026-10-19T08:41:13Z"
                  }
                }
              }
            }
          },
          "400": {
            "description": "バリデーションエラー: `transaction_id`がない、入金そのものである、受信したトラベルルールメッセージではない、または入金とは異なる資産のものである。あるいは、パス内の取引が受信入金ではありません。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Error": {
                    "value": {
                      "transaction_id": [
                        "The travel rule message is for a different asset than the deposit."
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "description": "不明なデポジットまたはメッセージ、あるいはそのいずれかが削除されています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "detail": "No TravelRuleTransfer matches the given query."
                }
              }
            }
          },
          "409": {
            "description": "入金がすでに送金人データを待っていないか、メッセージがすでに入金と照合されています。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "detail": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Error": {
                    "value": {
                      "detail": "This deposit is no longer waiting for originator data."
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "python",
            "label": "Python",
            "source": "from didit import Didit\n\n# Reads DIDIT_API_KEY.\nclient = Didit()\n\nresult = client.travel_rule.unmatched_deposits.match(\n    \"11111111-2222-3333-4444-555555555555\",\n    transaction_id=\"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\",\n)\nprint(result)"
          },
          {
            "lang": "javascript",
            "label": "Node.js",
            "source": "import Didit from \"@didit-protocol/sdk-node\";\n\n// Reads DIDIT_API_KEY.\nconst didit = new Didit();\n\nconst result = await didit.travelRule.unmatchedDeposits.match(\"11111111-2222-3333-4444-555555555555\", {\n  transaction_id: \"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\",\n});\nconsole.log(result);"
          },
          {
            "lang": "go",
            "label": "Go",
            "source": "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.UnmatchedDeposits.Match(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleManualMatchRequest{\n\tTransactionID: \"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
          },
          {
            "lang": "java",
            "label": "Java",
            "source": "import me.didit.Didit;\nimport me.didit.types.TravelRuleManualMatchRequest;\n\n// Reads DIDIT_API_KEY.\nDidit client = new Didit();\n\nvar result = client.travelRule().unmatchedDeposits().match(\"11111111-2222-3333-4444-555555555555\", TravelRuleManualMatchRequest.builder()\n        .transactionId(\"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\")\n        .build());\nSystem.out.println(result);"
          },
          {
            "lang": "php",
            "label": "PHP",
            "source": "<?php\n\nrequire 'vendor/autoload.php';\n\nuse Didit\\DiditClient;\n\n// Reads DIDIT_API_KEY.\n$didit = new DiditClient();\n\n$result = $didit->travelRule->unmatchedDeposits->match('11111111-2222-3333-4444-555555555555', [\n    'transaction_id' => 'e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24',\n]);\nprint_r($result->toArray());"
          },
          {
            "lang": "ruby",
            "label": "Ruby",
            "source": "require \"didit\"\n\n# Reads DIDIT_API_KEY.\ndidit = Didit::Client.new\n\nresult = didit.travel_rule.unmatched_deposits.match(\n  \"11111111-2222-3333-4444-555555555555\",\n  transaction_id: \"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\"\n)\nputs result.to_h"
          },
          {
            "lang": "csharp",
            "label": ".NET",
            "source": "using System;\nusing System.Text.Json;\nusing Didit;\n\n// Reads DIDIT_API_KEY.\nusing var client = new DiditClient();\n\nvar result = await client.TravelRule.UnmatchedDeposits.MatchAsync(\"11111111-2222-3333-4444-555555555555\", new TravelRuleManualMatchRequest\n{\n    TransactionId = \"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\",\n});\nConsole.WriteLine(JsonSerializer.Serialize(result));"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "DocumentAIDetectedCode": {
        "type": "object",
        "required": [
          "type",
          "page_number",
          "position",
          "x",
          "y",
          "width",
          "height",
          "page_width",
          "page_height",
          "raw_payload",
          "parsed_payload"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "検出されたシンボロジー。例：`QR_CODE`、`CODE_128`、`EAN_13`、`DATA_MATRIX`、`PDF_417`。"
          },
          "page_number": {
            "type": "integer",
            "minimum": 1,
            "description": "ページ番号（1始まり）。"
          },
          "position": {
            "type": "array",
            "nullable": true,
            "description": "レンダリングされたページのピクセル座標で表した、検出されたポリゴン。信頼できる位置が得られない場合は`null`です。",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "items": {
                "type": "integer"
              }
            }
          },
          "x": {
            "type": "integer",
            "nullable": true,
            "description": "バウンディングボックスの左端。レンダリングされたページのピクセル単位で表します。"
          },
          "y": {
            "type": "integer",
            "nullable": true,
            "description": "レンダリングされたページのピクセル単位で表した、バウンディングボックスの上端。"
          },
          "width": {
            "type": "integer",
            "nullable": true,
            "description": "レンダリングされたページのピクセル単位でのバウンディングボックスの幅。"
          },
          "height": {
            "type": "integer",
            "nullable": true,
            "description": "レンダリングされたページのピクセル単位でのバウンディングボックスの高さ。"
          },
          "page_width": {
            "type": "integer",
            "description": "レンダリングされたページの幅(ピクセル)。"
          },
          "page_height": {
            "type": "integer",
            "description": "レンダリングされたページの高さ(ピクセル)。"
          },
          "raw_payload": {
            "type": "string",
            "description": "利用可能な場合はデコーダーの生のペイロードをBase64文字列で返し、それ以外の場合は空文字列を返します。"
          },
          "parsed_payload": {
            "nullable": true,
            "description": "デコードされた文字列または構造化された値。コードの位置は特定できたもののデコードできなかった場合は`null`です。"
          }
        }
      },
      "SessionImportJob": {
        "type": "object",
        "required": [
          "uuid",
          "status",
          "import_type",
          "source_format",
          "source_filename",
          "total_rows",
          "processed_rows",
          "created_count",
          "updated_count",
          "skipped_count",
          "failed_count"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "インポートジョブのID。この値を使用して進捗をポーリングし、行ごとのエラーを取得します。"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "PROCESSING",
              "COMPLETED",
              "FAILED",
              "PAUSED",
              "CANCELLED",
              "READY"
            ]
          },
          "import_type": {
            "type": "string",
            "enum": [
              "user_verification",
              "business_verification",
              "status_rules",
              "transactions"
            ]
          },
          "source_format": {
            "type": "string",
            "enum": [
              "csv",
              "ndjson"
            ]
          },
          "source_filename": {
            "type": "string"
          },
          "total_rows": {
            "type": "integer",
            "format": "int64"
          },
          "processed_rows": {
            "type": "integer",
            "format": "int64"
          },
          "checkpoint_row": {
            "type": "integer",
            "format": "int64"
          },
          "created_count": {
            "type": "integer",
            "format": "int64"
          },
          "updated_count": {
            "type": "integer",
            "format": "int64"
          },
          "skipped_count": {
            "type": "integer",
            "format": "int64"
          },
          "failed_count": {
            "type": "integer",
            "format": "int64"
          },
          "total_media_bytes": {
            "type": "integer",
            "format": "int64"
          },
          "last_error": {
            "type": "string",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "state": {
            "type": "string",
            "enum": [
              "ready",
              "queued",
              "running",
              "paused",
              "completed",
              "errors",
              "failed",
              "cancelled"
            ],
            "description": "コンソールに表示されるジョブの状態です。`errors`は、拒否された行がある完了済みのジョブを表します。"
          },
          "source": {
            "type": "string",
            "enum": [
              "file",
              "api",
              "provider"
            ]
          },
          "provider": {
            "type": "string",
            "description": "移行元。ファイルまたはAPIによるインポートの場合は空です。"
          },
          "provider_options": {
            "type": "object"
          },
          "credential_hint": {
            "type": "string",
            "description": "移行が保持するキーの先頭の文字列です。キー自体が返されることはありません。"
          },
          "credentials_expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "resumes_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "プロバイダーのレート制限により一時停止したジョブが自動的に再開する日時。"
          },
          "status_mapping": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "is_dry_run": {
            "type": "boolean"
          },
          "dry_run_summary": {
            "type": "object",
            "description": "ドライランの結果: `total`、`by_status`、`already_in_didit`、`same_person`、`not_finished`、`failed`、`unmapped_statuses`。"
          },
          "face_templates_enabled": {
            "type": "boolean"
          },
          "lawful_basis_confirmed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "not_finished_count": {
            "type": "integer",
            "format": "int64"
          },
          "same_person_count": {
            "type": "integer",
            "format": "int64"
          },
          "face_templates_count": {
            "type": "integer",
            "format": "int64"
          },
          "face_duplicates_count": {
            "type": "integer",
            "format": "int64"
          },
          "face_blocklist_hits_count": {
            "type": "integer",
            "format": "int64"
          },
          "created_by_name": {
            "type": "string",
            "nullable": true
          },
          "created_by_email": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "SessionImportError": {
        "type": "object",
        "required": [
          "uuid",
          "row_number",
          "error",
          "raw_row"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "row_number": {
            "type": "integer",
            "format": "int64"
          },
          "external_id": {
            "type": "string",
            "nullable": true
          },
          "error": {
            "type": "string"
          },
          "raw_row": {
            "type": "object",
            "additionalProperties": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BrandingCustomizationUpdate": {
        "type": "object",
        "description": "ブランディングの部分更新ボディ。変更したいフィールドのみを指定してください。16進カラーは`#RRGGBB`または`#RRGGBBAA`を受け付けます。カスタムドメインとホワイトラベルメールはここでは受け付けません。",
        "properties": {
          "color_primary": {
            "type": "string",
            "description": "見出しとメインテキストの色です。"
          },
          "color_secondary": {
            "type": "string",
            "description": "段落/セカンダリテキストの色。"
          },
          "color_background": {
            "type": "string",
            "description": "ページの背景色。"
          },
          "color_panel": {
            "type": "string",
            "description": "パネル/アクセントカラー。"
          },
          "color_panel_10": {
            "type": "string",
            "description": "不透明度10%のパネルカラー。"
          },
          "color_on_panel_1": {
            "type": "string",
            "description": "パネル上の補助テキストの色。"
          },
          "color_on_panel_2": {
            "type": "string",
            "description": "パネル上のピル/バッジの色。"
          },
          "color_on_background": {
            "type": "string",
            "description": "背景上のテキスト色。"
          },
          "color_button_1": {
            "type": "string",
            "description": "プライマリボタンの色。"
          },
          "color_button_2": {
            "type": "string",
            "description": "セカンダリボタンの色。"
          },
          "color_button_text_1": {
            "type": "string",
            "description": "プライマリボタンの文字色。"
          },
          "color_button_text_2": {
            "type": "string",
            "description": "セカンダリボタンのテキストの色。"
          },
          "color_pill_text": {
            "type": "string",
            "description": "ピル、入力欄、セレクターのテキスト色。"
          },
          "border_radius_panel": {
            "type": "integer",
            "minimum": 0,
            "description": "パネルの角丸の半径(ピクセル単位)。"
          },
          "border_radius_buttons": {
            "type": "integer",
            "minimum": 0,
            "description": "ボタンの角の半径(ピクセル)。"
          },
          "font_family": {
            "type": "string",
            "description": "Google Fontのフォントファミリー名(例: `Inter`、`AR One Sans`)。"
          },
          "font_weight": {
            "type": "string",
            "description": "選択したフォントファミリーで利用可能なフォントウェイト（例：`regular`、`500`、`700`）。"
          },
          "app_public_name": {
            "type": "string",
            "nullable": true,
            "description": "認証フローに表示される公開名です。"
          },
          "privacy_policy_url": {
            "type": "string",
            "nullable": true,
            "description": "エンドユーザーに表示されるプライバシーポリシーのURL。"
          },
          "skip_welcome_screen": {
            "type": "boolean",
            "description": "最初のウェルカム画面をスキップします。"
          },
          "disable_login_with_didit": {
            "type": "boolean",
            "description": "Diditでログインする画面を表示せず、ゲストとして続行します。カスタムドメインが設定されている間は`false`に戻すことはできません（400）。"
          },
          "hide_progress_bar": {
            "type": "boolean",
            "description": "フロー中に進捗バーを非表示にします。"
          },
          "callback_seconds": {
            "type": "integer",
            "minimum": 0,
            "description": "コールバックURLにリダイレクトするまでの遅延（秒）。"
          },
          "delete_logo_square": {
            "type": "boolean",
            "description": "`true`の場合、現在の正方形ロゴを削除します。"
          },
          "delete_logo_rectangular": {
            "type": "boolean",
            "description": "`true`の場合、現在の長方形ロゴを削除します。"
          },
          "delete_logo_rectangular_dark": {
            "type": "boolean",
            "description": "`true`の場合、現在のダークモード用ロゴを削除し、以後`logo_rectangular_dark`は`null`になります。同じマルチパートリクエストで`image_rectangular_dark`もアップロードした場合は、アップロードが優先されます。"
          },
          "delete_favicon": {
            "type": "boolean",
            "description": "`true`の場合、現在のファビコンを削除します。"
          }
        }
      },
      "BrandingCustomization": {
        "type": "object",
        "description": "アプリケーションのホワイトラベルブランディング：色、フォント、角の丸み、ロゴURL、UI/UXオプション。ロゴURLは読み取り専用です（画像をアップロードして設定します）。カスタムドメインとホワイトラベルメールは含まれません。",
        "properties": {
          "color_primary": {
            "type": "string"
          },
          "color_secondary": {
            "type": "string"
          },
          "color_background": {
            "type": "string"
          },
          "color_panel": {
            "type": "string"
          },
          "color_panel_10": {
            "type": "string"
          },
          "color_on_panel_1": {
            "type": "string"
          },
          "color_on_panel_2": {
            "type": "string"
          },
          "color_on_background": {
            "type": "string"
          },
          "color_button_1": {
            "type": "string"
          },
          "color_button_2": {
            "type": "string"
          },
          "color_button_text_1": {
            "type": "string"
          },
          "color_button_text_2": {
            "type": "string"
          },
          "color_pill_text": {
            "type": "string"
          },
          "border_radius_panel": {
            "type": "integer"
          },
          "border_radius_buttons": {
            "type": "integer"
          },
          "font_family": {
            "type": "string"
          },
          "font_weight": {
            "type": "string"
          },
          "font_url": {
            "type": "string",
            "nullable": true,
            "description": "読み取り専用。選択したフォントファミリーに対応するGoogle FontsスタイルシートのURLです。"
          },
          "logo_square": {
            "type": "string",
            "nullable": true,
            "description": "読み取り専用の正方形ロゴURLです。`image_square`でアップロードします。"
          },
          "logo_rectangular": {
            "type": "string",
            "nullable": true,
            "description": "読み取り専用の横長ロゴURLです。`image_rectangular`でアップロードします。"
          },
          "logo_rectangular_dark": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "読み取り専用。ダークモード用の横長ロゴの一時的な署名付きURLで、暗い背景上に表示されます。ダークロゴが設定されていない場合、またはお客様のアカウントで横長ロゴが表示されない場合は`null`です。`image_rectangular_dark`でアップロードしてください。"
          },
          "favicon": {
            "type": "string",
            "nullable": true,
            "description": "読み取り専用のファビコンURLです。`image_favicon`でアップロードします。"
          },
          "app_public_name": {
            "type": "string",
            "nullable": true
          },
          "privacy_policy_url": {
            "type": "string",
            "nullable": true
          },
          "skip_welcome_screen": {
            "type": "boolean"
          },
          "disable_login_with_didit": {
            "type": "boolean"
          },
          "hide_progress_bar": {
            "type": "boolean"
          },
          "callback_seconds": {
            "type": "integer"
          }
        }
      },
      "WebhookEvent": {
        "type": "string",
        "description": "サポートされているWebhookイベント名。`subscribed_events`ではこれらの文字列を正確に使用してください。サポートされていない値は拒否されます。",
        "enum": [
          "status.updated",
          "data.updated",
          "user.status.updated",
          "user.data.updated",
          "business.status.updated",
          "business.data.updated",
          "activity.created",
          "transaction.created",
          "transaction.status.updated",
          "travel_rule.status.updated",
          "workflow.compliance_changed",
          "transaction_rule_suggestions.created",
          "auth.signup",
          "auth.login",
          "auth.login_failed",
          "auth.password_reset_requested",
          "auth.password_reset_completed",
          "auth.mfa_changed",
          "auth.new_device",
          "auth.account_locked",
          "investigator.report.ready",
          "investigator.decision.automated",
          "investigator.decision.overridden",
          "investigator.decision.contested",
          "investigator.question.raised",
          "investigator.automation.paused",
          "investigator.rfi.answered",
          "investigator.rfi.overdue",
          "investigator.drift.detected",
          "investigator.sla.breached",
          "investigator.qa.failed",
          "investigator.external.report.ready"
        ]
      },
      "WebhookSubscribedEvents": {
        "type": "array",
        "description": "このWebhookの送信先のイベントフィルターです。Diditは、イベントタイプがこれらの値のいずれかに完全に一致するWebhookのみを配信します。ワイルドカードによるサブスクリプションはありません。送信する場合、リストには有効なイベントを1つ以上含める必要があります(明示的な`[]`は400で拒否されます)。リストが空の送信先(作成時にフィールドを省略した場合)は何も受信しません。更新時、リストはマージされず、常に全体が置き換えられます。",
        "minItems": 1,
        "uniqueItems": true,
        "items": {
          "$ref": "#/components/schemas/WebhookEvent"
        },
        "example": [
          "status.updated",
          "data.updated"
        ]
      },
      "PhoneVerificationSendResponse": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "認証のセッションID。`Retry`による送信では、元の送信と同じ`request_id`が返されます。このIDはBusiness Consoleに表示され、確定済みの`POST /v3/phone/check/`でも再度返され、`GET /v3/session/{sessionId}/decision/`に渡すことができます。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Success",
              "Retry",
              "Blocked"
            ],
            "description": "`Success`：新しい認証にOTPを送信しました。`Retry`：以前の送信で作成された保留中の認証に対して、OTPを再送信しました。`Blocked`：不正防止レイヤーが送信を拒否しました。認証は直ちに`Declined`として確定し、課金は発生しません。"
          },
          "reason": {
            "type": "string",
            "nullable": true,
            "description": "送信が`Blocked`となった理由です（例：`repeated_attempts`、`suspicious`、`spam`）。`Success`および`Retry`の場合は`null`です。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "セッションに保存されている`vendor_data`（最初の送信時のもの）のエコー。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "セッションに保存されている`metadata`（最初の送信時のもの）のエコー。"
          }
        }
      },
      "PhoneVerificationCheckResponse": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "`Approved`/`Declined`の場合は、一致した認証のセッションIDで、`POST /v3/phone/send/`が返す`request_id`と同一です。`Failed`および`Expired or Not Found`の場合は、後から照会できないランダムな一回限りのUUIDです。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "Declined",
              "Failed",
              "Expired or Not Found"
            ],
            "description": "`Approved`：コードが正しく、却下となるリスクもありません。`Declined`：最終状態です。却下となるリスクに該当したか、試行回数の上限（3回）に達しました。`Failed`：コードが誤っており、試行回数が残っています。`Expired or Not Found`：直近5分以内に、この電話番号に対する保留中の認証がありません。"
          },
          "message": {
            "type": "string",
            "description": "結果を人が読める形で説明したもの。誤ったコードが入力された後の残り試行回数を含みます。"
          },
          "phone": {
            "type": "object",
            "nullable": true,
            "description": "完全な電話番号レポート。最終的な結果（`Approved`/`Declined`）の場合にのみ存在します（nullではありません）。`Failed`では`null`となり、`Expired or Not Found`では含まれません。",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "Approved",
                  "Declined",
                  "In Review",
                  "Not Finished",
                  "Expired"
                ],
                "description": "電話番号検証の最終ステータスです。確定済みのチェックでは、トップレベルの`status`と一致します。"
              },
              "phone_number_prefix": {
                "type": "string",
                "description": "先頭に`+`を付けた国際電話の国番号(例: `+1`)。",
                "example": "+1"
              },
              "phone_number": {
                "type": "string",
                "description": "国番号を除いた国内番号。",
                "example": "4155552671"
              },
              "full_number": {
                "type": "string",
                "description": "E.164形式の完全な番号。",
                "example": "+14155552671"
              },
              "country_code": {
                "type": "string",
                "nullable": true,
                "description": "番号の国を示すISO 3166-1 alpha-2コード。",
                "example": "US"
              },
              "country_name": {
                "type": "string",
                "description": "`country_code`から導出された国の正式名称。",
                "example": "United States"
              },
              "carrier": {
                "type": "object",
                "description": "番号を提供している現在のネットワーク。確定時に実行された通信事業者の照会結果に基づきます。",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "通信事業者名。照会で特定できなかった場合は空文字列です。"
                  },
                  "type": {
                    "type": "string",
                    "description": "ルックアップで報告された回線種別: `mobile`、`fixed_line`、`voip`、`isp`、`vpn`、`toll_free`、`premium_rate`、`pager`、`payphone`、`satellite`、`service`、`shared_cost`、`short_codes_commercial`、`calling_cards`、`local_rate`、`universal_access`、`voice_mail`、`other`、または`unknown`。"
                  }
                }
              },
              "is_disposable": {
                "type": "boolean",
                "description": "番号が一時/使い捨て番号サービスに属する場合は`true`です。"
              },
              "is_virtual": {
                "type": "boolean",
                "description": "回線種別が仮想（`voip`、`isp`、`vpn`のいずれか）の場合は`true`です。"
              },
              "verification_method": {
                "type": "string",
                "description": "配信が確認された後は、実際にOTPを配信したチャネル（例: `whatsapp`、`sms`）です。それまではリクエストされたチャネルです。"
              },
              "verification_attempts": {
                "type": "integer",
                "description": "この認証でOTPを送信した回数（1、または再試行後は2）。"
              },
              "verified_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "正しいコードが入力された日時。認証が一度も承認されなかった場合は`null`。"
              },
              "warnings": {
                "type": "array",
                "description": "認証中に記録されたリスク警告(重複、使い捨て、VoIP、試行回数超過、ブロックリストなど)。該当がない場合は空の配列です。",
                "items": {
                  "type": "object",
                  "properties": {
                    "feature": {
                      "type": "string",
                      "description": "警告を生成した機能。ここでは常に`PHONE`です。"
                    },
                    "risk": {
                      "type": "string",
                      "description": "機械可読なリスクコードです。"
                    },
                    "additional_data": {
                      "type": "object",
                      "nullable": true,
                      "description": "リスク固有のコンテキスト(例: 重複リスクの場合は重複しているセッションID)。リスクに追加データがない場合は`null`です。"
                    },
                    "log_type": {
                      "type": "string",
                      "enum": [
                        "error",
                        "warning",
                        "information"
                      ],
                      "description": "重大度。`error`のリスクは認証を却下し、`warning`はレビュー対象としてフラグを付け、`information`はステータスに影響を与えずに記録されます。"
                    },
                    "short_description": {
                      "type": "string",
                      "description": "リスクを人が読める形で1行にまとめた要約。"
                    },
                    "long_description": {
                      "type": "string",
                      "description": "リスクを人が読める形で説明したもの。"
                    }
                  }
                }
              },
              "lifecycle": {
                "type": "array",
                "description": "検証の監査証跡を時系列で示します。イベントの`type`は`PHONE_VERIFICATION_MESSAGE_SENT`、`PHONE_VERIFICATION_RETRY_MESSAGE_SENT`、`PHONE_VERIFICATION_BLOCKED`、`PHONE_DELIVERY_DELIVERED`、`PHONE_DELIVERY_UNDELIVERABLE`、`VALID_CODE_ENTERED`、`INVALID_CODE_ENTERED`、`PHONE_VERIFICATION_APPROVED`、`PHONE_VERIFICATION_DECLINED`、`PHONE_VERIFICATION_IN_REVIEW`、`PHONE_VERIFICATION_EXPIRED`のいずれかです。",
                "items": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "description": "イベントタイプです。"
                    },
                    "timestamp": {
                      "type": "string",
                      "format": "date-time",
                      "description": "イベントが発生した日時。"
                    },
                    "details": {
                      "type": "object",
                      "nullable": true,
                      "description": "イベント固有のペイロードです。送信イベント: `{status, reason, channel, actual_channel}`(`actual_channel`は配信が確認されると設定されます)。配信イベント: `{channel, status}`。コード入力イベント: `{code_tried, status}`。最終ステータスイベント: `null`、または却下またはレビュー中の場合は`{reason}`。"
                    },
                    "fee": {
                      "type": "number",
                      "description": "このイベントで請求されたUSD金額。送信イベント(配信料金)でのみゼロ以外の値になり、コード入力、配信確認、ステータスイベントでは0です。"
                    }
                  }
                }
              },
              "matches": {
                "type": "array",
                "description": "同じ電話番号が別のユーザー（異なる`vendor_data`）によって使用された、アプリケーション内の他のセッション（KYC、KYB、またはAPI）。最大5件で、リストエントリに基づく合成的なブロックリスト一致がある場合はそれが先頭に置かれます（セッション由来の一致はクエリの順序を維持します）。一致がない場合は空の配列です。",
                "items": {
                  "type": "object",
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "この電話番号を使用した他の認証のセッションID。"
                    },
                    "session_number": {
                      "type": "integer",
                      "description": "そのセッションのわかりやすい連番。"
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "そのセッションの`vendor_data`です。"
                    },
                    "verification_date": {
                      "type": "string",
                      "description": "そのセッションが作成された日時（`YYYY-MM-DDTHH:MM:SSZ`）。"
                    },
                    "phone_number": {
                      "type": "string",
                      "description": "一致した電話番号です。"
                    },
                    "status": {
                      "type": "string",
                      "description": "そのセッションのステータス（例：`Approved`、`Declined`、`In Progress`）。"
                    },
                    "is_blocklisted": {
                      "type": "boolean",
                      "description": "電話番号がアプリケーションのブロックリストに登録されているかどうか。"
                    },
                    "api_service": {
                      "type": "string",
                      "nullable": true,
                      "description": "APIタイプのセッションの場合、そのセッションを作成したスタンドアロンAPI（例：`PHONE_VERIFICATION`）。通常の認証セッションでは`null`です。"
                    },
                    "source": {
                      "type": "string",
                      "description": "一致が見つかった場所です。通常は`session`です。組織のリストエントリ経由のブロックリスト一致では、`source: \"list_entry\"`で`session_id`/`session_number`がnullの合成された一致が先頭に追加されます。"
                    }
                  }
                }
              },
              "phone_social": {
                "$ref": "#/components/schemas/PhoneSocialFootprint"
              },
              "phone_intelligence": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PhoneIntelligence"
                  }
                ],
                "description": "電話番号インテリジェンスのシグナル。チェックで`enable_enrichment`が`true`だった場合にのみ含まれます。"
              }
            }
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "一致した認証のセッションの`vendor_data`です。`Expired or Not Found`の場合は`null`です。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "一致した認証のセッションの`metadata`。`Expired or Not Found`の場合は`null`。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "このチェックレスポンスの日時。"
          }
        }
      },
      "EmailVerificationSendResponse": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "認証のセッションID。`Retry`による送信では、元の送信と同じ`request_id`が返されます。このIDはBusiness Consoleに表示され、確定済みの`POST /v3/email/check/`でも再度返され、`GET /v3/session/{sessionId}/decision/`に渡すことができます。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Success",
              "Retry",
              "Undeliverable"
            ],
            "description": "`Success`：新しい認証にOTPをメールで送信しました（課金対象）。`Retry`：以前の送信で作成された保留中の認証に対して、新しいOTPをメールで送信しました（無料）。`Undeliverable`：メールアドレスが配信可能性の検証に失敗したか、メッセージを送信できませんでした。認証は直ちに`Declined`として確定し、課金は発生しません。"
          },
          "reason": {
            "type": "string",
            "nullable": true,
            "enum": [
              "email_can_not_be_delivered",
              null
            ],
            "description": "`status`が`Undeliverable`の場合は`email_can_not_be_delivered`、それ以外の場合は`null`。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "セッションに保存されている`vendor_data`（最初の送信時のもの）のエコー。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "セッションに保存されている`metadata`（最初の送信時のもの）のエコー。"
          }
        }
      },
      "EmailVerificationCheckResponse": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "`Approved`/`Declined`の場合は、一致した認証のセッションIDで、`POST /v3/email/send/`が返す`request_id`と同一です。`Failed`および`Expired or Not Found`の場合は、後から照会できないランダムな一回限りのUUIDです。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "Declined",
              "Failed",
              "Expired or Not Found"
            ],
            "description": "`Approved`：コードが正しく、却下となるリスクもありません。`Declined`：最終状態です。却下となるリスクに該当したか、試行回数の上限（3回）に達しました。`Failed`：コードが誤っており、試行回数が残っています。`Expired or Not Found`：直近5分以内に、このメールアドレスに対する保留中の認証がありません。"
          },
          "message": {
            "type": "string",
            "description": "結果を人が読める形で説明したもの。誤ったコードが入力された後の残り試行回数を含みます。"
          },
          "email": {
            "type": "object",
            "nullable": true,
            "description": "メールの完全なレポート。最終的な結果（`Approved`/`Declined`）の場合にのみ存在し（null以外）、`Failed`の場合は`null`、`Expired or Not Found`の場合は含まれません。",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "Approved",
                  "Declined",
                  "In Review",
                  "Not Finished",
                  "Expired"
                ],
                "description": "メールアドレス認証の最終ステータスです。確定済みのチェックでは、トップレベルの`status`と一致します。"
              },
              "email": {
                "type": "string",
                "format": "email",
                "description": "認証済みのメールアドレス。",
                "example": "alice@example.com"
              },
              "is_breached": {
                "type": "boolean",
                "description": "このアドレスが既知のデータ漏えいに含まれている場合は`true`です（漏えい情報の照会は確定時に実行されます）。"
              },
              "breaches": {
                "type": "array",
                "description": "このメールアドレスを含む既知の漏洩のうち、最新のものを最大5件返します。`is_breached`が`false`の場合は空配列（または省略）です。",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "データ侵害の識別子。"
                    },
                    "domain": {
                      "type": "string",
                      "description": "漏洩したサービスのドメインです。"
                    },
                    "breach_date": {
                      "type": "string",
                      "format": "date",
                      "description": "データ侵害が発生した日付。"
                    },
                    "breach_emails_count": {
                      "type": "integer",
                      "description": "侵害で流出したアカウントの総数。"
                    },
                    "description": {
                      "type": "string",
                      "description": "情報漏えいの内容を人が読める形で説明したもの（HTMLマークアップを含む場合があります）。"
                    },
                    "logo_path": {
                      "type": "string",
                      "description": "漏洩したサービスのロゴのURL。"
                    },
                    "data_classes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "漏洩したデータのカテゴリ。snake_caseで表されます（例: `email_addresses`、`passwords`）。"
                    },
                    "is_verified": {
                      "type": "boolean",
                      "description": "漏えいが正当なものとして検証済みかどうか。"
                    }
                  }
                }
              },
              "is_disposable": {
                "type": "boolean",
                "description": "ドメインが既知の使い捨て/一時メールプロバイダーに属する場合は`true`です。"
              },
              "is_undeliverable": {
                "type": "boolean",
                "description": "このアドレスでメールを受信できない場合（構文またはDNS/MXの検証に失敗した場合、またはメッセージがバウンスした場合）は`true`です。"
              },
              "verification_attempts": {
                "type": "integer",
                "description": "この認証でOTPを送信した回数（1、または再試行後は2）。"
              },
              "verified_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "正しいコードが入力された日時。認証が一度も承認されなかった場合は`null`。"
              },
              "warnings": {
                "type": "array",
                "description": "認証中に記録されたリスク警告(重複、漏洩、使い捨て、配信不能、試行回数超過、ブロックリストなど)。該当がない場合は空の配列です。",
                "items": {
                  "type": "object",
                  "properties": {
                    "feature": {
                      "type": "string",
                      "description": "警告を生成した機能。ここでは常に`EMAIL`です。"
                    },
                    "risk": {
                      "type": "string",
                      "description": "機械可読なリスクコードです。"
                    },
                    "additional_data": {
                      "type": "object",
                      "nullable": true,
                      "description": "リスク固有のコンテキスト(例: 重複リスクの場合は重複しているセッションID)。リスクに追加データがない場合は`null`です。"
                    },
                    "log_type": {
                      "type": "string",
                      "enum": [
                        "error",
                        "warning",
                        "information"
                      ],
                      "description": "重大度。`error`のリスクは認証を却下し、`warning`はレビュー対象としてフラグを付け、`information`はステータスに影響を与えずに記録されます。"
                    },
                    "short_description": {
                      "type": "string",
                      "description": "リスクを人が読める形で1行にまとめた要約。"
                    },
                    "long_description": {
                      "type": "string",
                      "description": "リスクを人が読める形で説明したもの。"
                    }
                  }
                }
              },
              "lifecycle": {
                "type": "array",
                "description": "検証の監査証跡を時系列で示します。イベントの`type`は`EMAIL_VERIFICATION_MESSAGE_SENT`、`EMAIL_VERIFICATION_RETRY_MESSAGE_SENT`、`VALID_CODE_ENTERED`、`INVALID_CODE_ENTERED`、`EMAIL_VERIFICATION_APPROVED`、`EMAIL_VERIFICATION_DECLINED`、`EMAIL_VERIFICATION_IN_REVIEW`、`EMAIL_VERIFICATION_EXPIRED`のいずれかです。",
                "items": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "description": "イベントタイプです。"
                    },
                    "timestamp": {
                      "type": "string",
                      "format": "date-time",
                      "description": "イベントが発生した日時。"
                    },
                    "details": {
                      "type": "object",
                      "nullable": true,
                      "description": "イベント固有のペイロードです。送信イベント: `{status, reason}`。コード入力イベント: `{code_tried, status}`。最終ステータスイベント: `null`、または却下またはレビュー中の場合は`{reason}`。"
                    },
                    "fee": {
                      "type": "number",
                      "description": "このイベントで請求されたUSD金額。最初の送信成功時にのみゼロ以外の値になり、再試行、コード入力、ステータスイベントでは0です。"
                    }
                  }
                }
              },
              "matches": {
                "type": "array",
                "description": "同じメールアドレスが別のユーザー（異なる`vendor_data`）によって使用された、あなたのアプリケーションの他のセッション（KYC、KYB、またはAPI）です。最大5件です。合成されたリストエントリのブロックリスト一致がある場合は先頭に追加されます（セッション由来のブロックリスト登録メールアドレスが存在しない場合のみ）。セッション由来の一致はcreated_atの順序を保持します。一致がない場合は空の配列です。",
                "items": {
                  "type": "object",
                  "properties": {
                    "session_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "このメールアドレスを使用した他の認証のセッションID。"
                    },
                    "session_number": {
                      "type": "integer",
                      "description": "そのセッションのわかりやすい連番。"
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "そのセッションの`vendor_data`です。"
                    },
                    "verification_date": {
                      "type": "string",
                      "description": "そのセッションが作成された日時（`YYYY-MM-DDTHH:MM:SSZ`）。"
                    },
                    "email": {
                      "type": "string",
                      "description": "一致したメールアドレスです。"
                    },
                    "status": {
                      "type": "string",
                      "description": "そのセッションのステータス（例：`Approved`、`Declined`、`In Progress`）。"
                    },
                    "is_blocklisted": {
                      "type": "boolean",
                      "description": "メールアドレスがアプリケーションのブロックリストに登録されているかどうか。"
                    },
                    "api_service": {
                      "type": "string",
                      "nullable": true,
                      "description": "APIタイプのセッションの場合、そのセッションを作成したスタンドアロンAPI（例：`PHONE_VERIFICATION`）。通常の認証セッションでは`null`です。"
                    },
                    "source": {
                      "type": "string",
                      "description": "一致が見つかった場所です。通常は`session`です。組織のリストエントリ経由のブロックリスト一致では、`source: \"list_entry\"`で`session_id`/`session_number`がnullの合成された一致が先頭に追加されます。"
                    }
                  }
                }
              },
              "email_social": {
                "$ref": "#/components/schemas/EmailSocialFootprint"
              },
              "email_intelligence": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EmailIntelligence"
                  }
                ],
                "description": "メールインテリジェンスのシグナル。チェックで`enable_enrichment`が`true`だった場合にのみ含まれます。"
              }
            }
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "一致した認証のセッションの`vendor_data`です。`Expired or Not Found`の場合は`null`です。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "一致した認証のセッションの`metadata`。`Expired or Not Found`の場合は`null`。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "このチェックレスポンスの日時。"
          }
        }
      },
      "WorkflowListItem": {
        "type": "object",
        "description": "一覧表示におけるワークフローバージョン1件です。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "バージョンごとのUUIDです。取得/更新/削除では`{settings_uuid}`として、セッション作成時には`workflow_id`として使用します。"
          },
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "description": "同じワークフローのすべてのバージョンで共有される不変のグループID。バージョン1では`uuid`と同じです。"
          },
          "workflow_label": {
            "type": "string",
            "description": "ワークフローの表示名です。"
          },
          "workflow_type": {
            "type": "string",
            "nullable": true,
            "description": "シンプルなワークフローのベースタイプです。`kyc`、`kyb`、`adaptive_age_verification`、`biometric_authentication`などがあります。KYB機能を含まないグラフベースのワークフローでは`null`です。"
          },
          "is_default": {
            "type": "boolean",
            "description": "新しいセッションのデフォルトのワークフローかどうか。"
          },
          "is_archived": {
            "type": "boolean"
          },
          "is_white_label_enabled": {
            "type": "boolean",
            "description": "このワークフローで作成されたセッションにホワイトラベルのカスタマイズを適用するかどうか。"
          },
          "total_price": {
            "type": "number",
            "description": "認証1件あたりのUSD建て固定料金（JSON数値。DATABASE_VALIDATIONやPHONE_VERIFICATIONなど、料金が変動する機能は含みません）。"
          },
          "min_price": {
            "type": "number",
            "description": "ワークフローグラフのパス全体で最も安い固定料金（USD）。"
          },
          "max_price": {
            "type": "number",
            "description": "ワークフローグラフの全パスのうち最も高い固定料金（USD）。"
          },
          "features": {
            "type": "string",
            "description": "有効な機能を`\" + \"`で連結した単一の文字列です。例: `\"OCR + LIVENESS + FACE_MATCH\"`。リストを得るには`\" + \"`で分割してください。"
          },
          "is_simple_workflow": {
            "type": "boolean",
            "description": "ワークフローにカスタムのワークフローグラフがない場合はtrue。"
          },
          "is_editable": {
            "type": "boolean",
            "description": "このバージョンが`draft`の場合はtrueです（下書きはその場で編集でき、公開済みバージョンはConsoleで変更できません）。"
          },
          "workflow_url": {
            "type": "string",
            "format": "uri",
            "description": "このワークフローの公開共有用認証URL(`https://verify.didit.me/u/<token>`)です。"
          },
          "max_retry_attempts": {
            "type": "integer",
            "description": "認証が却下された後に許可される最大再試行回数（0-10）です。"
          },
          "retry_window_days": {
            "type": "integer",
            "nullable": true,
            "description": "再試行回数のカウントに使用する日単位のローリングウィンドウ(1-365)。`null`は期間無制限の上限を意味します。"
          },
          "session_expiration_time": {
            "type": "integer",
            "description": "未完了のセッションが期限切れになるまでの秒数（3600〜2419200）。"
          },
          "version": {
            "type": "integer",
            "description": "`workflow_id`グループ内のバージョン番号(1から開始)。"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "バージョンのステータス。新しいセッションでは、グループの最新の`published`バージョンが使用されます。"
          },
          "has_draft": {
            "type": "boolean",
            "description": "この`workflow_id`グループ内のいずれかのバージョンが現在ドラフトである場合はtrue。"
          },
          "created_by": {
            "type": "object",
            "nullable": true,
            "description": "このバージョンの作成者：`{name, email, type}`。`type`は`user`（Consoleユーザー、`email`が設定されます）または`api_key`（`name`はクライアントID、`email`はnull）です。作成者が記録されていない場合は`null`です。",
            "properties": {
              "name": {
                "type": "string"
              },
              "email": {
                "type": "string",
                "nullable": true
              },
              "type": {
                "type": "string",
                "enum": [
                  "user",
                  "api_key"
                ]
              }
            }
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SimpleWorkflowRequest": {
        "type": "object",
        "description": "シンプルな直線型ワークフローを作成します。APIはこの機能リストを内部でノードベースのワークフローグラフに変換します。フィールドは厳格なホワイトリスト方式です。ここに記載されていないキー（`workflow_type`を含む）は400で拒否されます。",
        "required": [
          "features"
        ],
        "properties": {
          "workflow_label": {
            "type": "string",
            "maxLength": 50,
            "default": "ID Verification",
            "description": "ワークフローの表示名です（最大50文字）。省略した場合のデフォルトは`\"ID Verification\"`です。ワークフローを区別できるよう、必ず設定してください。",
            "example": "Standard KYC"
          },
          "is_default": {
            "type": "boolean",
            "description": "このワークフローを新しいセッションのデフォルトに設定します。"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "このフィールドを省略すると、セッションですぐに使える公開済みのワークフローが作成されます。公開せずに保存したい場合にのみ`draft`を使用してください。"
          },
          "features": {
            "type": "array",
            "minItems": 1,
            "description": "実行順に並べた認証機能。APIは各項目を次の項目にリンクし、最後のステータスノードを1つ自動的に追加します。",
            "items": {
              "$ref": "#/components/schemas/SimpleWorkflowFeature"
            }
          },
          "is_white_label_enabled": {
            "type": "boolean",
            "description": "このワークフローで作成されたセッションのホワイトラベルカスタマイズを有効にします。",
            "default": false
          },
          "is_desktop_allowed": {
            "type": "boolean",
            "description": "デスクトップブラウザでの認証フローの実行を許可します。",
            "default": false
          },
          "max_retry_attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "default": 3,
            "description": "認証が却下された後に許可される最大再試行回数です。`0`の場合、最初の却下でユーザーはブロックされます。"
          },
          "retry_window_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "nullable": true,
            "default": 7,
            "description": "再試行回数のカウントに使用する日単位のローリングウィンドウ。`null`の場合は期間無制限の上限が適用されます。"
          },
          "face_liveness_max_attempts": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "default": 3,
            "description": "セッション1件あたりのライブネス検知の最大送信回数です。デフォルトは3で、初回の試行1回と再試行2回です。機能レベルの設定で上書きされない限り、この値は生成されるライブネス検知および年齢推定のワークフローノードにもコピーされます。"
          },
          "face_match_max_attempts": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "default": 3,
            "description": "セッション1件あたりの顔照合の最大送信回数です。デフォルトは3で、初回の試行1回と再試行2回です。機能レベルの設定で上書きされない限り、この値は生成される顔照合のワークフローノードにもコピーされます。"
          },
          "session_expiration_time": {
            "type": "integer",
            "minimum": 3600,
            "maximum": 2419200,
            "default": 604800,
            "description": "未完了のセッションが期限切れになるまでの秒数。最小1時間（3600）、最大4週間（2419200）。"
          }
        }
      },
      "SimpleWorkflowUpdateRequest": {
        "type": "object",
        "description": "ワークフローのメタデータを更新するか、線形の機能リスト全体を置き換えます。厳格なフィールドホワイトリストが適用され、ここに記載されていないキーは400で拒否されます。",
        "properties": {
          "workflow_label": {
            "type": "string",
            "maxLength": 50,
            "description": "ワークフローの表示名です（最大50文字）。"
          },
          "is_default": {
            "type": "boolean",
            "description": "このワークフローを新しいセッションのデフォルトに設定します。"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "バージョン管理を制御します。省略すると現在のバージョンがその場で更新されます（下書きは自動的に公開されます）。公開済みのバージョンに`published`を指定すると、新しいバージョンが作成されて返されます。`draft`はバージョンがまだ下書きの間のみ有効です。"
          },
          "features": {
            "type": "array",
            "minItems": 1,
            "description": "指定した場合、機能の順序と設定の全体がこの値で置き換えられます。",
            "items": {
              "$ref": "#/components/schemas/SimpleWorkflowFeature"
            }
          },
          "is_white_label_enabled": {
            "type": "boolean",
            "description": "このワークフローで作成されたセッションのホワイトラベルカスタマイズを有効にします。"
          },
          "is_desktop_allowed": {
            "type": "boolean",
            "description": "デスクトップブラウザでの認証フローの実行を許可します。"
          },
          "max_retry_attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "認証が却下された後に許可される最大再試行回数です。`0`の場合、最初の却下でユーザーはブロックされます。"
          },
          "retry_window_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "nullable": true,
            "description": "再試行回数のカウントに使用する日単位のローリングウィンドウ。`null`の場合は期間無制限の上限が適用されます。"
          },
          "face_liveness_max_attempts": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "description": "セッション1件あたりのライブネス検知の最大送信回数です。機能レベルの設定で上書きされない限り、この値は生成されるライブネス検知および年齢推定のワークフローノードにもコピーされます。"
          },
          "face_match_max_attempts": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "description": "セッション1件あたりの顔照合の最大送信回数です。機能レベルの設定で上書きされない限り、この値は生成される顔照合のワークフローノードにもコピーされます。"
          },
          "session_expiration_time": {
            "type": "integer",
            "minimum": 3600,
            "maximum": 2419200,
            "description": "未完了のセッションが期限切れになるまでの秒数。最小1時間（3600）、最大4週間（2419200）。"
          }
        }
      },
      "SimpleWorkflowFeature": {
        "type": "object",
        "required": [
          "feature"
        ],
        "properties": {
          "feature": {
            "type": "string",
            "description": "実行する機能。ここに示す大文字の値を使用してください。",
            "enum": [
              "OCR",
              "NFC",
              "LIVENESS",
              "FACE_MATCH",
              "PROOF_OF_ADDRESS",
              "QUESTIONNAIRE",
              "DOCUMENT_AI",
              "PHONE_VERIFICATION",
              "EMAIL_VERIFICATION",
              "DATABASE_VALIDATION",
              "AML",
              "IP_ANALYSIS",
              "AGE_ESTIMATION",
              "KYB_REGISTRY",
              "KYB_DOCUMENTS",
              "KYB_KEY_PEOPLE",
              "SIGNATURE"
            ]
          },
          "config": {
            "type": "object",
            "description": "機能固有の設定です。`QUESTIONNAIRE`では、アンケート作成エンドポイントが返す`questionnaire_id`を`questionnaire_uuid`に指定します。`SIGNATURE`では、本番公開するワークフローに署名対象の書類が必要です。各セッションが独自の書類を持ち込めるよう`signature_documents_source`を`session`または`both`に設定するか、`status: \"draft\"`を送信して公開前に書類を追加してください。ワークフローの`signature_availability.aes`が`false`の間は、`signature_level: \"aes\"`は`aes_not_available`で拒否されます。`OCR`では、`methods`で各国が利用できる本人確認の方式（書類撮影、政府機関などの信頼できる情報源に対する書類不要の照会、デジタルIDウォレット）を選択します。省略すると、すべての国で書類撮影のみとなります。`SIGNATURE`については[電子署名の設定](/ja/management-api/workflows/feature-configs#電子署名)を参照してください。`signature_level`は現時点で`simple`（デフォルト。本人確認、メールアドレス、電話番号のいずれも不要）と`aes`を受け付けます。ワークフローの書類とそのフィールドはコンソールで管理されるため、APIでは`signature_documents_source: \"session\"`を指定してセッションごとに書類とフィールドを送信してください。",
            "additionalProperties": true
          },
          "label": {
            "type": "string",
            "description": "このワークフローノードの任意の内部ラベルです。"
          }
        }
      },
      "ReviewItem": {
        "type": "object",
        "description": "セッションのレビュー/アクティビティフィードのエントリー1件。ステータス変更には`previous_status`、`new_status`、`previous_value`、`new_value`、`changed_fields`が含まれ、コメントには`comment`と（Consoleのコメントの場合は）`mentioned_emails`が含まれます。残りのフィールドは、アクティビティの種類に該当しない場合は`null`または空です。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "このフィードエントリの一意の識別子。",
            "example": "de0561bc-5583-4409-9171-1a31a4c8a5f4"
          },
          "activity_type": {
            "type": "string",
            "enum": [
              "COMMENT",
              "STATUS_UPDATED",
              "KYC_DATA_UPDATED",
              "POA_DATA_UPDATED",
              "FILE_ADDED",
              "FILE_REMOVED",
              "AML_ONGOING_MATCH",
              "AML_STATUS_UPDATED",
              "AML_HIT_STATUS_UPDATED",
              "KYB_DATA_UPDATED",
              "KYB_DOCUMENT_UPLOADED",
              "TAG_ADDED",
              "TAG_REMOVED",
              "FEATURE_OVERRIDE_PENDING",
              "FEATURE_OVERRIDE_APPLIED",
              "FEATURE_OVERRIDE_CANCELLED"
            ],
            "description": "このエントリが記録するアクティビティの種類です。`STATUS_UPDATED`の行は、手動の判定（`PATCH /v3/session/{session_id}/update-status/`）と、`POST …/reviews/`で追加されたエントリ（ステータスが記録されていない場合もデフォルトでこの種類になります）から作成されます。`COMMENT`の行はConsoleのレビュアーから作成されます。Consoleの詳細ページの閲覧も、`metadata.system_event = \"DETAIL_VIEWED\"`のフラグが付いた`COMMENT`行として保存されます。残りの種類は、データの編集、ファイルの変更、タグ、AMLモニタリングのアクティビティを記録します。STATUS_UPDATEDの行は、update-statusエンドポイントと手動レビューの投稿だけでなく、システムのアクター（例: actor_typeがSYSTEMの継続的なAMLモニタリングや、機能ステータスの自動更新）によっても書き込まれます。`FEATURE_OVERRIDE_PENDING`、`FEATURE_OVERRIDE_APPLIED`、`FEATURE_OVERRIDE_CANCELLED`は、1つのチェックのステータスのオーバーライド（`PATCH /v3/session/{session_id}/features/{node_id}/update-status/`）を記録します。それぞれ、フローの完了を待つようリクエストされた、適用された、キャンセルされたことを表します。これらはチェックのステータスを`previous_value` / `new_value`（`{\"status\": ...}`）に保持し、`previous_status`と`new_status`は`null`のままにし、`metadata`（`feature_override_id`、`node_id`、`feature_model`、`forced`、`state`、`cancel_reason`）でオーバーライドを示します。リクエストのエントリにはレビュアーの`comment`が含まれます。フローの完了時に適用されたオーバーライドは、`actor_type` `SYSTEM`で記録されます。",
            "example": "STATUS_UPDATED"
          },
          "actor_display": {
            "type": "string",
            "description": "人が読める作成者ラベル。次の順で解決されます：アクターの氏名 → Consoleアカウント識別子 → `actor_email`のローカル部分 → `\"API Client\"`（`API_KEY`アクターの場合） → `\"System\"`（`SYSTEM`アクターの場合） → `\"Unknown\"`。`POST …/reviews/`で作成されたエントリは、このエンドポイントがアクターの帰属を記録しないため、常に`\"Unknown\"`と表示されます。",
            "example": "API Client"
          },
          "actor_email": {
            "type": "string",
            "nullable": true,
            "description": "アクションを実行したConsoleユーザーのメールアドレス。APIキーおよびシステムによる実行の場合は`null`。",
            "example": null
          },
          "actor_type": {
            "type": "string",
            "enum": [
              "API_KEY",
              "CONSOLE_USER",
              "SYSTEM"
            ],
            "description": "アクションを実行した主体：APIキー、Consoleユーザー、またはDidit自身（`SYSTEM`、例：継続的なAMLモニタリング）。`POST …/reviews/`で作成されたエントリには、呼び出し元にかかわらずデフォルトの`CONSOLE_USER`が設定されます。",
            "example": "API_KEY"
          },
          "new_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User"
            ],
            "description": "このエントリで記録されたセッションステータス（ステータス更新の場合）。コメントやデータ変更のエントリでは`null`です。",
            "example": "Approved"
          },
          "previous_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User"
            ],
            "description": "変更前のセッションのステータス。ステータス更新エンドポイントが書き込む`STATUS_UPDATED`エントリに設定されます。`POST …/reviews/`で追加されたエントリでは`null`です。システムが書き込んだSTATUS_UPDATED行にも設定されます。",
            "example": "In Review"
          },
          "comment": {
            "type": "string",
            "nullable": true,
            "description": "エントリーに付与された自由記述のメモ、または`null`。",
            "example": "Document re-checked manually; address matches."
          },
          "mentioned_emails": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            },
            "description": "コメント内で`@email`でメンションされたコンソールユーザー。このAPI経由で作成されたエントリでは常に空です。メンション処理はコンソール専用の機能です。",
            "example": []
          },
          "previous_value": {
            "type": "object",
            "nullable": true,
            "description": "アクションによって変更されたデータの、アクション実行前の状態を示すスナップショット。例: ステータス変更時の`{\"status\": \"In Review\"}`。何も変更されなかった場合は`null`です。",
            "example": {
              "status": "In Review"
            }
          },
          "new_value": {
            "type": "object",
            "nullable": true,
            "description": "アクション後に変更されたデータのスナップショット(例: `{\"status\": \"Approved\"}`)。何も変更されていない場合は`null`です。",
            "example": {
              "status": "Approved"
            }
          },
          "changed_fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このアクティビティによって変更されたフィールドの名前（例: `[\"status\"]`）。コメント、および`POST …/reviews/`で追加されたエントリでは空です。",
            "example": [
              "status"
            ]
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "システムが生成したエントリの追加情報です。コンソールの詳細ページの閲覧には`{\"system_event\": \"DETAIL_VIEWED\", \"detail_type\": \"verification\"}`が含まれるため、通知ロジックから除外できます。通常のエントリでは`null`です。",
            "example": null
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "エントリーが書き込まれた日時（ISO 8601、UTC）。",
            "example": "2026-06-12T00:19:31.918735Z"
          }
        }
      },
      "QuestionnaireListItem": {
        "type": "object",
        "description": "一覧表示におけるアンケートのバージョン1件です。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "バージョンごとのUUIDです。取得/更新/削除では`{questionnaire_uuid}`として、ワークフローのQUESTIONNAIRE機能の設定では`questionnaire_uuid`として使用します。"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default_language": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_simple_questionnaire": {
            "type": "boolean",
            "description": "このAPIで作成された線形アンケートの場合はtrue、Consoleで構築されたグラフベースのアンケートの場合はfalse。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "question_types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "回答可能な質問の要素タイプ（大文字）を作成順に並べたもの（例: `SHORT_TEXT`、`MULTIPLE_CHOICE`、`FILE_UPLOAD`）。構造用の`SECTION_HEADER`要素と`SEPARATOR`要素は除外されます。質問ごとに1エントリのため、値が重複する場合があります。"
          },
          "workflow_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このアンケートを使用しているワークフローの名前。現在このエンドポイントでは常に`[]`です（値が入るのはConsoleの一覧のみです）。"
          },
          "questionnaire_group_id": {
            "type": "string",
            "format": "uuid",
            "description": "同じアンケートのすべてのバージョンをまとめる不変の識別子。"
          },
          "version": {
            "type": "integer",
            "description": "グループ内のバージョン番号(1から開始)。"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "published_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このバージョンが公開された日時。下書きの場合は`null`です。"
          },
          "is_editable": {
            "type": "boolean",
            "description": "このバージョンが`draft`の場合はtrueです。"
          }
        }
      },
      "SimpleQuestionnaireRequest": {
        "type": "object",
        "description": "シンプルな直線型アンケートを作成します。APIは`form_elements`を内部のアンケートグラフに変換します。",
        "required": [
          "title",
          "languages",
          "form_elements"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "アンケートの内部名。"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "languages": {
            "type": "array",
            "description": "すべてのラベルに含まれる言語。`en`を含める必要があります。",
            "items": {
              "type": "string"
            },
            "example": [
              "en"
            ]
          },
          "default_language": {
            "type": "string",
            "description": "デフォルト言語。`languages`に含まれている必要があります。",
            "example": "en"
          },
          "is_active": {
            "type": "boolean",
            "default": true
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "このフィールドを省略すると、ワークフローですぐに使える公開済みのアンケートが作成されます。"
          },
          "form_elements": {
            "type": "array",
            "minItems": 1,
            "description": "ユーザーに表示する正確な順序で並べた質問。分岐や条件付きフィールドはサポートされていません。",
            "items": {
              "$ref": "#/components/schemas/SimpleQuestionnaireElement"
            }
          }
        }
      },
      "SimpleQuestionnaireUpdateRequest": {
        "type": "object",
        "description": "アンケートのメタデータを更新するか、線形の`form_elements`リスト全体を置き換えます。",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default_language": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "form_elements": {
            "type": "array",
            "minItems": 1,
            "description": "指定した場合、線形の質問リスト全体がこの値で置き換えられます。",
            "items": {
              "$ref": "#/components/schemas/SimpleQuestionnaireElement"
            }
          }
        }
      },
      "SimpleQuestionnaireElement": {
        "type": "object",
        "required": [
          "element_type",
          "label"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "任意の固定の質問IDです。省略すると、APIが`q1`、`q2`などを生成します。読みやすさのため、小文字の英字、数字、アンダースコアを使用してください。",
            "example": "source_of_funds"
          },
          "element_type": {
            "type": "string",
            "description": "質問タイプ。APIはこれらの小文字の値と、対応する大文字の値を受け付けます。",
            "enum": [
              "short_text",
              "long_text",
              "dropdown",
              "single_choice",
              "multiple_choice",
              "number",
              "image",
              "file_upload",
              "time",
              "email",
              "address",
              "phone",
              "country",
              "date_picker",
              "consent",
              "section_header",
              "separator",
              "heading",
              "paragraph"
            ]
          },
          "label": {
            "type": "object",
            "description": "言語コードごとの質問ラベル。例えば`{ \"en\": \"Source of funds\" }`のように指定します。",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": {
            "type": "object",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          },
          "placeholder": {
            "type": "object",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          },
          "is_required": {
            "type": "boolean",
            "default": false
          },
          "options": {
            "type": "array",
            "description": "`dropdown`、`single_choice`、`multiple_choice`で使用します。`value`を省略した場合、APIがオプションのラベルから値を生成します。",
            "items": {
              "type": "object",
              "required": [
                "label"
              ],
              "properties": {
                "value": {
                  "type": "string"
                },
                "label": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "max_files": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "description": "`file_upload`または`image`と併用します。"
          },
          "validation": {
            "type": "object",
            "nullable": true,
            "description": "`short_text`、`long_text`、`number`に対する任意の形式検証です。ユーザーがフィールドに入力している間に適用され（検証を通過するまで先に進めません）、送信時にAPIでも再チェックされます。",
            "properties": {
              "pattern": {
                "type": "string",
                "description": "値が完全に一致する必要がある正規表現（ECMA-262のサブセット）。`short_text`と`long_text`で使用します。^/$アンカーは追加しないでください。値全体が照合されます。"
              },
              "min_length": {
                "type": "integer",
                "minimum": 0,
                "description": "最小文字数。`short_text`と`long_text`で使用します。"
              },
              "max_length": {
                "type": "integer",
                "minimum": 0,
                "description": "最大文字数です。`short_text`および`long_text`で使用します。"
              },
              "min": {
                "type": "number",
                "description": "数値の最小値。`number`で使用します。"
              },
              "max": {
                "type": "number",
                "description": "数値の最大値です。`number`で使用します。"
              },
              "error_message": {
                "type": "object",
                "description": "検証に失敗したときに表示される翻訳済みメッセージ。言語コードをキーとします。",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "QuestionnaireDetail": {
        "type": "object",
        "description": "GET、POST（作成）、PATCH（更新）の各エンドポイントから返されるアンケートの完全な詳細。",
        "properties": {
          "questionnaire_id": {
            "type": "string",
            "format": "uuid",
            "description": "アンケートの一意の識別子。ワークフローからアンケートを参照する場合や、以降の更新・削除リクエストでこのIDを使用します。"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default_language": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_simple_questionnaire": {
            "type": "boolean"
          },
          "graph": {
            "type": "object",
            "description": "start_nodeとnodesマップを含むグラフ構造。"
          },
          "sections": {
            "type": "array",
            "description": "セクションごとにまとめられたアンケートの内容（グラフから導出）。",
            "items": {
              "type": "object"
            }
          },
          "questionnaire_group_id": {
            "type": "string",
            "format": "uuid",
            "description": "同じアンケートのすべてのバージョンをまとめる不変の識別子。"
          },
          "version": {
            "type": "integer"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "published_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "is_editable": {
            "type": "boolean",
            "description": "アンケートをその場で編集できる場合（ドラフトバージョン）はtrue。"
          }
        }
      },
      "UserListItem": {
        "type": "object",
        "description": "認証済みのユーザー。",
        "properties": {
          "didit_internal_id": {
            "type": "string",
            "format": "uuid",
            "description": "このユーザーに対するDiditの安定した内部UUIDです。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "このユーザーに対するお客様独自の識別子です（セッション作成時に渡されたもの）。ベンダー識別子が指定されなかった場合はnullになることがあります。"
          },
          "display_name": {
            "type": "string",
            "nullable": true,
            "description": "お客様が設定したカスタム表示名"
          },
          "full_name": {
            "type": "string",
            "nullable": true,
            "description": "認証済みの書類から抽出された氏名"
          },
          "date_of_birth": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "effective_name": {
            "type": "string",
            "nullable": true,
            "description": "利用可能な最適な名前：display_nameが設定されていればそれを、設定されていなければfull_nameを使用"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "FLAGGED",
              "BLOCKED"
            ],
            "description": "ユーザーレコードのライフサイクルステータス（セッションのステータスではありません）。`ACTIVE`がデフォルトで、`FLAGGED`はユーザーを手動での確認対象としてマークし、`BLOCKED`はこの`vendor_data`での新規セッションを禁止します。"
          },
          "portrait_image_url": {
            "type": "string",
            "nullable": true,
            "description": "ユーザーの顔写真の署名付きURL（数時間後に期限切れ）"
          },
          "session_count": {
            "type": "integer",
            "description": "このユーザーの認証セッションの総数"
          },
          "approved_count": {
            "type": "integer",
            "description": "承認済みセッションの数"
          },
          "declined_count": {
            "type": "integer",
            "description": "却下されたセッションの数"
          },
          "in_review_count": {
            "type": "integer",
            "description": "レビュー中のセッション数"
          },
          "issuing_states": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このユーザーの承認済み身分証明書類で確認された発行国のISO 3166-1 alpha-3コード。例: `[\"USA\", \"ESP\"]`。該当がない場合は空の配列です。"
          },
          "approved_emails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このユーザーの承認済みセッションから収集された認証済みメールアドレス。例: `[\"john@example.com\"]`。"
          },
          "approved_phones": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このユーザーの承認済みセッションから収集された認証済み電話番号。例: `[\"+14155551234\"]`。"
          },
          "features": {
            "type": "object",
            "description": "このユーザーのすべてのセッションを通じた、機能ごとの集計ステータスです。取り得るキーは`ID_VERIFICATION`、`NFC`、`LIVENESS`、`FACE_MATCH`、`POA`、`QUESTIONNAIRE`、`EMAIL_VERIFICATION`、`PHONE`、`AML`、`IP_ANALYSIS`、`AGE_ESTIMATION`、`DATABASE_VALIDATION`です。取り得る値は`Approved`、`Declined`、`In Review`、`Not Finished`、`Resub Requested`です。"
          },
          "features_list": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "feature": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              }
            },
            "description": "`features`と同じデータを、`{feature, status}`オブジェクトの順序付き配列で表したもの。"
          },
          "last_session_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "直近のセッションの日時"
          },
          "first_session_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "最初のセッションの日時"
          },
          "last_activity_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このユーザーの直近のアクティビティ(セッション、取引、ステータス変更、データ編集など)の日時。"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              }
            },
            "description": "このユーザーに割り当てられたタグ"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BlocklistItem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "face",
              "document",
              "phone",
              "email"
            ]
          },
          "session_id": {
            "type": "string",
            "format": "uuid"
          },
          "session_number": {
            "type": "integer"
          },
          "blocklisted_at": {
            "type": "string",
            "format": "date-time"
          },
          "face_image": {
            "type": "string",
            "nullable": true
          },
          "document_type": {
            "type": "string",
            "nullable": true
          },
          "document_number": {
            "type": "string",
            "nullable": true
          },
          "phone_number": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserDetailItem": {
        "type": "object",
        "description": "ユーザーの完全な詳細。UserListItemを拡張し、メタデータ、コメント、updated_atを追加します。",
        "allOf": [
          {
            "$ref": "#/components/schemas/UserListItem"
          },
          {
            "type": "object",
            "properties": {
              "metadata": {
                "type": "object",
                "description": "このユーザーに付加したカスタムメタデータJSON。デフォルトは`{}`です。"
              },
              "tags": {
                "type": "array",
                "description": "タグの割り当て。注意: 詳細レスポンスでは、各エントリはタグの*リンク*オブジェクト(`{uuid, tag: {...}, added_by_email, added_by_name, created_at}`)であり、一覧レスポンスで使われるフラットな`{uuid, name, color}`形式とは異なります。",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "description": "タグ割り当てのUUID(タグ自体のUUIDではありません)。"
                    },
                    "tag": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "name": {
                          "type": "string"
                        },
                        "color": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string",
                          "nullable": true
                        },
                        "source": {
                          "type": "string",
                          "enum": [
                            "didit",
                            "custom"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "updated_at": {
                          "type": "string",
                          "format": "date-time"
                        }
                      }
                    },
                    "added_by_email": {
                      "type": "string",
                      "nullable": true
                    },
                    "added_by_name": {
                      "type": "string",
                      "nullable": true
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              },
              "comments": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "comment_type": {
                      "type": "string",
                      "enum": [
                        "COMMENT",
                        "STATUS_CHANGED",
                        "METADATA_UPDATED",
                        "TAG_ADDED",
                        "TAG_REMOVED",
                        "PROFILE_UPDATED"
                      ]
                    },
                    "comment": {
                      "type": "string",
                      "nullable": true
                    },
                    "actor_email": {
                      "type": "string",
                      "nullable": true
                    },
                    "actor_name": {
                      "type": "string",
                      "nullable": true
                    },
                    "previous_status": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "ACTIVE",
                        "FLAGGED",
                        "BLOCKED",
                        null
                      ]
                    },
                    "new_status": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "ACTIVE",
                        "FLAGGED",
                        "BLOCKED",
                        null
                      ]
                    },
                    "previous_value": {
                      "type": "object",
                      "nullable": true,
                      "description": "PROFILE_UPDATEDエントリの変更前のフィールド値。"
                    },
                    "new_value": {
                      "type": "object",
                      "nullable": true,
                      "description": "PROFILE_UPDATEDエントリーの新しいフィールド値。"
                    },
                    "changed_fields": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "PROFILE_UPDATEDエントリによって変更されたフィールドの名前。"
                    },
                    "metadata": {
                      "type": "object",
                      "nullable": true
                    },
                    "mentioned_emails": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "description": "このユーザーのアクティビティログとコメント（ステータスの変更、プロフィールの編集、手動メモ）。"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        ]
      },
      "BusinessListItem": {
        "type": "object",
        "description": "認証済みの企業。",
        "properties": {
          "didit_internal_id": {
            "type": "string",
            "format": "uuid",
            "description": "この企業に対するDiditの安定した内部UUIDです。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この企業に対するお客様独自の識別子です（セッション作成時に渡されたもの）。ベンダー識別子が指定されなかった場合はnullになることがあります。"
          },
          "display_name": {
            "type": "string",
            "nullable": true,
            "description": "お客様が設定したカスタム表示名"
          },
          "legal_name": {
            "type": "string",
            "nullable": true,
            "description": "登記簿または手動入力による正式な法人名"
          },
          "registration_number": {
            "type": "string",
            "nullable": true,
            "description": "会社の登記番号または設立番号"
          },
          "country_code": {
            "type": "string",
            "nullable": true,
            "description": "設立国（ISO 3166-1 alpha-2、例: `GB`、`US`）。"
          },
          "effective_name": {
            "type": "string",
            "nullable": true,
            "description": "利用可能な最適な名前：display_nameが設定されていればそれを、設定されていなければlegal_nameを使用"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "FLAGGED",
              "BLOCKED"
            ],
            "description": "企業レコードのライフサイクルステータス（セッションのステータスではありません）。`ACTIVE`がデフォルトで、`FLAGGED`は手動での確認対象としてマークし、`BLOCKED`はこの`vendor_data`での新規セッションを禁止します。"
          },
          "session_count": {
            "type": "integer",
            "description": "この企業の認証セッションの総数"
          },
          "approved_count": {
            "type": "integer",
            "description": "承認済みセッションの数"
          },
          "declined_count": {
            "type": "integer",
            "description": "却下されたセッションの数"
          },
          "in_review_count": {
            "type": "integer",
            "description": "レビュー中のセッション数"
          },
          "features": {
            "type": "object",
            "description": "この企業のすべてのKYBセッションを通じた、機能ごとの集計ステータスです。現在のキーは`KYB`（登記上の企業チェックのステータス）のみです。取り得る値は`Approved`、`Declined`、`In Review`、`Not Finished`、`Resub Requested`です。"
          },
          "features_list": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "feature": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              }
            },
            "description": "`features`と同じデータを、`{feature, status}`オブジェクトの順序付き配列で表したもの。"
          },
          "last_session_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "直近のセッションの日時"
          },
          "first_session_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "最初のセッションの日時"
          },
          "last_activity_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "直近のアクティビティ(ステータス変更、セッション更新など)の日時"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              }
            },
            "description": "この企業に割り当てられたタグ"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BusinessDetailItem": {
        "type": "object",
        "description": "企業の完全な詳細。BusinessListItemにmetadataとupdated_atを追加したものです。",
        "allOf": [
          {
            "$ref": "#/components/schemas/BusinessListItem"
          },
          {
            "type": "object",
            "properties": {
              "metadata": {
                "type": "object",
                "description": "この企業に付加したカスタムメタデータJSON。デフォルトは`{}`です。"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        ]
      },
      "TransactionDetail": {
        "type": "object",
        "description": "1件の取引に関する完全なモニタリング記録。`GET /v3/transactions/{transaction_id}/`および`POST /v3/transactions/`から返されます。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "Diditの安定した取引識別子です。後続の呼び出しで`{transaction_id}`として使用します。"
          },
          "environment": {
            "type": "string",
            "enum": [
              "live",
              "sandbox"
            ],
            "description": "取引を所有するアプリケーションの環境。`sandbox`の取引は保存されますが、評価、スクリーニング、通知、請求は一切行われません。そのため、空の`rule_runs`は「未評価」を意味します。"
          },
          "transaction_number": {
            "type": "integer",
            "description": "Consoleに表示される、アプリケーション単位の取引の連番（例: `4123`）。"
          },
          "txn_id": {
            "type": "string",
            "description": "作成時に指定した`transaction_id`（最大128文字）。アプリケーションごとに一意です。"
          },
          "txn_date": {
            "type": "string",
            "format": "date-time",
            "description": "取引が発生した日時（`transaction_at`の値。デフォルトは送信日時）。"
          },
          "zone_id": {
            "type": "string",
            "nullable": true,
            "description": "作成時に指定されたIANAタイムゾーン識別子。"
          },
          "transaction_type": {
            "type": "string",
            "description": "保存されている最上位カテゴリー: `finance`、`kyc`、`travelRule`、`userPlatformEvent`、`gamblingBet`、`gamblingLimitChange`、`gamblingBonusChange`、`auditTrailEvent`。複数語の値は、snake_caseで送信した場合でもcamelCaseで返される点に注意してください。"
          },
          "action_type": {
            "type": "string",
            "description": "カテゴリ内のサブタイプ（例: `deposit`、`withdrawal`、`transfer`）。指定しない場合はカテゴリがデフォルトになります。"
          },
          "direction": {
            "type": "string",
            "enum": [
              "INBOUND",
              "OUTBOUND"
            ],
            "description": "対象者から見た方向です。送信時の大文字・小文字にかかわらず大文字で保存されます（入力では`in`/`out`/`inbound`/`outbound`を受け付けます）。"
          },
          "status": {
            "type": "string",
            "enum": [
              "APPROVED",
              "IN_REVIEW",
              "DECLINED",
              "AWAITING_USER"
            ],
            "description": "現在のモニタリング判定。取引は`APPROVED`で作成され、ルールによって同期的に`IN_REVIEW`/`DECLINED`に変更される場合があります。"
          },
          "source": {
            "type": "string",
            "enum": [
              "LIVE",
              "IMPORTED"
            ],
            "description": "レコードの発生元：APIまたはSDKで送信された取引は`LIVE`、コンソールのインポートで読み込まれた取引は`IMPORTED`。"
          },
          "amount": {
            "type": "string",
            "description": "末尾のゼロを除去した10進数文字列で表した取引金額（例: `\"1500\"`、`\"0.5\"`、`\"0.123456789012345678\"`）。小数点以下最大18桁です。"
          },
          "currency": {
            "type": "string",
            "description": "`amount`の通貨コード。ISO 4217の任意のアルファベットコード（例: `EUR`、`USD`、`NGN`）と暗号資産シンボル（例: `BTC`）を受け付けます。現在流通しているコードを推奨します。受け付けられるすべてのコードに為替レートがあるわけではありません。コードに為替レートがない場合（たとえばISOの会計単位`XSU`や、Diditが価格を付けていない暗号資産シンボル）、自動換算は失敗し、リクエストで換算済みの`amount_in_default_currency`を指定していない限り`preferred_currency_amount`はnullで返されます。"
          },
          "currency_type": {
            "type": "string",
            "nullable": true,
            "description": "`currency_kind`で送信されたとおりの`fiat`または`crypto`。"
          },
          "amount_in_default_currency": {
            "type": "string",
            "nullable": true,
            "description": "指定された事前換算済みの金額。末尾のゼロを除いた10進数の文字列です。"
          },
          "default_currency_code": {
            "type": "string",
            "nullable": true
          },
          "preferred_currency_amount": {
            "type": "string",
            "nullable": true,
            "description": "利用可能な場合に、アプリケーションの優先通貨に換算した`amount`です。"
          },
          "preferred_currency_code": {
            "type": "string",
            "nullable": true
          },
          "payment_details": {
            "type": "string",
            "nullable": true,
            "description": "送信内容に含まれる自由記述の支払い参照情報またはメモ。"
          },
          "payment_txn_id": {
            "type": "string",
            "nullable": true,
            "description": "`payment_reference_id`から取得した外部決済システムの参照番号です（例: ブロックチェーンの取引ハッシュ）。"
          },
          "score": {
            "type": "integer",
            "description": "ルールによって累積されたリスクスコア(通常0~100)。値が高いほどリスクが高くなります。"
          },
          "severity": {
            "type": "string",
            "nullable": true,
            "enum": [
              "UNKNOWN",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ],
            "description": "ルールまたはプロバイダーが設定するカテゴリ別のリスク重大度（`UNKNOWN`、`LOW`、`MEDIUM`、`HIGH`、`CRITICAL`）。いずれかによって設定されるまでは`null`です。"
          },
          "decision_reason_code": {
            "type": "string",
            "nullable": true,
            "description": "現在の`status`の機械可読な理由。"
          },
          "decision_reason_label": {
            "type": "string",
            "nullable": true,
            "description": "`decision_reason_code`の人が読めるラベル。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "申請者の`vendor_data`の便宜上のコピー。"
          },
          "metadata": {
            "type": "object",
            "description": "作成時に送信された`subject`および`counterparty`ペイロードのスナップショット。"
          },
          "props": {
            "type": "object",
            "description": "作成時に指定した`custom_properties`です。各キーはルールの条件内で`custom_values.<key>`として参照できます。"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                },
                "description": {
                  "type": "string",
                  "nullable": true
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "didit",
                    "custom"
                  ],
                  "description": "タグがDiditのプリセットかカスタムタグか。"
                }
              }
            },
            "description": "取引に付与されたタグ(手動またはルールによる)。"
          },
          "parties": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "APPLICANT",
                    "REMITTER",
                    "BENEFICIARY",
                    "COUNTERPARTY"
                  ],
                  "description": "関係者の役割。作成エンドポイントは`APPLICANT`（対象者）と`COUNTERPARTY`を割り当てます。"
                },
                "entity_type": {
                  "type": "string",
                  "enum": [
                    "individual",
                    "company",
                    "external",
                    "unhostedWallet"
                  ]
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "USER",
                    "BUSINESS",
                    "EXTERNAL"
                  ],
                  "description": "`USER`/`BUSINESS`の当事者は、`vendor_data`を介してDiditが所有するエンティティに紐付きます。`EXTERNAL`の当事者には、背後にDiditのエンティティがありません。"
                },
                "vendor_data": {
                  "type": "string",
                  "nullable": true,
                  "description": "お客様の内部ユーザー/企業識別子です。"
                },
                "full_name": {
                  "type": "string",
                  "nullable": true
                },
                "first_name": {
                  "type": "string",
                  "nullable": true
                },
                "last_name": {
                  "type": "string",
                  "nullable": true
                },
                "country_code": {
                  "type": "string",
                  "nullable": true,
                  "description": "送信された`address.country`から取得した国コード(通常はISO 3166-1 alpha-3)。"
                },
                "dob": {
                  "type": "string",
                  "format": "date",
                  "nullable": true,
                  "description": "送信された`date_of_birth`の生年月日。"
                },
                "address": {
                  "type": "object",
                  "description": "送信されたとおりの住所オブジェクト。省略された場合は`{}`です。"
                },
                "institution_info": {
                  "type": "object",
                  "description": "送信されたとおりの機関の詳細。省略した場合は`{}`です。"
                },
                "device": {
                  "type": "object",
                  "description": "正規化されたデバイスコンテキスト。IPが指定された場合は、network_context配下にサーバー側のIPエンリッチメント（位置情報、VPN/データセンターのフラグ）が含まれます。",
                  "properties": {
                    "fingerprint": {
                      "type": "string",
                      "description": "一意のデバイスフィンガープリント。"
                    },
                    "persistent_device_id": {
                      "type": "string",
                      "description": "セッションをまたいで不変のデバイス識別子(v2フィンガープリントスキーマ)。"
                    },
                    "user_agent": {
                      "type": "string",
                      "description": "ブラウザまたはアプリのユーザーエージェント文字列。"
                    },
                    "browser_family": {
                      "type": "string",
                      "description": "ブラウザーファミリー（例：Chrome、Firefox、Safari）。"
                    },
                    "browser_version": {
                      "type": "string",
                      "description": "ブラウザのバージョン文字列。"
                    },
                    "platform": {
                      "type": "string",
                      "description": "プラットフォーム識別子(web、ios、android、macos、windows、linux)。"
                    },
                    "os_family": {
                      "type": "string",
                      "description": "オペレーティングシステムのファミリー（例: iOS、Android、Windows）。"
                    },
                    "os_version": {
                      "type": "string",
                      "description": "オペレーティングシステムのバージョン文字列です。"
                    },
                    "accept_language": {
                      "type": "string",
                      "description": "Accept-Languageヘッダーの値。"
                    },
                    "session_id": {
                      "type": "string",
                      "description": "セッション識別子（メタデータに保存）。"
                    },
                    "session_age_ms": {
                      "type": "number",
                      "description": "セッションの経過時間（ミリ秒）。"
                    },
                    "network_context": {
                      "type": "object",
                      "description": "IPアドレスと位置情報を含むネットワークコンテキスト。",
                      "properties": {
                        "ip_address": {
                          "type": "string",
                          "description": "クライアントのIPアドレス。"
                        },
                        "ip_country_code": {
                          "type": "string",
                          "description": "IPアドレスの位置情報から特定された国（ISO 3166-1 alpha-3）。"
                        },
                        "latitude": {
                          "type": "number",
                          "description": "IPの地理的な緯度。"
                        },
                        "longitude": {
                          "type": "number",
                          "description": "IPの地理的な経度。"
                        }
                      }
                    }
                  }
                },
                "external_party_snapshot": {
                  "type": "object",
                  "nullable": true,
                  "description": "`EXTERNAL`当事者の当事者データの固定コピー。当事者がDiditのユーザーまたは企業にリンクされている間は`null`です。"
                }
              }
            },
            "description": "取引の当事者（申請者、取引相手）。"
          },
          "payment_methods": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "payment_method_type": {
                  "type": "string",
                  "enum": [
                    "bank_card",
                    "bank_account",
                    "e_wallet",
                    "crypto_wallet",
                    "unhosted_wallet",
                    "other"
                  ]
                },
                "label": {
                  "type": "string",
                  "nullable": true
                },
                "fingerprint": {
                  "type": "string",
                  "nullable": true,
                  "description": "`type:account_id:issuing_country`に対するSHA-256。同一の手段の再利用を関連付けるための安定した識別子です。"
                },
                "account_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "口座識別子（IBAN、ウォレットアドレス、カードトークンなど）。"
                },
                "issuing_country": {
                  "type": "string",
                  "nullable": true
                },
                "owner_kind": {
                  "type": "string",
                  "enum": [
                    "USER",
                    "BUSINESS",
                    "EXTERNAL"
                  ]
                },
                "vendor_data": {
                  "type": "string",
                  "nullable": true,
                  "description": "所有するユーザー/企業に対するお客様の識別子です。"
                },
                "owner_name": {
                  "type": "string",
                  "nullable": true
                },
                "institution_info": {
                  "type": "object"
                },
                "details": {
                  "type": "object",
                  "description": "送信されたままの生の`payment_method`オブジェクト。"
                },
                "external_owner_snapshot": {
                  "type": "object",
                  "nullable": true
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "SOURCE",
                    "DESTINATION",
                    "FUNDING",
                    "BENEFICIARY"
                  ],
                  "description": "この手段が取引でどのように使われたか。作成エンドポイントは方向に基づいて`SOURCE`/`DESTINATION`を割り当てます（送信：対象者 = SOURCE、受信：対象者 = DESTINATION）。"
                }
              }
            },
            "description": "取引に紐づく支払い方法。"
          },
          "documents": {
            "type": "array",
            "description": "コンソールから取引に添付されたファイル。ない場合は`[]`です。",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "label": {
                  "type": "string",
                  "nullable": true
                },
                "note": {
                  "type": "string",
                  "nullable": true
                },
                "uploaded_by": {
                  "type": "string",
                  "nullable": true
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "files": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "file_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true,
                        "description": "有効期間の短い署名付きダウンロードURL。保存せず、必要なときに取得してください。"
                      },
                      "original_filename": {
                        "type": "string",
                        "nullable": true
                      },
                      "file_size": {
                        "type": "integer",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          },
          "activities": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "activity_type": {
                  "type": "string",
                  "description": "例：`TRANSACTION_CREATED`、`TRANSACTION_NOTE_ADDED`、`TRANSACTION_STATUS_CHANGED`。"
                },
                "source": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "nullable": true
                },
                "title": {
                  "type": "string",
                  "nullable": true
                },
                "description": {
                  "type": "string",
                  "nullable": true
                },
                "metadata": {
                  "type": "object"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "description": "アクティビティログのエントリ（作成、メモ、手動レビュー、ステータスの変更）。"
          },
          "alerts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string",
                  "nullable": true
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "UNKNOWN",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "CRITICAL"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "OPEN",
                    "INVESTIGATING",
                    "AWAITING_USER",
                    "PENDING_SAR",
                    "SAR_FILED",
                    "RESOLVED",
                    "DISMISSED"
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "RULE",
                    "PROVIDER",
                    "MANUAL"
                  ]
                },
                "metadata": {
                  "type": "object"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                }
              }
            },
            "description": "現在は常に空です。未対応のアラートとは、ステータスが`IN_REVIEW`または`AWAITING_USER`の取引です。"
          },
          "rule_runs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "rule": {
                  "type": "string",
                  "format": "uuid",
                  "description": "実行されたルールのUUID。"
                },
                "rule_title": {
                  "type": "string"
                },
                "rule_description": {
                  "type": "string",
                  "nullable": true
                },
                "rule_category": {
                  "type": "string"
                },
                "matched": {
                  "type": "boolean",
                  "description": "ルールの条件がこの取引に一致したかどうか。実行記録は一致したルールについてのみ残るため、本番の評価では常に`true`になります。"
                },
                "is_test": {
                  "type": "boolean",
                  "description": "ルールがTESTモードで実行された場合はtrue（ステータス/スコアには影響しません）。"
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "ACTIVE",
                    "DISABLED",
                    "TEST"
                  ]
                },
                "severity": {
                  "type": "string",
                  "nullable": true
                },
                "score_delta": {
                  "type": "integer",
                  "description": "このルールの`add_score`アクションによって加算されたスコア。"
                },
                "status_target": {
                  "type": "string",
                  "nullable": true,
                  "description": "`change_status`アクションで設定されたステータス（設定された場合）。"
                },
                "action_summary": {
                  "type": "string",
                  "nullable": true,
                  "description": "ルールが実行したアクションの概要で、`; `で連結されます（例：`score +30; change_status:IN_REVIEW; add_tag:high_risk_country`）。構成要素：`score +N`、`change_status:<STATUS>`、`add_tag:<name>`、`add_note`、`add_to_list`、`open_case`。ルールがアクションを実行しなかった場合は`null`です。"
                },
                "metadata": {
                  "type": "object",
                  "description": "評価の詳細:`scope_match`、`conditions[]`、`aggregations[]`。各条件エントリには、`field`、`operator`、`expected_value`、取引から読み取った`current_value`、`matched`、`group_index`、`group_logic`が含まれます。各集計エントリ(velocity / count / sum)には、`metric`、`field`、`operator`、`expected_value`、集計の評価結果である`computed_value`、`window`、`filters`、`matched`、`sample_references`が含まれます。遅延された非同期集計では`computed_value: null`および`deferred: true`となります。ネストされた条件グループは、`operator`が`any_of`または`all_of`で`field`がnullの1つの`conditions[]`エントリであり、メンバーの結果はそのエントリ自身の`conditions`の下に格納されます。"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "description": "ルールごとの実行結果です。どのルールが発動し、スコアにどのような影響を与えたかを示します。"
          },
          "provider_results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "provider": {
                  "type": "string"
                },
                "result_type": {
                  "type": "string",
                  "enum": [
                    "FIAT_MONITORING",
                    "WALLET_SCREENING",
                    "TRANSACTION_SCREENING",
                    "TRAVEL_RULE",
                    "NETWORK_GRAPH",
                    "CUSTOM"
                  ]
                },
                "status": {
                  "type": "string"
                },
                "severity": {
                  "type": "string",
                  "nullable": true
                },
                "score": {
                  "type": "integer"
                },
                "summary": {
                  "type": "string",
                  "nullable": true
                },
                "payload": {
                  "type": "object",
                  "description": "プロバイダーの生のレスポンスペイロード。"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "description": "プロバイダーの生のペイロード（AMLスクリーニング、ブロックチェーン分析など）。"
          },
          "travel_rule": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionTravelRule"
              }
            ],
            "description": "トラベルルールの送金またはチェック。`travel_rule_details`が送信された場合に設定されるほか、トラベルルールが有効で、取引が`transaction_category: travelRule`で作成された場合にも設定されます（`travel_rule_details`がなくても、Didit自身が交換を開始します）。送金やチェックが存在しない場合は`null`です。インバウンド送金では、ウォレットの所有権が確認されるまで、取引相手の`originator_data`と`beneficiary_data`はマスクされたまま（`data_masked: true`）になります。"
          },
          "network_snapshot": {
            "type": "object",
            "nullable": true,
            "description": "ルールエンジンが使用する、関連する取引と当事者のグラフスナップショット。取引とともに送信された`network_snapshot`、またはAMLウォレットスクリーニングが成功した際にDiditが構築するグラフ(送信されたものを置き換えます)のいずれかです。どちらも存在しない場合は`null`です。",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid"
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "edges": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "metrics": {
                "type": "object"
              }
            }
          },
          "remediation": {
            "type": "object",
            "nullable": true,
            "description": "再検証が必要な場合にユーザーに提示される是正用のセッションです。正規のブロックである`action_required`に置き換えられました。後方互換性のために残されています。",
            "properties": {
              "session_id": {
                "type": "string"
              },
              "session_token": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "status": {
                "type": "string"
              }
            }
          },
          "action_required": {
            "type": "object",
            "nullable": true,
            "description": "この取引を完了するために必要な保留中のエンドユーザーアクション。存在しない場合はnull。Didit SDKはデフォルトでこのアクションを自動的に起動し、完了時に取引を更新します。`type`で区別される2つのバリアントがあります。`verification_session`（ルールのアクションによって作成されたホスト型認証セッション）と`wallet_ownership`（ウォレット管理の証明が必要なトラベルルール送金のために自動発行されるウォレット所有権ウィジェットセッションで、トラベルルール設定の`auto_wallet_verification`によって制御されます）です。両方が該当しうる場合は、トラベルルールの交換をブロックするため`wallet_ownership`が優先されます。",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TransactionVerificationSessionAction"
              },
              {
                "$ref": "#/components/schemas/TransactionWalletOwnershipAction"
              }
            ],
            "discriminator": {
              "propertyName": "type",
              "mapping": {
                "verification_session": "#/components/schemas/TransactionVerificationSessionAction",
                "wallet_ownership": "#/components/schemas/TransactionWalletOwnershipAction"
              }
            }
          },
          "cost_breakdown": {
            "type": "object",
            "nullable": true,
            "description": "この取引の費用。`total_price`と`items`で構成され、itemsは請求ごとに1件で、それぞれ`usage_type`、`price`、`details`、`created_at`を含みます。同じ取引を再スクリーニングすると新しい項目になります。"
          }
        }
      },
      "TravelRuleSettingsDetail": {
        "type": "object",
        "properties": {
          "is_enabled": {
            "type": "boolean",
            "description": "このアプリケーションで、送信される`travelRule`取引に対してマネージド型のトラベルルール交渉フローが有効かどうか。"
          },
          "jurisdiction": {
            "type": "string",
            "maxLength": 8,
            "description": "お客様のVASPの運営管轄区域コードです。デフォルトは`\"EU\"`です。Diditはこれを、トラベルルール取引に`travel_rule_regime`として付与する規制体系に対応付けます（例: `EU`またはEU加盟国コードは`eu`になります）。取引ルールはこの値をキーにできます。Diditネットワークにお客様のプロフィールが掲載されると、他のDidit顧客はVASPディレクトリでこれをお客様の管轄区域として確認できます。"
          },
          "name_matching_strictness": {
            "type": "string",
            "enum": [
              "NONE",
              "STRICT",
              "CONTAINS",
              "DEFAULT",
              "FUZZY"
            ],
            "description": "送金がCOMPLETEDに到達するために、受取人名がどの程度厳密に一致する必要があるか。`CONTAINS`は、一方の名前の単語がすべてもう一方に含まれる場合に一致とみなします。"
          },
          "confirmation_timeout_hours": {
            "type": "integer",
            "minimum": 1,
            "description": "AWAITING_COUNTERPARTY状態の送金が未確認のまま維持できる時間数です。これを過ぎると定期スイーパーによって期限切れになります。デフォルトは48です。"
          },
          "timeout_outcome": {
            "type": "string",
            "enum": [
              "HOLD",
              "REJECT",
              "PROCEED"
            ],
            "description": "送金が期限切れになったときに、元となる取引をどう扱うか。デフォルトはHOLDです。sunrise_policyとnon_responsive_policyが該当し、かつ設定されている場合は、そちらが優先されます。"
          },
          "threshold_amount": {
            "type": "string",
            "description": "アプリケーションのデフォルト通貨建ての10進数文字列。マネージド交換をトリガーする最小送金額で、これ未満の送金はそのままNOT_APPLICABLEとして解決されます。Diditは、デフォルト通貨に換算した取引金額、または送信された`amount_in_default_currency`を比較します。換算後の金額がない場合、しきい値は適用されません。デフォルトは\"0.00\"です（EU TFRでは最小金額は適用されません）。"
          },
          "ownership_validation_mode": {
            "type": "string",
            "enum": [
              "FULL",
              "SIMPLIFIED",
              "AUTOMATED"
            ],
            "description": "ウォレットの所有を証明するために必要な証拠の水準。`FULL`は常に証明（署名済みメッセージ、テスト入金、またはレビュー済みのスクリーンショット）を必要とし、エンドユーザーの申告だけでは認めません。`SIMPLIFIED`は`simplified_validation_threshold`未満では自己申告を受け入れ、それを超える場合は証明を求めます。`AUTOMATED`では、アドレス帳と過去の証明だけで判断でき、`allow_self_declaration`がtrueの間は自己申告も含まれます。デフォルトは`AUTOMATED`です。"
          },
          "simplified_validation_threshold": {
            "type": "string",
            "description": "10進数文字列。デフォルトは\"0.00\"。`SIMPLIFIED`モードでは、この金額（しきい値の通貨建て）未満の送金は自己申告を受け付けます。その通貨建ての金額がない送金は、しきい値以上として扱われます。"
          },
          "data_sharing_fields": {
            "$ref": "#/components/schemas/TravelRuleDataSharingFields"
          },
          "matching_rules": {
            "$ref": "#/components/schemas/TravelRuleMatchingRules"
          },
          "legal_name": {
            "type": "string",
            "description": "貴社VASPの法的名称。is_enabledをtrueに設定するには必須です（空白不可）。"
          },
          "lei": {
            "type": "string",
            "description": "VASPディレクトリに表示される、貴社のLegal Entity Identifier。"
          },
          "compliance_email": {
            "type": "string",
            "format": "email",
            "description": "VASPプロフィールのコンプライアンス連絡先メールアドレス。Diditネットワークは、メールで送信されたリンク（POST /v3/travel-rule/settings/compliance-email/confirmation/）でこのアドレスが確認された後にのみ、プロフィールを掲載します。変更した場合は再度確認が必要です。"
          },
          "is_discoverable": {
            "type": "boolean",
            "description": "VASPプロファイルをDiditネットワークに掲載できるかどうか。掲載されると、他のDidit顧客がGET /v3/travel-rule/vasps/で見つけられるようになり、INTERNALレールで到達できるようになります。掲載には、本番環境のアプリケーション、トラベルルールの有効化、法的名称、確認済みのコンプライアンス用メールアドレスも必要です。不足しているものはdidit_networkで確認できます。デフォルトはtrueです。"
          },
          "inbound_auto_accept": {
            "type": "boolean",
            "description": "trueの場合、受取人ウォレットが名義の一致する検証済みアドレス帳エントリである受信TRP照会は自動的に承認されます。falseの場合、その照会はON_HOLDの状態で待機し、所有権エンドポイントで承認または拒否する必要があります。INTERNALレールの送金および入金後の送金は影響を受けません。デフォルトはtrueです。"
          },
          "allow_self_declaration": {
            "type": "boolean",
            "description": "trueの場合、ウォレット所有権ウィジェットで自己申告をフォールバックの証明方法として選択できます。デフォルトはtrueです。"
          },
          "allow_screenshot_proof": {
            "type": "boolean",
            "description": "trueの場合、ウォレット所有権ウィジェットで所有権の証拠としてスクリーンショットのアップロードを選択できます。デフォルトはtrueです。"
          },
          "auto_wallet_verification": {
            "type": "boolean",
            "description": "trueの場合、エンドユーザーによるウォレット管理の証明が必要な送信トラベルルール送金を送信すると、その取引に紐づくウォレット所有権ウィジェットセッションが自動的に発行され、取引のaction_requiredブロックで公開されます。デフォルトはtrueです。"
          },
          "vasp_attribution_enabled": {
            "type": "boolean",
            "description": "trueの場合、どのレールでもルーティングできない送信トラベルルール送金は、ブロックチェーン分析によって帰属が特定されます。送金先ウォレットを保有するVASPを特定し、そのエンティティを送金とVASPディレクトリに記録したうえで、特定された名称でレールを1回再実行します。デフォルトはtrueです。"
          },
          "counterparty_screening_enabled": {
            "type": "boolean",
            "description": "取引相手VASPに対するオプトイン方式の制裁およびネガティブメディアのスクリーニングで、スクリーニング1件ごとに企業AMLスクリーニングの料金で請求されます。有効にすると、Diditはアウトバウンドの交換が到達する取引相手をスクリーニングし（30日未満のスクリーニングは再利用されます）、POST /v3/travel-rule/vasps/{vasp_id}/screening/で個別にスクリーニングすることもできます。デフォルトはfalseで、スクリーニングも請求も一切行われません。"
          },
          "sunrise_policy": {
            "type": "string",
            "enum": [
              "",
              "HOLD",
              "REJECT",
              "PROCEED"
            ],
            "description": "取引相手が、まだトラベルルールを施行していないsunrise_jurisdictionsに含まれる法域のディレクトリエントリである場合に、期限切れの送金がその取引に与える影響: HOLDはレビューに移行し、REJECTは却下し、PROCEEDはステータスを変更しません。空（デフォルト）の場合はtimeout_outcomeに従います。non_responsive_policyより先に適用されます。"
          },
          "sunrise_jurisdictions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "readOnly": true,
            "description": "読み取り専用。Diditがトラベルルールのサンライズ期間中とみなす国(ISO 3166 alpha-2)で、ここではsunrise_policyが適用されます。現在はCO、KH、VNです。それ以外の法域、および空または不明な法域にはtimeout_outcomeが適用されます。"
          },
          "non_responsive_policy": {
            "type": "string",
            "enum": [
              "",
              "HOLD",
              "REJECT",
              "PROCEED"
            ],
            "description": "取引相手が、応答状況（responsiveness）がUNRESPONSIVEのディレクトリエントリである場合に、期限切れの送金がその取引に与える影響: timeout_outcomeと同様にHOLD、REJECT、PROCEEDのいずれかです。空（デフォルト）の場合はtimeout_outcomeに従います。両方が該当する場合はsunrise_policyが先に適用されます。"
          },
          "travel_address": {
            "type": "string",
            "description": "読み取り専用。自社VASPのトラベルアドレスです。他のVASPがお客様に連絡する際に使用する、エンコードされたインバウンドTRP照会エンドポイントです。`is_enabled`がfalseの間は空です。"
          },
          "disabled_networks": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "GTR",
                "TRUST",
                "VERIFYVASP",
                "SYGNA"
              ]
            },
            "description": "プラットフォームメンバーシップをオプトアウトしたネットワーク。接続済みの自社メンバーシップが無効になったり、利用できないネットワークがプロビジョニングされたりすることはありません。",
            "default": []
          },
          "networks": {
            "type": "object",
            "readOnly": true,
            "description": "ネットワークごとに、このアプリケーションがどのように送信するか、および送信できない理由。GTRを含め、デフォルトで含まれるネットワークはありません。ネットワークには、自社で接続したメンバーシップを通じて到達するか、Diditのそのネットワークへのメンバーシップが稼働中で、かつそのネットワーク上の自社の参加者が有効になった時点でDiditのメンバーシップを通じて到達できます。リアルタイムの稼働状況チェックや配信チェックではありません。",
            "properties": {
              "gtr": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              },
              "trust": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              },
              "verifyvasp": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              },
              "sygna": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              }
            }
          },
          "didit_network": {
            "type": "object",
            "readOnly": true,
            "description": "DiditネットワークにVASPプロファイルが掲載されているかどうか。掲載されると、他のDidit顧客がディレクトリでプロファイルを見つけ、INTERNALレールで連絡できます。あわせて、まだ満たしていない各条件を示します。",
            "properties": {
              "listed": {
                "type": "boolean"
              },
              "missing": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "travel_rule_off",
                    "sandbox_application",
                    "not_discoverable",
                    "legal_name_missing",
                    "compliance_email_missing",
                    "compliance_email_unconfirmed",
                    "excluded_by_staff",
                    "internal_organization"
                  ]
                },
                "description": "掲載されている場合は空です。compliance_email_unconfirmed: POST /v3/travel-rule/settings/compliance-email/confirmation/で確認メールを送信し、メールに記載されたリンクを開いてください。excluded_by_staff: Diditがこのアプリケーションをテスト用、デモ用、または社内用としてマークしました。"
              },
              "compliance_email_confirmed": {
                "type": "boolean",
                "description": "現在のcompliance_emailが、メールで送信されたリンクによって確認済みかどうか。"
              }
            }
          }
        }
      },
      "TravelRuleSettingsUpdate": {
        "type": "object",
        "properties": {
          "is_enabled": {
            "type": "boolean"
          },
          "legal_name": {
            "type": "string",
            "maxLength": 255
          },
          "lei": {
            "type": "string",
            "maxLength": 20
          },
          "jurisdiction": {
            "type": "string",
            "maxLength": 8
          },
          "name_matching_strictness": {
            "type": "string",
            "enum": [
              "NONE",
              "STRICT",
              "CONTAINS",
              "DEFAULT",
              "FUZZY"
            ],
            "description": "`CONTAINS`は、一方の名前を構成する単語がすべてもう一方の名前に含まれている場合に、その名前を一致として受け入れます。"
          },
          "confirmation_timeout_hours": {
            "type": "integer",
            "minimum": 1
          },
          "timeout_outcome": {
            "type": "string",
            "enum": [
              "HOLD",
              "REJECT",
              "PROCEED"
            ]
          },
          "compliance_email": {
            "type": "string",
            "format": "email",
            "description": "VASPプロフィールのコンプライアンス連絡先メールアドレス。Diditネットワークは、メールで送信されたリンク（POST /v3/travel-rule/settings/compliance-email/confirmation/）でこのアドレスが確認された後にのみ、プロフィールを掲載します。変更した場合は再度確認が必要です。"
          },
          "is_discoverable": {
            "type": "boolean",
            "description": "VASPプロファイルをDiditネットワークに掲載できるかどうか。掲載されると、他のDidit顧客がGET /v3/travel-rule/vasps/で見つけられるようになり、INTERNALレールで到達できるようになります。掲載には、本番環境のアプリケーション、トラベルルールの有効化、法的名称、確認済みのコンプライアンス用メールアドレスも必要です。不足しているものはdidit_networkで確認できます。デフォルトはtrueです。"
          },
          "threshold_amount": {
            "type": "string",
            "description": "アプリケーションのデフォルト通貨建ての、0以上の10進数文字列。マネージド交換をトリガーする最小送金額です。"
          },
          "ownership_validation_mode": {
            "type": "string",
            "enum": [
              "FULL",
              "SIMPLIFIED",
              "AUTOMATED"
            ],
            "description": "レスポンスの同名のフィールドを参照してください。"
          },
          "simplified_validation_threshold": {
            "type": "string",
            "description": "0以上の10進数文字列。"
          },
          "data_sharing_fields": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleDataSharingFields"
              }
            ],
            "description": "エンティティタイプごとにマージされます。省略したエンティティタイプは現在の選択を維持します。`jurisdiction`の規制体系（EU TFRまたはFATF勧告16）における送金人の義務を満たせない選択は、空のリストも含め、`400`で拒否されます。"
          },
          "matching_rules": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleMatchingRules"
              }
            ],
            "description": "エンティティタイプごと、さらにその中のフィールドごとにマージされます。そのエンティティタイプで比較しないフィールド（例：`company`に対する`date_of_birth`）は`400`で拒否されます。"
          },
          "inbound_auto_accept": {
            "type": "boolean"
          },
          "allow_self_declaration": {
            "type": "boolean"
          },
          "allow_screenshot_proof": {
            "type": "boolean",
            "description": "trueの場合、ウォレット所有権ウィジェットで所有権の証拠としてスクリーンショットのアップロードを選択できます。デフォルトはtrueです。"
          },
          "auto_wallet_verification": {
            "type": "boolean"
          },
          "vasp_attribution_enabled": {
            "type": "boolean"
          },
          "counterparty_screening_enabled": {
            "type": "boolean",
            "description": "取引相手VASPに対するオプトイン方式の制裁およびネガティブメディアのスクリーニングで、スクリーニング1件ごとに企業AMLスクリーニングの料金で請求されます。有効にすると、Diditはアウトバウンドの交換が到達する取引相手をスクリーニングし（30日未満のスクリーニングは再利用されます）、POST /v3/travel-rule/vasps/{vasp_id}/screening/で個別にスクリーニングすることもできます。デフォルトはfalseで、スクリーニングも請求も一切行われません。"
          },
          "sunrise_policy": {
            "type": "string",
            "enum": [
              "",
              "HOLD",
              "REJECT",
              "PROCEED"
            ],
            "description": "HOLD、REJECT、PROCEEDのいずれか。timeout_outcomeに従う場合は空にします。同名のレスポンスフィールドを参照してください。"
          },
          "non_responsive_policy": {
            "type": "string",
            "enum": [
              "",
              "HOLD",
              "REJECT",
              "PROCEED"
            ],
            "description": "HOLD、REJECT、PROCEEDのいずれか。timeout_outcomeに従う場合は空にします。同名のレスポンスフィールドを参照してください。"
          },
          "disabled_networks": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "GTR",
                "TRUST",
                "VERIFYVASP",
                "SYGNA"
              ]
            },
            "description": "プラットフォームメンバーシップをオプトアウトしたネットワーク。接続済みの自社メンバーシップが無効になったり、利用できないネットワークがプロビジョニングされたりすることはありません。",
            "default": []
          }
        },
        "description": "すべてのフィールドは任意です。PUTは部分更新を適用します。"
      },
      "WalletAddressEntry": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "address": {
            "type": "string",
            "description": "ウォレットアドレス。ハッシュのみでインポートされたエントリの場合は`\"\"`。アプリケーション、チェーン、メモごとに一意で、アドレスは大文字と小文字を区別せずに比較されます。エントリを削除した後は、同じアドレスを再登録できます。"
          },
          "chain": {
            "type": "string",
            "description": "アドレスのチェーントークン（例: `ETH`、`BTC`）。Diditが送金をルーティングまたは登録する際は、ウォレットアドレスでアドレス帳のエントリーを照合し、送金にチェーンが含まれる場合はこの値でも大文字・小文字を区別せずに照合します。送金のチェーンは`beneficiary_data.chain`です。送信しなかった場合は取引の暗号資産チェーンまたは通貨シンボル（例: `ETH`）から設定され、入金後の登録の場合はその`chain`が使われます。そのため、すべての箇所で同じトークンを使用してください。チェーンが空のエントリーは、どのチェーンにも一致します。bitcoinで登録されたLightningの受取先（ノードIDまたはLightning Address）は、小文字に変換されて`LIGHTNING`に保存され、Lightningの送金はそこで照合されます。既知のチェーンは、送信した表記にかかわらず1つの正規識別子で保存されます。\"ethereum\"、\"Ethereum\"、\"ERC20\"はすべてETHとして、\"BNB Smart Chain\"と\"BEP20\"はBNBとして、\"tron\"はTRXとして保存されます。不明なチェーン名は指定されたとおりに保持されます。"
          },
          "holder_vendor_data": {
            "type": "string",
            "description": "保有者に対するお客様の内部識別子です。"
          },
          "holder_name": {
            "type": "string",
            "description": "受取人名の照合に使用されるウォレット保有者の名前。"
          },
          "entity_type": {
            "type": "string",
            "description": "自由記述のテキスト。デフォルトは\"individual\"です。"
          },
          "is_ownership_verified": {
            "type": "boolean",
            "description": "読み取り専用。このアドレスの所有権が証明済みかどうか。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "travel_address": {
            "type": "string",
            "description": "このウォレットに対する取引相手VASPのトラベルアドレス(判明している場合)。これにより、TRPが扱うアセット(BTC、ETH、および指定されたネットワーク上のUSDC)について、Diditはこの受取人への送金をTRPレール経由でルーティングできます。"
          },
          "address_hash": {
            "type": "string",
            "description": "読み取り専用。小文字化したアドレスのSHA-256を、小文字の16進数で表したものです。ハッシュのみでインポートされたエントリーは、この値で照合されます。"
          },
          "memo": {
            "type": "string",
            "description": "メモ型ネットワーク（XRP、XLM、EOS、ATOM、HBAR）でウォレットの一部となる宛先タグまたはメモです。アドレス全体の場合は`\"\"`です。メモ付きのエントリはそのメモを指定した送金にのみ一致し、メモなしのエントリはアドレス全体に一致します。"
          },
          "receiving_travel_address": {
            "type": "string",
            "readOnly": true,
            "description": "このウォレット用の、ウォレットごとのトラベルアドレスです。送信側VASPに渡すと、そのTRP照会でこのウォレットが指定されます。他のVASPのウォレットとして記録されたウォレットの場合、トラベルルールが無効な間、およびVASPプロファイルを保存する前は空です。"
          }
        }
      },
      "WalletAddressEntryCreate": {
        "type": "object",
        "required": [
          "address"
        ],
        "properties": {
          "address": {
            "type": "string",
            "maxLength": 128,
            "description": "ウォレットアドレス。XRPのXアドレスはクラシックアドレスとタグとして保存されるため、どちらの形式を指定した送金とも一致します。"
          },
          "chain": {
            "type": "string",
            "maxLength": 32,
            "description": "アドレスのチェーントークンです（例: `ETH`、`BTC`）。Diditが送金をルーティングまたは登録する際、アドレス帳のエントリーをウォレットアドレスで照合し、送金にチェーンが含まれる場合はこの値でも照合します（大文字と小文字は区別しません）。送金のチェーンは`beneficiary_data.chain`（送信しない場合は取引の暗号資産チェーンまたは通貨シンボル（例: `ETH`）から補完されます）、または入金後登録の`chain`です。そのため、すべての箇所で同じトークンを使用してください。チェーンが空のエントリーは、すべてのチェーンに一致します。既知のチェーンは、送信された表記にかかわらず1つの正規の識別子で保存されます。\"ethereum\"、\"Ethereum\"、\"ERC20\"はすべてETHとして、\"BNB Smart Chain\"と\"BEP20\"はBNBとして、\"tron\"はTRXとして保存されます。未知のチェーン名は送信されたとおりに保持されます。"
          },
          "holder_vendor_data": {
            "type": "string",
            "maxLength": 255
          },
          "holder_name": {
            "type": "string",
            "maxLength": 255
          },
          "entity_type": {
            "type": "string",
            "default": "individual",
            "maxLength": 16
          },
          "self_declared": {
            "type": "boolean",
            "default": false,
            "description": "書き込み専用。trueの場合、エントリーはSELF_DECLARATION証明によって所有権が検証済みの状態で作成されます。トラベルルール設定で`allow_self_declaration`がオフの場合は400を返します。"
          },
          "travel_address": {
            "type": "string",
            "description": "任意。このウォレットに対する取引相手VASPのトラベルアドレスです。TRPが扱う資産（BTC、ETH、および指定ネットワーク上のUSDC）でTRPルーティングが可能になります。無効なトラベルアドレスの場合は400が返されます。",
            "maxLength": 512
          },
          "memo": {
            "type": "string",
            "maxLength": 256,
            "description": "任意。ウォレットの一部である宛先タグまたはメモです。XRP：宛先タグで、0から4294967295までの整数です（JSONの数値も受け付けます）。XLM：最大28バイトのテキストメモ、64ビットのID、または16進数表記の32バイトのハッシュです。EOS：最大256バイトです。ATOM：最大256文字です。HBAR：最大100バイトです。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin Cash、Dogecoin、Lightningのウォレットはメモを受け付けず、指定すると`400`になります。エイリアス：`destinationTag`または`destination_tag`。"
          }
        }
      },
      "WalletAddressEntryUpdate": {
        "type": "object",
        "properties": {
          "holder_name": {
            "type": "string",
            "maxLength": 255
          },
          "holder_vendor_data": {
            "type": "string",
            "maxLength": 255
          },
          "entity_type": {
            "type": "string",
            "maxLength": 16
          },
          "travel_address": {
            "type": "string",
            "maxLength": 512
          }
        },
        "description": "PATCHは部分更新です。レスポンスにはholder_name、holder_vendor_data、entity_type、travel_address、receiving_travel_address、label、owner_typeのみが返されます。"
      },
      "TravelRuleTransferDetail": {
        "type": "object",
        "description": "所有権確認エンドポイントおよび完了/キャンセルエンドポイントから返される完全な送金オブジェクト。受信送金のウォレット所有権が未確認の間、取引相手の`originator_data`と`beneficiary_data`はマスクされた状態で返され（各単語の最初の文字のみが残り、ウォレット、チェーン、VASPのルーティング情報は判読可能なままです）、`data_masked`はtrueになります。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "AWAITING_COUNTERPARTY",
              "ON_HOLD",
              "COMPLETED",
              "FINISHED",
              "CANCELLED",
              "EXPIRED",
              "COUNTERPARTY_MISMATCHED_DATA",
              "COUNTERPARTY_VASP_NOT_FOUND",
              "COUNTERPARTY_VASP_NOT_REACHABLE",
              "UNCONFIRMED_OWNERSHIP",
              "COUNTERPARTY_VASP_GENERAL_DECLINE",
              "NOT_ENOUGH_COUNTERPARTY_DATA",
              "NOT_APPLICABLE"
            ]
          },
          "direction": {
            "type": "string",
            "enum": [
              "INBOUND",
              "OUTBOUND"
            ]
          },
          "rail": {
            "type": "string",
            "nullable": true,
            "enum": [
              "INTERNAL",
              "TRP",
              "GTR",
              "TRUST",
              "VERIFYVASP",
              "SYGNA",
              "EMAIL",
              "TEST_VASP",
              null
            ],
            "description": "送金のルーティングに使われたレール。レールが選択されなかった場合はnullです（例: しきい値未満、取引相手のウォレットがセルフホスト型ウォレット、入金後の登録、到達可能な取引相手がいない場合）。INTERNALは双方がDiditのアプリケーションであることを意味し、EMAILはメールで送信された受け取りリンクで取引相手に到達したことを意味します。TEST_VASPは、Didit Test VASPがサンドボックスの送金に応答したことを意味します。GTR、VERIFYVASP、SYGNAでは、Diditはネットワークのレスポンスから、または5分ごとのポーリングによって取引相手の回答を読み取ります。TRUSTは送信のみのため、TRUSTの送金は期限切れになるまでAWAITING_COUNTERPARTYのままです。ネットワークのレールは、そのネットワークについてお客様自身のメンバーシップを接続している場合にのみ使用されます。レールは取引作成のレスポンスが返された後に選択されるため、そのレスポンスではnullです。"
          },
          "protocol": {
            "type": "string",
            "nullable": true
          },
          "ivms_version": {
            "type": "string",
            "example": "ivms101.2023"
          },
          "required": {
            "type": "boolean"
          },
          "ownership_confirmed": {
            "type": "boolean",
            "nullable": true
          },
          "deadline_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "timeline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string"
                },
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "detail": {
                  "type": "string"
                },
                "name_match": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/TravelRuleNameMatch"
                    }
                  ],
                  "nullable": true,
                  "description": "このエントリが判定した氏名比較で、`detail`と並んで返されます。氏名を比較しなかったエントリには含まれません。"
                },
                "reason": {
                  "type": "string",
                  "description": "配信の失敗によって発生した遷移のエントリにのみ含まれます。値は`email_undeliverable`または`delivery_failed`で、送金の`reason`が報告する値と同じです。"
                }
              }
            }
          },
          "counterparty_vasp": {
            "type": "object",
            "nullable": true,
            "properties": {
              "name": {
                "type": "string"
              },
              "lei": {
                "type": "string"
              },
              "dd_score": {
                "type": "integer",
                "description": "0から100までのデューデリジェンススコアで、値が高いほど良好です。VASPディレクトリと同じ尺度です。"
              },
              "dd_score_breakdown": {
                "type": "object",
                "description": "dd_scoreへのコンポーネントごとの寄与。VASPディレクトリと同様に、コンポーネント（jurisdiction、verification、protocol、lei、history、essentials、responsiveness）ごとに1つのオブジェクトがあり、それぞれ{points, max, reason, detail}を含みます。取引相手が評価されるまでは{}です。",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "points": {
                      "type": "number",
                      "description": "このコンポーネントに付与されるポイント。"
                    },
                    "max": {
                      "type": "integer",
                      "description": "このコンポーネントが付与できる最大ポイントです。"
                    },
                    "reason": {
                      "type": "string",
                      "description": "コンポーネントの判定を示す機械可読コード。"
                    },
                    "detail": {
                      "type": "string",
                      "description": "付与されたポイントの理由を示す、人が読める形式の説明。"
                    }
                  }
                }
              },
              "dd_assessed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "デューデリジェンス評価が最後に実行された日時。取引相手が評価されるまではnull。"
              }
            }
          },
          "originator_data": {
            "type": "object",
            "description": "送金人当事者です。受信する送金の場合、取引相手の値は所有権が確認されるまでマスクされます。"
          },
          "beneficiary_data": {
            "type": "object",
            "description": "受取人の当事者情報。受信側の送金では、所有権が確認されるまで取引相手の値はマスクされます。"
          },
          "name_match": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleNameMatch"
              }
            ],
            "nullable": true,
            "description": "送金の判定を決めた氏名比較です。比較が実行されるまではnullです。当事者がマスクされている間、およびINTERNALのやり取りにおける相手顧客側のコピーでは、`transfer_name`、`compared_name`、`matched_names`、`mismatched_names`は非表示になります。`score`と`matched`は一致しない場合があります。`matched`は厳格度に従い、`score`は2つの氏名全体の類似度を表します。"
          },
          "data_match": {
            "$ref": "#/components/schemas/TravelRuleDataMatch"
          },
          "mismatched_fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`data_match.mismatched_fields`のショートカット。相違がない場合は空です。"
          },
          "data_unmasked": {
            "$ref": "#/components/schemas/TravelRuleDataUnmasked"
          },
          "data_masked": {
            "type": "boolean",
            "description": "このレスポンスで取引相手の個人データがマスクされている間はtrueです。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "delivery": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleDelivery"
              }
            ],
            "description": "この移転が相手側に送るべき最新メッセージの状況です。移転が一度もメッセージを送る必要がなかった場合（例：`threshold_amount`未満、申告済みのセルフホスト型ウォレット、サンライズ登録）はnullです。"
          },
          "discovery": {
            "type": "array",
            "description": "Diditが取引相手をどのように探索したかを示します。実行されたステップごとに1エントリです。受信送金など、探索が実行されなかった場合は空です。",
            "items": {
              "$ref": "#/components/schemas/TravelRuleDiscoveryStep"
            }
          },
          "reason": {
            "type": "string",
            "description": "`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`の送金が停止している理由です。その他のステータスでは`\"\"`です。`COUNTERPARTY_VASP_NOT_REACHABLE`の場合に限り、配信の失敗がまず理由を決定します：`email_undeliverable`（メールプロバイダーがコンプライアンスメールを拒否し、試行できるアドレスが残っていない。送信時、リマインダー時、または後から報告された恒久的なバウンスのいずれか）または`delivery_failed`（配信中のレールが完全に失敗した。ネットワークレールがメッセージを拒否したか再試行回数を使い切った、`TRP`のIDホストが応答しなかった、または取引相手の`TRP`ホストが照会を受け付けなかった）。それ以外の場合は`discovery`トレースが理由を決定します：`awaiting_end_user`（Diditが到達できる取引相手を指定したステップがない）、`directory_match_no_route`（ステップが経路のないディレクトリ上のVASPを指定した）、`picked_member_without_proven_wallet`（エンドユーザーが、ウォレットの管理を証明していないDiditの顧客を選択した）、またはトレースが他の理由を示さない場合は`no_directory_match`です。再送すると送金が先に進むため、理由はクリアされます。[送金が停止する理由](/ja/transaction-monitoring/travel-rule#送金が停止している理由)を参照してください。"
          },
          "next_actions": {
            "type": "array",
            "description": "送金を先に進めるためのアクションです。`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`以外のステータスでは`[]`です。`email_undeliverable`では`update_compliance_email`、次に`resend`が提示されます。`delivery_failed`では`resend`が提示されます。検出に関する理由では`select_counterparty_vasp`、`declare_self_hosted`、`add_vasp_hint`、`resend`が提示されます。",
            "items": {
              "$ref": "#/components/schemas/TravelRuleNextAction"
            }
          },
          "chain_details": {
            "$ref": "#/components/schemas/TravelRuleChainDetails"
          }
        }
      },
      "TravelRuleOwnershipConfirmRequest": {
        "type": "object",
        "required": [
          "confirmed"
        ],
        "properties": {
          "confirmed": {
            "type": "boolean",
            "description": "所有を確認する場合はtrue、否定する場合はfalseです。"
          },
          "wallet_address": {
            "type": "string",
            "default": "",
            "description": "受信TRP送金: 承認時にDiditが送金元VASPに返す支払い先アドレスです。デフォルトでは、一致したアドレス帳エントリのアドレス、次にbeneficiary_data.wallet_addressが使われます。取引相手のウォレットを指定していない申告済みのセルフホスト型ウォレット送金では、所有を検証したウォレットが使われます。それがない場合、リクエストは400で拒否されます。その他の送金では無視されます。"
          }
        }
      },
      "TravelRuleTransferPatchRequest": {
        "type": "object",
        "description": "次のいずれか1つだけを指定してください:payment_txn_id(完了)、action=cancel、action=resend、compliance_emailを伴うaction=update_compliance_email、wallet_addressを伴うaction=update_originator_wallet、またはbeneficiary_vaspを伴うaction=beneficiary_vasp。",
        "properties": {
          "payment_txn_id": {
            "type": "string",
            "description": "オンチェーンの取引ハッシュ。送金が出金であり、ステータスがCOMPLETEDである必要があります。"
          },
          "action": {
            "type": "string",
            "enum": [
              "cancel",
              "resend",
              "update_compliance_email",
              "update_originator_wallet",
              "beneficiary_vasp"
            ],
            "description": "\"cancel\"は、終了状態にない移転をキャンセルします。\"resend\"は、COUNTERPARTY_VASP_NOT_FOUND、COUNTERPARTY_VASP_NOT_REACHABLE、またはNOT_ENOUGH_COUNTERPARTY_DATAで停止している送信側の移転について、ルーティングを再実行します。\"update_compliance_email\"は、これら3つのステータスのいずれかにある送信側の移転について、リクエストの送信先となるコンプライアンス用メールアドレスを置き換えます。その後に\"resend\"を送信してください。\"update_originator_wallet\"は、資金が実際に送り出されたウォレット（`wallet_address`、`memo`）を記録します。\"beneficiary_vasp\"は、これらのステータスのいずれかにある送信側の移転について、取引相手のVASPを自分で指定します（`beneficiary_vasp`が必要です）。移転はそのVASPにルーティングされ、再送信されます。"
          },
          "compliance_email": {
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "description": "`action: update_compliance_email`の場合は必須です。この送金の`beneficiary_data.counterparty_vasp_email`として保存されます。この値はこの送金にのみ属し、ディレクトリのエントリや連絡先リストには追加されません。"
          },
          "wallet_address": {
            "type": "string",
            "maxLength": 128,
            "description": "`action: update_originator_wallet`の場合：資金の送金元ウォレット。送金のUTXOインプットが判明している場合は、そのいずれかである必要があります。"
          },
          "memo": {
            "type": "string",
            "maxLength": 256,
            "description": "`action: update_originator_wallet`の場合：メモ対応ネットワークにおけるウォレットのメモまたはタグ。任意です。"
          },
          "beneficiary_vasp": {
            "type": "string",
            "format": "uuid",
            "description": "action=beneficiary_vaspの場合は必須です。`GET /v3/travel-rule/vasps/`で取得したディレクトリVASPの`id`を指定します。指定した値はすべての自動検出ステップより優先され、自動検出によって上書きされることはありません。"
          }
        }
      },
      "VaspDirectoryEntry": {
        "type": "object",
        "description": "ディレクトリに登録されたVASPまたはDiditネットワークのメンバーと、アプリケーションからそのVASPへのルート。顧客がDiditネットワークのメンバーとなるのは、そのアプリケーションが本番稼働中で、トラベルルールが有効で、プロフィールが検索可能であり、法的名称と確認済みのコンプライアンス用メールアドレスがあり、かつDiditがそのアプリケーションをテスト用、デモ用、社内用としてマークしていない間のみです。各行には、共有のデューデリジェンス評価（dd_score、risk_level、responsiveness、essential_checks）に加え、他の顧客には表示されない、自身のアプリケーション独自の判定、エンティティスクリーニング、アンケートも含まれます。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "GET /v3/travel-rule/vasps/{vasp_id}/で使用するエントリのIDです。"
          },
          "kind": {
            "type": "string",
            "enum": [
              "directory",
              "didit"
            ],
            "description": "directoryは共有ディレクトリのエントリ、diditはDiditネットワークのメンバーを示します。"
          },
          "name": {
            "type": "string"
          },
          "lei": {
            "type": "string"
          },
          "jurisdiction": {
            "type": "string",
            "description": "ソースが提供するとおりのISO 3166国コード。"
          },
          "domains": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "VASPのWebドメインです。Diditネットワークのメンバーでは常に空です。"
          },
          "reachable": {
            "type": "boolean",
            "description": "アプリケーションからこのVASP、またはブランドの場合はそのエンティティのいずれかへの利用可能なルートがあるかどうか。Diditネットワークのメンバーであれば常にtrueです。ただし、サンドボックスのアプリケーションでは、すべての行がfalseになります。"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "trading_name",
                    "other_legal_name",
                    "network_name",
                    "attribution",
                    "merged",
                    "staff"
                  ],
                  "description": "trading_name、other_legal_name(グローバルLEI登録簿の名称)、network_name(トラベルルールネットワーク上の名称)、attribution(ブロックチェーン分析がVASPのウォレットに付与するエンティティ名)、merged(このエントリに統合された重複エントリの名称)、またはstaffのいずれかです。"
                }
              }
            },
            "description": "そのVASPが知られているその他の名称です。"
          },
          "networks": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "トラベルルールネットワークのメンバーディレクトリにおける、このVASPの現在の掲載情報。TRISAの掲載情報は、TRISA上でそのVASPが誰であるかを示します。DiditにはTRISAレールがないため、これがルートになることはありません。",
              "properties": {
                "network": {
                  "type": "string",
                  "enum": [
                    "GTR",
                    "TRUST",
                    "VERIFYVASP",
                    "SYGNA",
                    "TRISA"
                  ]
                },
                "code": {
                  "type": "string",
                  "description": "そのネットワークにおけるVASPの識別子です。"
                },
                "listed_name": {
                  "type": "string",
                  "description": "ネットワークにおけるVASPの登録名です。"
                },
                "country": {
                  "type": "string",
                  "description": "ネットワークが提供している場合、ネットワークに記載された国。"
                },
                "verified_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "Diditのスタッフが掲載情報を検証した日時です。公開ディレクトリから読み取った掲載情報の場合はnullです。"
                },
                "last_seen_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "ソースが最後にその掲載情報を表示した日時。ソースで3週間表示されていない掲載情報は削除されます。"
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "trisa_directory",
                    "staff"
                  ],
                  "description": "掲載情報の出所です。公開TRISAディレクトリ、またはDiditのスタッフです。"
                }
              }
            }
          },
          "routes": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "アプリケーションがこのVASPにトラベルルールデータを配信できる経路の1つです。ディスパッチが試行する順に並びます。ネットワーク経路には、そのネットワークのメンバーシップが必要です。自社のメンバーシップ（Marketplaceで接続済み）、またはDiditがメンバーシップを保有した時点でのDiditのメンバーシップです。メンバーシップがない場合、その経路は理由とともに利用不可として表示され、VASPに到達する手段として表示されることはありません。",
              "properties": {
                "rail": {
                  "type": "string",
                  "enum": [
                    "INTERNAL",
                    "TRP",
                    "GTR",
                    "TRUST",
                    "VERIFYVASP",
                    "SYGNA",
                    "EMAIL"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "unavailable"
                  ]
                },
                "reason": {
                  "type": "string",
                  "enum": [
                    "",
                    "no_membership",
                    "network_switched_off",
                    "sandbox_application"
                  ],
                  "description": "利用できないルートを使用できない理由：no_membership（あなたもDiditもそのネットワークのメンバーシップを保有していない）、network_switched_off（設定でそのネットワークをオフにしている）、sandbox_application（サンドボックスアプリケーションはDidit Test VASPにのみ送信するため、利用できるルートがない）。ルートが利用可能な場合は空です。"
                },
                "via": {
                  "type": "string",
                  "enum": [
                    "",
                    "own_membership",
                    "didit_membership",
                    "directory",
                    "contact",
                    "didit_network"
                  ],
                  "description": "利用可能なルートへの到達方法です。ネットワークレールの場合はown_membershipまたはdidit_membership、ディレクトリで検証されたTRPエンドポイントの場合はdirectory、EMAILレールの場合はcontact、Diditネットワークメンバーの場合はdidit_networkです。ルートが利用できない場合は空です。"
                }
              }
            }
          },
          "umbrella": {
            "type": "object",
            "nullable": true,
            "description": "このエントリーが規制対象事業体として属するブランド。いずれのブランドにも属さない場合はnullです。",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "entities": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "ブランドの規制対象事業者。送金を受け取る法人です。",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "lei": {
                  "type": "string"
                },
                "jurisdiction": {
                  "type": "string"
                },
                "reachable": {
                  "type": "boolean",
                  "description": "アプリケーションからそこへの利用可能なルートがあるかどうか。"
                }
              }
            },
            "description": "ブランドの場合、その送金を受け取る規制対象エンティティです。ブランドを指定した送金は、送金に記載された法域（beneficiary_data.counterparty_vasp_jurisdiction）にある到達可能なエンティティに送られます。それがない場合は、ブロックチェーン分析の帰属情報が送金先ウォレットに紐付けたエンティティに送られ、法域が記載されていない場合は唯一の到達可能なエンティティに送られます。同等に該当するエンティティが2つある場合、どちらかを推測して選ぶことはありません。"
          },
          "contacts": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "EMAILレールが連絡できるコンプライアンス窓口。",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "email": {
                  "type": "string",
                  "format": "email"
                },
                "name": {
                  "type": "string"
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "staff",
                    "application",
                    "learned"
                  ],
                  "description": "staff: Diditが管理するもの。application: お客様のアプリケーションが追加したもの。learned: レスポンスリンクを通じてトラベルルールのリクエストに回答したアドレス。"
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "platform",
                    "application"
                  ],
                  "description": "platformの連絡先は、すべてのDidit顧客の送金に使用されます。applicationの連絡先はアプリケーション専用で、アプリケーションは自身の連絡先のみを参照できます。"
                },
                "verified_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "このアドレスの誰かがリクエストに応答した日時。まだ応答がない場合はnull。"
                }
              }
            },
            "description": "このVASPについてプラットフォームが保持する連絡先と、アプリケーション独自の連絡先です。"
          },
          "dd_status": {
            "type": "string",
            "enum": [
              "NOT_STARTED",
              "IN_PROGRESS",
              "COMPLETED",
              "REJECTED"
            ],
            "description": "エントリーに対するDiditの検証ステータスで、dd_scoreの検証コンポーネントによってスコアリングされます。Diditネットワークのメンバーの場合は常にCOMPLETEDです。"
          },
          "dd_score": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "maximum": 100,
            "description": "ディレクトリエントリの共有デューデリジェンススコア。0から100の値で、高いほど安全です（dd_score_semanticを参照）。dd_score_breakdownのポイントの合計です。スコアリングされないDiditネットワークのメンバーではnullです。まだ評価されていないエントリ（dd_assessed_atがnull）は0と空のrisk_levelを示すため、生のスコアではなくrisk_levelを参照してください。"
          },
          "reachable_rails": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "INTERNAL",
                "TRP",
                "GTR",
                "TRUST",
                "VERIFYVASP",
                "SYGNA",
                "EMAIL"
              ]
            },
            "description": "エントリに記録されたレール。現在アプリケーションで使用できるものについては、ルートを参照してください。"
          },
          "is_didit_customer": {
            "type": "boolean",
            "description": "Diditネットワークのメンバー(これらについてはdd_statusは常にCOMPLETED、dd_scoreはnull、risk_levelは空です)、およびDiditの顧客に紐付けられたディレクトリエントリの場合はtrueです。"
          },
          "dd_score_breakdown": {
            "type": "object",
            "description": "dd_scoreの構成要素ごとに1つのオブジェクトです。構成要素、その重み（最大値）、理由コードは次のとおりです。jurisdiction、25（jurisdiction_not_high_risk、jurisdiction_high_risk、jurisdiction_unknown）、verification、15（dd_status_completed、dd_status_in_progress、dd_status_not_started、dd_status_rejected）、protocol、15（native_rail、email_only、no_rail）、lei、10（lei_valid、lei_missing）、history、10（history、no_history）、essentials、15（essential_checks、no_essential_checks）、responsiveness、10（responsive、unresponsive、responsiveness_unknown）。Diditネットワークのメンバーの場合は空です。",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "points": {
                  "type": "number",
                  "description": "コンポーネントが寄与するポイント(小数点以下1桁に丸めた値)。"
                },
                "max": {
                  "type": "integer",
                  "description": "コンポーネントの重み。最大で加算されるポイントです。"
                },
                "reason": {
                  "type": "string",
                  "description": "コンポーネントの判定を示す機械可読コード。"
                },
                "detail": {
                  "type": "string",
                  "description": "1行の英語による説明です。"
                }
              }
            }
          },
          "dd_assessed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "dd_score、risk_level、responsivenessが最後に計算された日時。エントリーとのやり取りが完了、終了、期限切れ、不一致、または却下となった後、Diditがエントリーを更新またはキュレーションしたとき、および毎週のディレクトリ更新時に計算されます。Diditネットワークのメンバーの場合はnull。"
          },
          "dd_score_semantic": {
            "type": "string",
            "enum": [
              "higher_is_safer"
            ],
            "description": "dd_scoreの向き：常にhigher_is_saferです。"
          },
          "risk_level": {
            "type": "string",
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH",
              ""
            ],
            "description": "dd_scoreが該当する区分：LOW（70以上）、MEDIUM（40〜69）、HIGH（40未満）。Diditネットワークのメンバー、およびまだ評価されていないエントリーでは空です。riskでフィルターできます。自社でフラグを付けたスクリーニングがこの共有値を変更することはありません。代わりに、ルール内でcounterparty_risk_levelがHIGHになります。"
          },
          "responsiveness": {
            "type": "object",
            "description": "VASPがトラベルルールのリクエストに応答しているかどうか。過去90日間にDidit顧客がそのVASPに対して開始したリクエストのうち、応答があったものの割合です。ネットワークまたはプロトコルのレール経由、または共有アドレス(エントリのコンプライアンス用アドレスまたはプラットフォームの連絡先)へのメールで送信されたリクエストのみが対象です。顧客が入力したアドレスや顧客の非公開の連絡先に送信されたリクエストは、決して対象になりません。期限切れのリクエストは未応答とみなされ、完了したやり取り、拒否、データの不一致は応答とみなされます。キャンセルされたリクエストや到達不能なレールは、どちらにも該当しません。Diditネットワークメンバーの場合は常にUNKNOWNで、件数は0です。",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "RESPONSIVE",
                  "UNRESPONSIVE",
                  "UNKNOWN"
                ],
                "description": "期間内に判定済みのリクエストが5件未満の場合はUNKNOWN、そのうち応答があったものが10パーセント未満の場合はUNRESPONSIVE、それ以外の場合はRESPONSIVEです。"
              },
              "answered": {
                "type": "integer",
                "description": "期間内に判定されたリクエストのうち、VASPが回答したもの。"
              },
              "total": {
                "type": "integer",
                "description": "期間内に判定されたリクエスト。回答済みと期限切れの合計です。"
              },
              "computed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              }
            }
          },
          "essential_checks": {
            "type": "object",
            "description": "ディレクトリエントリの必須チェックレポートで、プラットフォームの検証済みソースのみに基づいて作成されます。対象はregistration（公式の登録簿にVASPが掲載されている。EUの暫定MiCA登録簿、公開TRISAディレクトリ、またはグローバルLEI登録簿）、licence（MiCA認可が記録されており、現在有効である）、domain（エントリのドメインがTRPエンドポイントまたは登録簿に記載されたウェブサイトと一致する）、lei（LEIレコードが有効かつ発行済みで、エントリの名称および国と整合している）です。dd_scoreのessentialsコンポーネントは、判定済みのチェックのうち合格したものの割合です。週次のディレクトリ更新で初めてエントリがチェックされるまでは空で、Diditネットワークのメンバーの場合は常に空です。",
            "properties": {
              "level": {
                "type": "string",
                "enum": [
                  "essential"
                ]
              },
              "checked_at": {
                "type": "string",
                "format": "date-time"
              },
              "checks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "enum": [
                        "registration",
                        "licence",
                        "domain",
                        "lei"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pass",
                        "fail",
                        "unknown"
                      ],
                      "description": "登録されているどの情報源でもチェックを判定できない場合はunknownです。"
                    },
                    "reason": {
                      "type": "string",
                      "description": "判定を示す機械可読コード。"
                    },
                    "detail": {
                      "type": "string",
                      "description": "1行の英語による説明です。"
                    }
                  }
                }
              },
              "passed": {
                "type": "integer"
              },
              "failed": {
                "type": "integer"
              },
              "unknown": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              }
            }
          },
          "decision": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleCounterpartyDecision"
              }
            ],
            "nullable": true,
            "description": "このVASPに対するお客様のアプリケーションの判定です。独自の判定を持たないエンティティの場合は、そのブランドの判定です（inherited_fromがブランドを示します）。判定がない場合はnullです。お客様のアプリケーション専用です。"
          },
          "entity_screening": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleCounterpartyScreening"
              }
            ],
            "nullable": true,
            "description": "このVASPに対するお客様のアプリケーションの最新の制裁およびネガティブメディアのスクリーニングです。一度もスクリーニングしていない場合はnullです。お客様のアプリケーション専用です。"
          },
          "questionnaires": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TravelRuleCounterpartyQuestionnaire"
            },
            "description": "このVASPとのお客様のアプリケーションのデューデリジェンス質問票です。新しい順に並びます。お客様のアプリケーション専用です。"
          }
        },
        "example": {
          "id": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
          "kind": "directory",
          "name": "Example Counterparty VASP",
          "lei": "529900EXAMPLECPTY001",
          "jurisdiction": "DE",
          "domains": [
            "counterparty.example"
          ],
          "reachable": true,
          "aliases": [
            {
              "name": "Example Counterparty",
              "kind": "trading_name"
            }
          ],
          "networks": [
            {
              "network": "GTR",
              "code": "EXAMPLE01",
              "listed_name": "Example Counterparty VASP",
              "country": "DE",
              "verified_at": "2026-10-12T09:30:00Z",
              "last_seen_at": "2026-10-12T09:30:00Z",
              "source": "staff"
            }
          ],
          "routes": [
            {
              "rail": "GTR",
              "status": "unavailable",
              "reason": "no_membership",
              "via": ""
            },
            {
              "rail": "EMAIL",
              "status": "available",
              "reason": "",
              "via": "contact"
            }
          ],
          "umbrella": null,
          "entities": [],
          "contacts": [
            {
              "id": "6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b",
              "email": "travelrule@counterparty.example",
              "name": "Travel Rule desk",
              "source": "staff",
              "scope": "platform",
              "verified_at": null
            }
          ],
          "dd_status": "NOT_STARTED",
          "dd_score": 62,
          "dd_score_breakdown": {
            "jurisdiction": {
              "points": 25.0,
              "max": 25,
              "reason": "jurisdiction_not_high_risk",
              "detail": "DEU is not on the high-risk jurisdiction list"
            },
            "verification": {
              "points": 3.8,
              "max": 15,
              "reason": "dd_status_not_started",
              "detail": "due diligence status NOT_STARTED"
            },
            "protocol": {
              "points": 6.0,
              "max": 15,
              "reason": "email_only",
              "detail": "reachable over the email fallback only"
            },
            "lei": {
              "points": 10.0,
              "max": 10,
              "reason": "lei_valid",
              "detail": "valid LEI on record"
            },
            "history": {
              "points": 5.0,
              "max": 10,
              "reason": "no_history",
              "detail": "no exchange history"
            },
            "essentials": {
              "points": 7.5,
              "max": 15,
              "reason": "no_essential_checks",
              "detail": "no decided essential check yet"
            },
            "responsiveness": {
              "points": 5.0,
              "max": 10,
              "reason": "responsiveness_unknown",
              "detail": "0 decided recent requests, too few to judge"
            }
          },
          "dd_assessed_at": "2026-10-12T09:30:00Z",
          "dd_score_semantic": "higher_is_safer",
          "risk_level": "MEDIUM",
          "responsiveness": {
            "status": "UNKNOWN",
            "answered": 0,
            "total": 0,
            "computed_at": "2026-10-12T09:30:00Z"
          },
          "essential_checks": {},
          "reachable_rails": [
            "GTR",
            "EMAIL"
          ],
          "is_didit_customer": false,
          "decision": {
            "decision": "APPROVED",
            "reason": "Licensed in DE, questionnaire reviewed",
            "decided_by": "",
            "updated_at": "2026-10-14T10:05:00Z",
            "inherited_from": null
          },
          "entity_screening": {
            "id": "7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
            "status": "Approved",
            "total_hits": 0,
            "score": null,
            "screened_at": "2026-10-14T09:58:00Z",
            "fresh": true,
            "flagged": false
          },
          "questionnaires": [
            {
              "id": "8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
              "status": "ANSWERED",
              "form_version": "1",
              "sent_to": "travelrule@counterparty.example",
              "sent_at": "2026-09-02T08:00:00Z",
              "expires_at": "2026-10-02T08:00:00Z",
              "answered_at": "2026-09-04T15:20:00Z",
              "valid_until": "2027-09-04T15:20:00Z",
              "current": true,
              "answers": {
                "legal_name": "Example Counterparty VASP, incorporated in the example jurisdiction.",
                "licensing": "Crypto-asset service provider authorised under MiCA by its national regulator, licence active.",
                "jurisdictions": "EU and EEA. We do not serve the United States.",
                "aml_program": "Written AML/CFT policy, annual independent review, last completed in March 2026.",
                "compliance_officer": "Head of Compliance, reachable at compliance@counterparty.example.",
                "sanctions_screening": "Customers at onboarding and daily; counterparties on every transfer.",
                "transaction_monitoring": "Rule-based monitoring with analyst review; suspicious activity reports filed with the FIU.",
                "travel_rule": "TRP and email; we answer requests within one business day.",
                "custody": "Segregated customer wallets held with a qualified custodian, insured.",
                "ownership": "No shareholder holds 25 percent or more; parent company Example Holding Group.",
                "record_keeping": "Five-year record-keeping for Travel Rule and transaction data, as our regulator requires.",
                "data_protection": "Encrypted at rest and in transit, stored in the EU."
              }
            }
          ]
        }
      },
      "TravelRuleCounterpartyDecision": {
        "type": "object",
        "description": "取引相手VASPに対するお客様のアプリケーションの判定です。お客様のアプリケーション専用です。共有ディレクトリのエントリを変更することはなく、他の顧客がこれを見ることもありません。作用するのはお客様の取引ルール（counterparty_dd_statusルールフィールドと、travel-rule-counterparty-blockedおよびtravel-rule-counterparty-restrictedプリセット）を通じてのみです。送金のルーティング方法を変更することはありません。",
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "APPROVED",
              "RESTRICTED",
              "BLOCKED"
            ],
            "description": "APPROVED：チームがこの取引相手を承認しました。RESTRICTED：レビュー後であれば、この取引相手への送金を進められます。BLOCKED：チームがこの取引相手を拒否しました。"
          },
          "reason": {
            "type": "string",
            "maxLength": 255,
            "description": "指定した理由の自由記述。指定がない場合は空です。"
          },
          "decided_by": {
            "type": "string",
            "description": "判定を行った、または最後に変更したコンソールユーザー。APIキーによって判定された場合は空です。"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "inherited_from": {
            "type": "object",
            "nullable": true,
            "description": "このエンティティ自体に判定を設定していないため、このエンティティが判定に従うブランド。判定が取引相手自身のものである場合はnullです。",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "name": {
                "type": "string"
              }
            }
          }
        }
      },
      "TravelRuleCounterpartyDecisionResponse": {
        "type": "object",
        "properties": {
          "decision": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleCounterpartyDecision"
              }
            ],
            "nullable": true,
            "description": "アプリケーションに対して取引相手に適用される判定です。取引相手自身の判定、それがない場合は（ブランドに属するエンティティであれば）ブランドの判定です。判定がない場合はnullです。"
          }
        }
      },
      "TravelRuleCounterpartyDecisionRequest": {
        "type": "object",
        "required": [
          "decision"
        ],
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "APPROVED",
              "RESTRICTED",
              "BLOCKED"
            ]
          },
          "reason": {
            "type": "string",
            "maxLength": 255,
            "description": "任意。以前の理由を置き換えます。省略すると理由はクリアされます。"
          }
        }
      },
      "TravelRuleCounterpartyScreening": {
        "type": "object",
        "description": "取引相手の法人に対する制裁およびネガティブメディアのスクリーニング1件で、アプリケーションのために実行され、アプリケーションに請求されます。アプリケーション専用で、他の顧客がこれを見ることはありません。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "In Review",
              "Declined"
            ],
            "description": "承認済み: 対応が必要な一致候補はありません。レビュー中または却下: 制裁またはネガティブメディアと一致する可能性があります。"
          },
          "total_hits": {
            "type": "integer",
            "description": "スクリーニングで返された一致候補の数。"
          },
          "score": {
            "type": "number",
            "nullable": true,
            "description": "一致候補の中で最も高いリスクスコアです。一致するものがなかった場合はnullです。"
          },
          "screened_at": {
            "type": "string",
            "format": "date-time"
          },
          "fresh": {
            "type": "boolean",
            "description": "スクリーニングがfresh_days(30日)より新しいかどうか。新しいスクリーニングは再課金されずに再利用されます。"
          },
          "flagged": {
            "type": "boolean",
            "description": "スクリーニングが有効期間内で、ステータスがIn ReviewまたはDeclinedである間はtrueです。最新のスクリーニングにフラグが立っており、取引相手のスクリーニングが有効なままの間は、ルール内のcounterparty_risk_levelはHIGHになります。"
          }
        }
      },
      "TravelRuleCounterpartyScreeningStatus": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "お客様のトラベルルール設定のcounterparty_screening_enabledです。デフォルトはオフで、オフの間はスクリーニングも請求も一切行われません。"
          },
          "price": {
            "type": "string",
            "description": "USD建ての10進数文字列。1回のスクリーニングで組織にかかる費用で、Company AML Screeningの料金です。"
          },
          "fresh_days": {
            "type": "integer",
            "description": "スクリーニング結果が有効とみなされ、再利用される日数。"
          },
          "screening": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleCounterpartyScreening"
              }
            ],
            "nullable": true,
            "description": "この取引相手に対する最新のスクリーニングです。一度もスクリーニングしていない場合はnullです。"
          }
        }
      },
      "TravelRuleCounterpartyScreeningRequest": {
        "type": "object",
        "properties": {
          "refresh": {
            "type": "boolean",
            "default": false,
            "description": "trueの場合、有効期間内のスクリーニングが存在していても再度スクリーニングを実行します(再度課金されます)。"
          }
        }
      },
      "TravelRuleCounterpartyScreeningResult": {
        "type": "object",
        "properties": {
          "outcome": {
            "type": "string",
            "enum": [
              "screened",
              "reused"
            ],
            "description": "screened: 新しいスクリーニングが実行され、課金されました(201)。reused: 有効期間内のスクリーニングが返され、課金は発生しませんでした(200)。"
          },
          "screening": {
            "$ref": "#/components/schemas/TravelRuleCounterpartyScreening"
          }
        }
      },
      "TravelRuleCounterpartyQuestionnaire": {
        "type": "object",
        "description": "お客様のアプリケーションが取引相手に送信したデューデリジェンスアンケート1件。Diditの標準アンケートで、登録されているコンプライアンス用アドレスに1回限り使用可能な回答リンクとともにメールで送信されます。お客様のアプリケーションのみが参照できます。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "SENT",
              "ANSWERED",
              "EXPIRED"
            ],
            "description": "SENT：回答待ち。ANSWERED：取引相手がすべての質問に回答済み。EXPIRED：回答リンクが未回答のまま閉じられた（期限が過ぎた、または新しいアンケートに置き換えられた）か、回答がvalid_untilを過ぎた。"
          },
          "form_version": {
            "type": "string",
            "description": "回答が属するDidit標準アンケートのバージョン。現在は1です。"
          },
          "sent_to": {
            "type": "string",
            "format": "email"
          },
          "sent_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "回答期限。送信から30日後です。期限を過ぎるとリンクは使用できなくなります。"
          },
          "answered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "valid_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "回答が有効な期間です。回答後365日間有効です。回答されるまではnullです。"
          },
          "current": {
            "type": "boolean",
            "description": "アンケートがANSWEREDで、valid_untilを過ぎていない間はtrueです。"
          },
          "answers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "質問IDをキーとする回答: legal_name、licensing、jurisdictions、aml_program、compliance_officer、sanctions_screening、transaction_monitoring、travel_rule、custody、ownership、record_keeping、data_protection。各回答は最大2,000文字です。回答されるまでは空です。"
          }
        }
      },
      "TravelRuleCounterpartyQuestionnaireRequest": {
        "type": "object",
        "properties": {
          "sent_to": {
            "type": "string",
            "format": "email",
            "description": "任意。取引相手について登録されているコンプライアンス用アドレスです。ディレクトリエントリーの場合はそのコンプライアンス用アドレスまたはアプリケーションから参照できる連絡先、Diditネットワークのメンバーの場合は確認済みのコンプライアンス用メールアドレスです。デフォルト：取引相手宛てのトラベルルールメールの送信先アドレス（自社の連絡先が最優先、次にプラットフォームの連絡先、次にエントリーのコンプライアンス用アドレス）。"
          }
        }
      },
      "TravelRuleCounterpartyQuestionnaireList": {
        "type": "object",
        "properties": {
          "questionnaires": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TravelRuleCounterpartyQuestionnaire"
            },
            "description": "新しい順。"
          }
        }
      },
      "TravelRulePickupInfo": {
        "type": "object",
        "description": "メールで送られた受け取りリンクに紐づく保留中のやり取りで、取引相手のレスポンスページに表示される内容です。",
        "properties": {
          "reference": {
            "type": "string",
            "format": "uuid",
            "description": "送信側VASPのコンソールに表示される送金のUUID。"
          },
          "requested_at": {
            "type": "string",
            "format": "date-time"
          },
          "originator_vasp_name": {
            "type": "string"
          },
          "originator_vasp_lei": {
            "type": "string"
          },
          "recipient_vasp_name": {
            "type": "string",
            "description": "リクエストの宛先となる取引相手のVASP。"
          },
          "language": {
            "type": "string",
            "description": "リクエストメールとレスポンスページの言語で、取引相手の法域に基づきます。"
          },
          "amount": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "fiat_amount": {
            "type": "string",
            "description": "送信人が指定した換算値、または空。"
          },
          "fiat_currency": {
            "type": "string"
          },
          "chain": {
            "type": "string"
          },
          "beneficiary_wallet": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "ivms_version": {
            "type": "string"
          },
          "deadline_at": {
            "type": "string",
            "format": "date-time",
            "description": "リンクが応答しなくなる日時。"
          },
          "reminders_sent": {
            "type": "integer"
          },
          "contact": {
            "type": "string",
            "description": "リンクの`?contact=`の値をそのまま返します。リンクに値がない場合は空です。"
          },
          "decline_reasons": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "data_mismatch",
                "not_our_customer",
                "wallet_not_hosted",
                "sanctions",
                "risk_appetite",
                "jurisdiction",
                "insufficient_data",
                "other"
              ]
            },
            "description": "`decline_reason`で指定できる値。"
          },
          "join_invitation": {
            "type": "object",
            "description": "取引相手が、Diditに無料で参加するための有効な招待を保持しているかどうか。招待リンクは招待先アドレスへのメールでのみ送られるため、ここでは`url`は空です。",
            "properties": {
              "eligible": {
                "type": "boolean"
              },
              "url": {
                "type": "string"
              }
            }
          },
          "originator_data": {
            "type": "object",
            "description": "送信側VASPが共有する送金人フィールド（`data_sharing_fields`）。名前とウォレットは常に含まれます。"
          },
          "beneficiary_data": {
            "type": "object"
          },
          "ivms_request": {
            "type": "object",
            "description": "同じリクエストをIVMS 101オブジェクトとして表したものです。`data_masked`がtrueの間は省略されます。"
          },
          "data_masked": {
            "type": "boolean",
            "description": "このエンドポイントでは常にfalseです。メールのリクエストは送信方向であり、送信者自身のユーザーがマスクされることはありません。"
          }
        }
      },
      "TravelRulePickupRespondRequest": {
        "type": "object",
        "required": [
          "decision"
        ],
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "accept",
              "decline"
            ]
          },
          "beneficiary_name": {
            "type": "string",
            "description": "自社の記録にある受取人の名前を、送信側VASPの名前ルールで処理したもの。`ivms_response`が受取人の名前を示している場合は、そちらが優先されます。",
            "maxLength": 255
          },
          "decline_reason": {
            "type": "string",
            "enum": [
              "",
              "data_mismatch",
              "not_our_customer",
              "wallet_not_hosted",
              "sanctions",
              "risk_appetite",
              "jurisdiction",
              "insufficient_data",
              "other"
            ],
            "description": "却下する理由。送信側VASPの送金タイムラインに記録されます。理由を指定しない場合は空（デフォルト）です。"
          },
          "decline_detail": {
            "type": "string",
            "maxLength": 512,
            "description": "自由記述のテキスト。`decision`が`decline`で、かつ`decline_reason`が`other`の場合は必須です。"
          },
          "ivms_response": {
            "type": "object",
            "description": "お客様の完全なIVMS 101レスポンスです。その受取人名が`beneficiary_name`より優先されます。"
          },
          "contact": {
            "type": "string",
            "format": "uuid",
            "description": "リンクの`?contact=`の値から取得した、リンクの送信先の連絡先。ボディで省略された場合は、`contact`クエリパラメーターが使用されます。"
          }
        }
      },
      "TravelRuleInboundRequest": {
        "type": "object",
        "required": [
          "chain",
          "txid",
          "wallet_address",
          "amount",
          "currency"
        ],
        "properties": {
          "chain": {
            "type": "string",
            "description": "入金が決済されたチェーン（例: `ETH`）。小文字で保存され、ウォレットアドレス帳のエントリーとは大文字・小文字を区別せずに比較されるため、アドレス帳でも同じチェーントークンを使用してください。",
            "maxLength": 32
          },
          "txid": {
            "type": "string",
            "description": "オンチェーン取引のハッシュ。wallet_addressと組み合わせて重複排除されます。",
            "maxLength": 128
          },
          "wallet_address": {
            "type": "string",
            "description": "入金を受け取った送金先のウォレットです。XRPのXアドレスはクラシックアドレスとタグに分割されます。",
            "maxLength": 128
          },
          "amount": {
            "type": "string",
            "description": "入金額。0以上、小数点以下最大18桁の10進数文字列です。"
          },
          "currency": {
            "type": "string",
            "description": "入金アセット（例: \"USDC\"）。",
            "maxLength": 16
          },
          "originator_data": {
            "type": "object",
            "description": "送信側VASPから提供された送金人の詳細（判明している場合）で、`{\"name\": \"...\"}`のようなフラットなオブジェクトです。Diditはここからname（またはfull_name）、first_name、last_name、vendor_dataを読み取ります。",
            "additionalProperties": true
          },
          "beneficiary_data": {
            "type": "object",
            "description": "受取人（お客様の顧客）の詳細で、`{\"name\": \"...\"}`のようなフラットなオブジェクトです。Diditはnameを、一致したアドレス帳エントリのholder_nameと照合し、wallet_addressとchainはリクエストの値から設定します。",
            "additionalProperties": true
          },
          "originating_vasp": {
            "type": "object",
            "description": "送信元VASPの任意の説明です。この送金にのみ保持され（`metadata.originating_vasp`、およびGET /v3/travel-rule/transfers/における送金の送金人VASP）、共有VASPディレクトリのエントリを作成、編集、リンクすることは決してありません。",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 255
              },
              "lei": {
                "type": "string",
                "maxLength": 20,
                "description": "任意。有効な20文字のISO 17442 LEI、または空。"
              },
              "travel_address": {
                "type": "string",
                "description": "この送金に記録された、送金人のトラベルアドレスです。",
                "maxLength": 512
              }
            }
          },
          "memo": {
            "type": "string",
            "maxLength": 256,
            "description": "任意。メモ型ネットワークにおける入金の宛先タグまたはメモです。共有の入金アドレスでは顧客を区別するためのもので、そのメモに対応するアドレス帳のエントリーが照合されます。XRP：宛先タグ。0から4294967295までの整数です（JSONの数値も受け付けます）。XLM：最大28バイトのテキストメモ、64ビットのID、または16進数で表した32バイトのハッシュ。EOS：最大256バイト。ATOM：最大256文字。HBAR：最大100バイト。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin Cash、Dogecoin、Lightningのウォレットはメモを受け付けません。これらで指定すると`400`になります。エイリアス：`destinationTag`または`destination_tag`。"
          },
          "utxo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleUtxo"
              }
            ],
            "description": "任意。UTXOチェーンのみ。入金取引の入力と出力です。送信者のウォレットは宣言された`originator_data.wallet_address`、宣言がない場合は最大の入力となります。"
          }
        }
      },
      "TravelRuleInboundResponse": {
        "type": "object",
        "properties": {
          "transaction_id": {
            "type": "string",
            "format": "uuid",
            "description": "受信した入金のDidit取引UUIDです。"
          },
          "txn_id": {
            "type": "string",
            "description": "受信取引のtxn_id。Diditが取引を作成した場合はDiditが生成した値、未請求の入金が再利用された場合はお客様自身の値です。"
          },
          "created": {
            "type": "boolean",
            "description": "この呼び出しで送金が登録された場合はtrue(HTTP 201)、同じtxidとwallet_addressの送金がすでに存在していた場合はfalse(HTTP 200)です。"
          },
          "travel_rule": {
            "$ref": "#/components/schemas/TravelRuleTransferDetail"
          }
        }
      },
      "TravelRuleTestVaspInboundRequest": {
        "type": "object",
        "required": [
          "beneficiary_wallet_address"
        ],
        "properties": {
          "beneficiary_wallet_address": {
            "type": "string",
            "description": "送金先のウォレットアドレスです。Didit Test VASPはこのアドレスに送信し、資産のチェーン上でウォレットアドレス帳と照合されます。一致するエントリがないウォレットも受け付けられ、受信取引はON_HOLDとして記帳されます。"
          },
          "scenario": {
            "type": "string",
            "enum": [
              "accept",
              "name_mismatch"
            ],
            "default": "accept",
            "description": "Didit Test VASPが申告する受取人の情報です。`accept`は保有者本人の氏名を申告し、`name_mismatch`はどの保有者とも一致しない氏名を申告します。判定そのものは常にお客様が行います。"
          },
          "chain": {
            "type": "string",
            "default": "ETH",
            "description": "資産のチェーン。"
          },
          "amount": {
            "type": "string",
            "default": "1",
            "description": "10進数の文字列で表した金額。"
          },
          "currency": {
            "type": "string",
            "default": "ETH",
            "description": "資産コード。"
          },
          "reference": {
            "type": "string",
            "description": "任意の冪等性キーです。同じ値で繰り返し呼び出すと、最初の呼び出しで記帳された送金が返されます。"
          }
        }
      },
      "TravelRuleTestVaspInboundResponse": {
        "type": "object",
        "properties": {
          "transaction_id": {
            "type": "string",
            "format": "uuid",
            "description": "受信した送金のDidit取引UUIDです。"
          },
          "txn_id": {
            "type": "string",
            "description": "Diditが生成したtxn_idです。"
          },
          "scenario": {
            "type": "string",
            "description": "実行されたシナリオです。"
          },
          "travel_rule_status": {
            "type": "string",
            "description": "アプリケーション自身の判定で決まったステータス。"
          },
          "detail": {
            "type": "string",
            "description": "送金がそのステータスに確定した理由。"
          },
          "test_vasp": {
            "type": "boolean",
            "description": "常にtrueです。送信者はDidit Test VASPでした。"
          },
          "travel_rule": {
            "$ref": "#/components/schemas/TravelRuleTransferDetail"
          }
        }
      },
      "TravelRuleWidgetSessionCreate": {
        "type": "object",
        "properties": {
          "wallet_address": {
            "type": "string",
            "description": "検証するウォレットアドレス。任意です。空の場合は、証明の開始時にアドレスを指定する必要があります。",
            "maxLength": 128
          },
          "chain": {
            "type": "string",
            "description": "アドレスのチェーントークンです（例: `ETH`、`BTC`、`SOL`）。ウォレットのアドレス帳と同じトークンを使用してください。メッセージ署名とSatoshiテストは、サポート対象のチェーンでのみ提供されます。証明によって検証されるアドレス帳エントリーには、正規の識別子（ETH、BTC、SOL、TRX）で保存されます。",
            "maxLength": 32
          },
          "holder_name": {
            "type": "string",
            "description": "受取人名の照合に使用されるウォレット保有者の名前。",
            "maxLength": 255
          },
          "vendor_data": {
            "type": "string",
            "description": "保有者に対するお客様の内部識別子で、作成されるアドレス帳エントリに引き継がれます。",
            "maxLength": 255
          },
          "transaction_id": {
            "type": "string",
            "format": "uuid",
            "description": "任意。証明が検証されたときに進めるトラベルルール送金のDidit取引UUIDです。",
            "nullable": true
          },
          "satoshi_deposit_address": {
            "type": "string",
            "description": "任意。お客様が管理する入金アドレスです。指定するとSATOSHI_TEST証明方式が有効になります。",
            "maxLength": 128
          },
          "callback_url": {
            "type": "string",
            "description": "任意。完了後にウィジェットが顧客を戻す先の、http(s)の絶対URLです。",
            "maxLength": 512
          },
          "expires_in_minutes": {
            "type": "integer",
            "description": "任意。発行されるリンクの有効期間（分）です。SATOSHI_TESTが提示される場合は、Satoshiテストの期間をカバーするよう自動的に延長されます。",
            "default": 60,
            "minimum": 5,
            "maximum": 10080
          }
        }
      },
      "TravelRuleWidgetSessionResponse": {
        "type": "object",
        "properties": {
          "widget_session_id": {
            "type": "string",
            "format": "uuid"
          },
          "token": {
            "type": "string",
            "description": "ウィジェットURLに埋め込まれる不透明なセッショントークンです。"
          },
          "url": {
            "type": "string",
            "description": "ホスト型ウォレット所有権ウィジェットのURLです。そのままの形でシステムブラウザで開いてください(モバイルSDKのWebView内では絶対に開かないでください)。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TravelRuleWidgetContext": {
        "type": "object",
        "properties": {
          "vasp_name": {
            "type": "string",
            "description": "VASPプロファイルに登録された法的名称。ウィジェットで顧客に表示されます。プロファイルが存在しない場合は空です。"
          },
          "wallet_address": {
            "type": "string"
          },
          "chain": {
            "type": "string",
            "description": "セッション作成時に指定したチェーン（送信したとおりの値）。"
          },
          "chain_family": {
            "type": "string",
            "nullable": true,
            "enum": [
              "EVM",
              "BTC",
              "SOL",
              "TRON",
              null
            ],
            "description": "チェーンの背後にあるキーファミリーです。EVM(Ethereum、BNB Chain、Polygon、Arbitrum、Base、Optimism、Avalanche、Lineaおよびその他のEVMチェーン)、BTC、SOL、TRONのいずれかです。1つのEVMキーは、すべてのEVMチェーンで同じアドレスを管理します。そのチェーンで署名を検証できない場合はnullです。"
          },
          "holder_name": {
            "type": "string"
          },
          "allowed_methods": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "MESSAGE_SIGNING",
                "SCREENSHOT",
                "SATOSHI_TEST",
                "SELF_DECLARATION"
              ]
            },
            "description": "このセッションで利用できる証明方法です。MESSAGE_SIGNINGにはchain_familyを持つチェーンが必要です。SATOSHI_TESTには、セッションに設定されたsatoshi_deposit_addressと、Diditが入金を読み取れるチェーンが必要です。SCREENSHOTにはallow_screenshot_proof設定が、SELF_DECLARATIONにはallow_self_declaration設定が必要です。"
          },
          "transfer_status": {
            "type": "string",
            "nullable": true,
            "description": "紐付けられたトラベルルール送金のステータスです。transaction_idなしでセッションが作成された場合はnullです。"
          },
          "callback_url": {
            "type": "string",
            "description": "完了後にウィジェットが顧客を戻す先です。未設定の場合は空です。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "証明が検証されると非nullになります。"
          },
          "proofs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TravelRuleWidgetProofSummary"
            }
          },
          "max_attempts": {
            "type": "integer",
            "description": "このセッションで許容される、ウォレット証明の拒否件数。"
          },
          "attempts_used": {
            "type": "integer",
            "description": "これまでに拒否された証明の数。"
          },
          "attempts_remaining": {
            "type": "integer",
            "description": "0の場合、別の証明を開始すると409が返されるため、新しいウィジェットセッションを発行します。"
          },
          "customization": {
            "type": "object",
            "nullable": true,
            "description": "ホワイトラベルが有効な場合の、アプリケーションのホワイトラベルのカスタマイズ（色、ロゴ、フォントファミリー）。ウィジェットは検証フローと同じブランディングで表示されます。それ以外の場合はnullです。"
          }
        }
      },
      "TravelRuleWidgetProofSummary": {
        "type": "object",
        "properties": {
          "proof_id": {
            "type": "string",
            "format": "uuid"
          },
          "method": {
            "type": "string",
            "enum": [
              "MESSAGE_SIGNING",
              "SATOSHI_TEST",
              "SCREENSHOT",
              "SELF_DECLARATION"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "VERIFIED",
              "REJECTED",
              "EXPIRED"
            ],
            "description": "PENDING: エンドユーザーがこの方法を選択し、証明がまだ判定されていない状態です。署名に失敗した場合や、テスト入金がまだ読み取れないか確認されていない場合、証明はfailure_reasonを伴ってPENDINGのままとなり、エンドユーザーは再試行できます。送信済みのSATOSHI_TEST入金は期間が終了するまで自動的に再確認され、送信済みのSCREENSHOTはお客様のレビューを待ちます。VERIFIED: ウォレットの所有権が証明されています。REJECTED: テスト入金が実際に誤っている場合（別の送金人からの入金、入金アドレスへの想定金額ではない入金、チャレンジより古い入金、またはすでに別のウォレットを証明した取引）か、お客様のレビュアーがスクリーンショットを却下した場合です。failure_reasonにその理由が示されます。却下された証明は確定であり、セッションの試行回数を1回消費します。EXPIRED: 証明をこれ以上判定できない状態です（期間の終了、エンドユーザーによる方法の切り替え、ウィジェットセッションの失効、またはウォレットの保有者の変更）。failure_reasonにその理由が示されます。"
          },
          "wallet_address": {
            "type": "string"
          },
          "chain": {
            "type": "string",
            "description": "証明の対象となるアドレス帳エントリの正規チェーン識別子(例:ETH、BTC、SOL、TRX)。"
          },
          "deposit_address": {
            "type": "string",
            "nullable": true,
            "description": "顧客がSatoshiテスト金額を送金する必要がある入金アドレス。SATOSHI_TEST証明の場合にのみ含まれます。"
          },
          "expected_amount": {
            "type": "string",
            "nullable": true,
            "description": "Satoshiテスト入金が一致しなければならない、入金のネイティブ通貨建ての正確なオンチェーン金額です。SATOSHI_TESTの証明にのみ含まれます。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このプルーフ自体のSatoshiテスト期間の期限。SATOSHI_TESTのプルーフにのみ含まれます。SATOSHI_TESTが提示される場合、ウィジェットセッション自体のexpires_atはこの期限をカバーするよう延長されます。"
          },
          "challenge": {
            "type": "string",
            "nullable": true,
            "description": "顧客が自身のウォレットで署名する、Diditが発行したメッセージです。MESSAGE_SIGNINGの証明の場合にのみ含まれます。"
          },
          "rejection_reason": {
            "type": "string",
            "description": "証明が却下された理由。エンドユーザー向けの英文で示されます。`status`がREJECTEDの場合にのみ含まれます。レビュアーがスクリーンショットを却下した場合は空です（メモは貴社側にのみ保持されます）。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "attempts": {
            "type": "integer",
            "description": "この証明のために証拠が提出された回数（署名、取引ID、アップロード）。"
          },
          "failure_reason": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleWalletProofFailureReason"
              }
            ],
            "description": "前回の試行が基準に達しなかった理由、または証明がクローズされた理由。失敗がない場合は空です。"
          }
        }
      },
      "CaseSubject": {
        "type": "object",
        "nullable": true,
        "description": "ケースが紐づく単一のユーザーまたは企業。",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "user",
              "business"
            ]
          },
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "external_id": {
            "type": "string",
            "nullable": true,
            "description": "対象のvendor_data。"
          },
          "country": {
            "type": "string",
            "nullable": true,
            "description": "対象者の3文字の国コード(ISO 3166-1 alpha-3)。不明な場合はnullです。企業の場合は設立国です。個人の場合は、認証で提出された本人確認書類の発行国です。複数の国の書類を持つ個人の場合はそのうち1つが表示され、`XXA`などのICAO書類コードが表示されることもあります。",
            "example": "ESP"
          },
          "portrait": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "人物の顔写真画像への有効期間の短い署名付きURL。企業の場合は常にnullで、顔写真のない人物の場合もnullです。URLには有効期限があるため、URLを保存するのではなく、ケースを読み取る際に画像をダウンロードしてください。"
          }
        }
      },
      "CaseAssignee": {
        "type": "object",
        "nullable": true,
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "full_name": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          }
        }
      },
      "CaseBlueprintSummary": {
        "type": "object",
        "nullable": true,
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "maxLength": 24
          }
        }
      },
      "CaseContentConfig": {
        "type": "object",
        "description": "ケースページに表示されるタブとフィールドを決定する、切り替え可能な6つのセクション。不明なセクションやキーは拒否されます。",
        "properties": {
          "checklist": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "optional": {
                "type": "boolean",
                "description": "trueの場合、チェックリストに未完了の項目があってもケースを解決できます。"
              },
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string",
                      "maxLength": 255
                    },
                    "order": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "aml_control": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "financial": {
                "type": "boolean"
              },
              "identity": {
                "type": "boolean"
              }
            }
          },
          "identity": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "personal_information": {
                "type": "boolean"
              },
              "applicant_tags": {
                "type": "boolean"
              },
              "contact_information": {
                "type": "boolean"
              },
              "risk_overview": {
                "type": "boolean"
              },
              "poi_documents": {
                "type": "boolean"
              },
              "poa_documents": {
                "type": "boolean"
              }
            }
          },
          "verifications": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "summary": {
                "type": "boolean"
              }
            }
          },
          "reporting": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "fiu_reports": {
                "type": "boolean"
              }
            }
          },
          "financial": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "payment_methods": {
                "type": "boolean"
              },
              "transactions": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "CaseNote": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "comment": {
            "type": "string"
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true
          },
          "actor_name": {
            "type": "string",
            "nullable": true
          },
          "mentioned_emails": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "is_internal": {
            "type": "boolean"
          },
          "attachments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "s3_key": {
                  "type": "string"
                },
                "filename": {
                  "type": "string"
                },
                "file_size": {
                  "type": "integer"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CaseEvent": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "event_type": {
            "type": "string",
            "enum": [
              "CREATED",
              "STATUS_CHANGED",
              "ASSIGNED",
              "UNASSIGNED",
              "RESOLVED",
              "REOPENED",
              "LINK_ADDED",
              "LINK_REMOVED",
              "NOTE_ADDED",
              "NOTE_PINNED",
              "NOTE_UNPINNED",
              "PRIORITY_CHANGED",
              "DUE_DATE_CHANGED",
              "TAG_ADDED",
              "TAG_REMOVED",
              "ESCALATED",
              "TRANSFERRED",
              "CHECKLIST_COMPLETED",
              "REPORT_CREATED",
              "REPORT_FINALIZED",
              "SUBMITTED_FOR_APPROVAL",
              "APPROVAL_GRANTED",
              "APPROVAL_REJECTED",
              "ENTITY_ACTION",
              "APPROVAL_INVALIDATED",
              "CUSTOMER_REQUEST",
              "STAGE_CHANGED",
              "TEAM_CHANGED",
              "CHECKER_ASSIGNED",
              "CHECKER_UNASSIGNED"
            ]
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true
          },
          "actor_name": {
            "type": "string",
            "nullable": true
          },
          "previous_status": {
            "type": "string",
            "enum": [
              "OPEN",
              "AWAITING_USER",
              "RESOLVED"
            ],
            "nullable": true
          },
          "new_status": {
            "type": "string",
            "enum": [
              "OPEN",
              "AWAITING_USER",
              "RESOLVED"
            ],
            "nullable": true
          },
          "metadata": {
            "type": "object"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CaseLink": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "linked_entity_type": {
            "type": "string",
            "enum": [
              "session",
              "business_session",
              "transaction"
            ],
            "nullable": true
          },
          "linked_entity_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "linked_entity_summary": {
            "type": "object",
            "nullable": true,
            "description": "sessionおよびbusiness_sessionのリンクではsession_id/session_number/status、transactionのリンクではuuid/txn_id/statusです。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CaseChecklistItem": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "label": {
            "type": "string",
            "maxLength": 255
          },
          "is_completed": {
            "type": "boolean"
          },
          "completed_by": {
            "type": "string",
            "format": "email",
            "nullable": true
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "order": {
            "type": "integer"
          }
        }
      },
      "CaseBlueprintListItem": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "maxLength": 24
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "assignment_method": {
            "type": "string",
            "enum": [
              "MANUAL",
              "AUTOMATIC"
            ]
          },
          "assignee_pool": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "max_active_cases": {
            "type": "integer",
            "nullable": true
          },
          "escalation_enabled": {
            "type": "boolean"
          },
          "transfer_enabled": {
            "type": "boolean"
          },
          "require_resolution_note": {
            "type": "boolean"
          },
          "is_active": {
            "type": "boolean"
          },
          "preset_key": {
            "type": "string",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "version": {
            "type": "integer",
            "readOnly": true
          },
          "default_deadline_hours": {
            "type": "integer",
            "nullable": true,
            "minimum": 1,
            "maximum": 8760
          }
        }
      },
      "CaseBlueprintDetail": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "maxLength": 24
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "assignment_method": {
            "type": "string",
            "enum": [
              "MANUAL",
              "AUTOMATIC"
            ]
          },
          "assignee_pool": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "max_active_cases": {
            "type": "integer",
            "nullable": true
          },
          "escalation_enabled": {
            "type": "boolean"
          },
          "transfer_enabled": {
            "type": "boolean"
          },
          "require_resolution_note": {
            "type": "boolean"
          },
          "is_active": {
            "type": "boolean"
          },
          "preset_key": {
            "type": "string",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "escalation_blueprint": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "escalation_blueprint_name": {
            "type": "string",
            "nullable": true
          },
          "four_eyes_checker_blueprint": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "four_eyes_checker_blueprint_name": {
            "type": "string",
            "nullable": true
          },
          "content_config": {
            "type": "object",
            "description": "ケースページに表示されるタブとフィールドを決定する、切り替え可能な6つのセクション。不明なセクションやキーは拒否されます。",
            "properties": {
              "checklist": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "optional": {
                    "type": "boolean",
                    "description": "trueの場合、チェックリストに未完了の項目があってもケースを解決できます。"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "label": {
                          "type": "string",
                          "maxLength": 255
                        },
                        "order": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              },
              "aml_control": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "financial": {
                    "type": "boolean"
                  },
                  "identity": {
                    "type": "boolean"
                  }
                }
              },
              "identity": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "personal_information": {
                    "type": "boolean"
                  },
                  "applicant_tags": {
                    "type": "boolean"
                  },
                  "contact_information": {
                    "type": "boolean"
                  },
                  "risk_overview": {
                    "type": "boolean"
                  },
                  "poi_documents": {
                    "type": "boolean"
                  },
                  "poa_documents": {
                    "type": "boolean"
                  }
                }
              },
              "verifications": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "summary": {
                    "type": "boolean"
                  }
                }
              },
              "reporting": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "fiu_reports": {
                    "type": "boolean"
                  }
                }
              },
              "financial": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "payment_methods": {
                    "type": "boolean"
                  },
                  "transactions": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "creation_sources": {
            "type": "array",
            "description": "現在、新しいケースをこのブループリントに振り分けているコネクター。",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "aml",
                    "rule",
                    "workflow"
                  ]
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              }
            }
          },
          "receives_escalation_from": {
            "type": "array",
            "description": "エスカレーション先としてこのブループリントを指定している他のブループリントです。",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              }
            }
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "version": {
            "type": "integer",
            "readOnly": true
          },
          "default_deadline_hours": {
            "type": "integer",
            "nullable": true,
            "minimum": 1,
            "maximum": 8760
          }
        }
      },
      "CaseListItem": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "case_number": {
            "type": "string",
            "nullable": true,
            "description": "自動で割り当てられます（例：CS-0001）。"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "OPEN",
              "AWAITING_USER",
              "RESOLVED"
            ]
          },
          "resolution": {
            "type": "string",
            "enum": [
              "FALSE_POSITIVE",
              "VALID_THREAT",
              "INCONCLUSIVE",
              "REQUIREMENTS_NOT_MET",
              "REQUIREMENTS_SATISFIED"
            ],
            "nullable": true
          },
          "pending_resolution": {
            "type": "object",
            "nullable": true,
            "description": "4眼原則による解決がチェッカーのブループリント上で保留され、承認または承認の却下を待っている間のみ設定されます。",
            "properties": {
              "resolution": {
                "type": "string",
                "enum": [
                  "FALSE_POSITIVE",
                  "VALID_THREAT",
                  "INCONCLUSIVE",
                  "REQUIREMENTS_NOT_MET",
                  "REQUIREMENTS_SATISFIED"
                ]
              },
              "resolution_notes": {
                "type": "string",
                "nullable": true
              },
              "maker_email": {
                "type": "string",
                "format": "email",
                "nullable": true,
                "description": "解決内容を提出した担当者のメールアドレス。APIキーで提出された場合はnullです。その解決内容には作成者が記録されないため、approveおよびreject-approvalはすべての呼び出し元に対して403を返します。"
              },
              "maker_name": {
                "type": "string",
                "nullable": true
              },
              "maker_user_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true,
                "description": "解決を送信した担当者のメンバーユーザーUUIDです。APIキーで送信された場合はnullです。そのメンバーを`checker`として指定することはできません。"
              },
              "maker_blueprint_id": {
                "type": "string",
                "format": "uuid"
              },
              "staged_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "checker": {
            "$ref": "#/components/schemas/CaseChecker"
          },
          "priority": {
            "type": "string",
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH"
            ]
          },
          "source": {
            "type": "string",
            "enum": [
              "MANUAL",
              "AML_SCREENING",
              "TRANSACTION_RULE",
              "WORKFLOW_BUILDER"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "subject": {
            "$ref": "#/components/schemas/CaseSubject"
          },
          "assigned_to": {
            "$ref": "#/components/schemas/CaseAssignee"
          },
          "assigned_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "team": {
            "$ref": "#/components/schemas/CaseTeamSummary"
          },
          "due_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "resolved_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "created_by_email": {
            "type": "string",
            "nullable": true
          },
          "created_by_name": {
            "type": "string",
            "nullable": true
          },
          "blueprint": {
            "$ref": "#/components/schemas/CaseBlueprintSummary"
          },
          "links_count": {
            "type": "integer"
          },
          "notes_count": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "application_name": {
            "type": "string"
          },
          "organization_id": {
            "type": "string",
            "format": "uuid"
          },
          "organization_name": {
            "type": "string"
          }
        }
      },
      "CaseDetail": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "case_number": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "OPEN",
              "AWAITING_USER",
              "RESOLVED"
            ]
          },
          "resolution": {
            "type": "string",
            "enum": [
              "FALSE_POSITIVE",
              "VALID_THREAT",
              "INCONCLUSIVE",
              "REQUIREMENTS_NOT_MET",
              "REQUIREMENTS_SATISFIED"
            ],
            "nullable": true
          },
          "resolution_notes": {
            "type": "string",
            "nullable": true
          },
          "priority": {
            "type": "string",
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH"
            ]
          },
          "source": {
            "type": "string",
            "enum": [
              "MANUAL",
              "AML_SCREENING",
              "TRANSACTION_RULE",
              "WORKFLOW_BUILDER"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "subject": {
            "$ref": "#/components/schemas/CaseSubject"
          },
          "assigned_to": {
            "$ref": "#/components/schemas/CaseAssignee"
          },
          "assigned_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "team": {
            "$ref": "#/components/schemas/CaseTeamSummary"
          },
          "due_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "resolved_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "resolved_by_email": {
            "type": "string",
            "nullable": true
          },
          "pending_resolution": {
            "type": "object",
            "nullable": true,
            "description": "4眼原則による解決がチェッカーのブループリント上で保留され、承認または承認の却下を待っている間のみ設定されます。",
            "properties": {
              "resolution": {
                "type": "string",
                "enum": [
                  "FALSE_POSITIVE",
                  "VALID_THREAT",
                  "INCONCLUSIVE",
                  "REQUIREMENTS_NOT_MET",
                  "REQUIREMENTS_SATISFIED"
                ]
              },
              "resolution_notes": {
                "type": "string",
                "nullable": true
              },
              "maker_email": {
                "type": "string",
                "format": "email",
                "nullable": true,
                "description": "解決内容を提出した担当者のメールアドレス。APIキーで提出された場合はnullです。その解決内容には作成者が記録されないため、approveおよびreject-approvalはすべての呼び出し元に対して403を返します。"
              },
              "maker_name": {
                "type": "string",
                "nullable": true
              },
              "maker_user_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true,
                "description": "解決を送信した担当者のメンバーユーザーUUIDです。APIキーで送信された場合はnullです。そのメンバーを`checker`として指定することはできません。"
              },
              "maker_blueprint_id": {
                "type": "string",
                "format": "uuid"
              },
              "staged_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "checker": {
            "$ref": "#/components/schemas/CaseChecker"
          },
          "metadata": {
            "type": "object"
          },
          "blueprint": {
            "$ref": "#/components/schemas/CaseBlueprintDetail"
          },
          "notes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseNote"
            },
            "description": "最新の50件のメモ。"
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseEvent"
            },
            "description": "最新の100件のイベント。"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseLink"
            }
          },
          "links_count": {
            "type": "integer"
          },
          "notes_count": {
            "type": "integer"
          },
          "checklist_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseChecklistItem"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ReportTemplateDetail": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "jurisdiction": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "ISO 3166-1 alpha-2国コード。"
          },
          "report_type": {
            "type": "string",
            "enum": [
              "SAR",
              "STR",
              "CTR",
              "TTR",
              "UTR",
              "IFT",
              "CBR",
              "TFR"
            ]
          },
          "report_type_display": {
            "type": "string"
          },
          "field_config": {
            "type": "object",
            "description": "再利用可能なgoAMLヘッダーのデフォルト値。テンプレートレベルの必須フィールド：rentity_id、submission_code、currency_code_local（3文字）。任意：enabled_fields（含める任意のレポートブロック）と、reporting_person、location、reason、actionのデフォルト値。提出ごとのヘッダーフィールド（action、submission_date、transactions、jurisdiction）の必須チェックは、テンプレートではなく、レポートの検証時または確定時に行われます。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RegulatoryReportDetail": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "case_uuid": {
            "type": "string",
            "format": "uuid"
          },
          "case_number": {
            "type": "string",
            "nullable": true
          },
          "report_type": {
            "type": "string",
            "enum": [
              "SAR",
              "STR",
              "CTR",
              "TTR",
              "UTR",
              "IFT",
              "CBR",
              "TFR"
            ]
          },
          "report_type_display": {
            "type": "string"
          },
          "report_code": {
            "type": "string",
            "description": "report_typeから導出されるgoAMLのレポートコード。例：STR、CTR、BCR。"
          },
          "report_number": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "enum": [
              "DRAFT",
              "VALIDATED",
              "FINALIZED"
            ]
          },
          "status_display": {
            "type": "string"
          },
          "jurisdiction": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2
          },
          "rentity_id": {
            "type": "string",
            "nullable": true,
            "description": "FIUが発行した報告主体ID。"
          },
          "rentity_branch": {
            "type": "string",
            "nullable": true
          },
          "submission_code": {
            "type": "string",
            "enum": [
              "E",
              "M"
            ]
          },
          "entity_reference": {
            "type": "string",
            "nullable": true
          },
          "fiu_ref_number": {
            "type": "string",
            "nullable": true
          },
          "currency_code_local": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3,
            "nullable": true
          },
          "submission_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "reporting_person": {
            "type": "object"
          },
          "location": {
            "type": "object"
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "action": {
            "type": "string",
            "nullable": true
          },
          "activity": {
            "type": "string",
            "nullable": true
          },
          "narrative": {
            "type": "object",
            "description": "5W（Five Ws）形式のナラティブセクション。",
            "properties": {
              "who": {
                "type": "string"
              },
              "what": {
                "type": "string"
              },
              "when": {
                "type": "string"
              },
              "where": {
                "type": "string"
              },
              "why": {
                "type": "string"
              },
              "how": {
                "type": "string"
              }
            }
          },
          "report_indicators": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "included_fields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "transactions": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "validation_errors": {
            "type": "array",
            "description": "直近の検証の結果。各エントリは{field, message}オブジェクトです。",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          },
          "validated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "finalized_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "created_by_email": {
            "type": "string",
            "nullable": true
          },
          "created_by_name": {
            "type": "string",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TransactionRuleCondition": {
        "type": "object",
        "required": [
          "field",
          "operator"
        ],
        "properties": {
          "field": {
            "type": "string",
            "description": "評価する取引フィールドのパス。主要フィールド: amount, currency, direction, action_type, score, severity, transaction_type, payment_details, preferred_currency_amount（ない場合はamount_in_default_currencyにフォールバック）, default_currency_code, subject_country, counterparty_country, subject_vendor_data, counterparty_vendor_data, subject_device_fingerprint, counterparty_device_fingerprint, subject_browser_family, subject_browser_version, subject_platform, subject_accept_language, subject_session_age_ms, subject_ip_country, counterparty_ip_country, subject_ip_address, counterparty_ip_address, subject_payment_method_type, subject_payment_method_country, subject_payment_method_fingerprint, subject_payment_method_account_id（およびcounterparty_payment_method_*の対応フィールド）, travel_rule_status, travel_rule_required, travel_rule_obligations_count, counterparty_dd_status（トラベルルールの取引相手に対するあなたの判定: APPROVED、RESTRICTEDまたはBLOCKED。エンティティはそのブランドの判定に従います）, counterparty_risk_level（LOW、MEDIUMまたはHIGH。自社の取引相手スクリーニングでフラグが立っている間はHIGH）, counterparty_jurisdiction（取引相手VASPの国）, counterparty_responsiveness（RESPONSIVE、UNRESPONSIVEまたはUNKNOWN）, subject_days_since_previous_transaction, tags、および取引作成時にcustom_propertiesで送信した任意のキーに対するcustom_values.<key>。国コードのフィールドはISO-2またはISO-3を受け付け、比較の前に両側ともISO-3に正規化されます。"
          },
          "operator": {
            "type": "string",
            "enum": [
              "eq",
              "ne",
              "gt",
              "gte",
              "lt",
              "lte",
              "in",
              "not_in",
              "contains",
              "not_contains",
              "contains_any",
              "regex",
              "fuzzy_match",
              "exists",
              "is_not_empty",
              "is_not_null",
              "not_exists",
              "is_empty",
              "is_null"
            ],
            "description": "比較演算子。in/not_inはメンバーシップを判定します(valueにはリストまたは単一のスカラー値を指定できます)。contains/not_containsは文字列値に対して大文字と小文字を区別しない部分文字列チェックを行います。contains_anyは文字列のリストを受け取り、いずれかがフィールド値の部分文字列(大文字と小文字を区別しない)である場合に一致します。regexはvalueのパターンをフィールドに照合します。fuzzy_matchはvalueの文字列と比較し、必要な`score`しきい値(0-100)を適用します。gt/gte/lt/lteは、どちらか一方が欠落している場合は一致しません。exists/is_not_empty/is_not_null(エイリアス)およびnot_exists/is_empty/is_null(エイリアス)は存在チェックであり、`value`を無視します。"
          },
          "value": {
            "description": "比較値。形式は演算子とvalue_typeによって異なります。存在チェックの演算子では省略してください。それ以外のすべての演算子では`null`や空のリストではない値が必要で、そうでない場合ルールは`400`で拒否されます。`contains_any`には文字列のリストが、`contains`、`not_contains`、`regex`には単一の文字列が必要です。"
          },
          "value_type": {
            "type": "string",
            "enum": [
              "list",
              "field",
              "relative_date"
            ],
            "description": "任意の値の解釈方法です。`list`：値はリストのUUIDで、リストのエントリーが比較値になります。`field`：値は別のフィールドパスで、フィールド同士で比較されます。`relative_date`：値は相対日付オブジェクトです（例：{\"direction\": \"past\", \"unit\": \"days\", \"amount\": 30}）。"
          },
          "score": {
            "type": "number",
            "minimum": 0,
            "maximum": 100,
            "description": "operatorがfuzzy_matchの場合は必須：0〜100の類似度しきい値。"
          },
          "group_index": {
            "type": "integer",
            "description": "任意のグループ化ロジックです。いずれかの条件にgroup_indexが含まれる場合、同じインデックスを持つ条件がグループを形成し、evaluation_modeの代わりにグループ単位の評価が行われます。"
          },
          "group_logic": {
            "type": "string",
            "enum": [
              "AND",
              "OR"
            ],
            "default": "AND",
            "description": "グループ「内」で条件をどのように組み合わせるかを指定します。"
          },
          "groups_logic": {
            "type": "string",
            "enum": [
              "AND",
              "OR"
            ],
            "default": "OR",
            "description": "グループ「間」で各グループの結果をどのように組み合わせるかを指定します。最初の条件から読み取られます。"
          }
        },
        "description": "条件は評価対象の取引のみを読み取ります。集計ウィンドウを絞り込むことはありません。"
      },
      "TransactionRuleAggregation": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "metric": {
            "type": "string",
            "enum": [
              "count",
              "sum",
              "max",
              "min",
              "avg",
              "distinct_count"
            ],
            "default": "count",
            "description": "一致する過去の取引の集計方法。unique_countはdistinct_countの別名として受け付けられます。"
          },
          "field": {
            "type": "string",
            "default": "amount",
            "description": "sum/max/min/avg/distinct_countで集計するフィールド。countでは無視されます。"
          },
          "operator": {
            "type": "string",
            "enum": [
              "eq",
              "ne",
              "gt",
              "gte",
              "lt",
              "lte"
            ],
            "default": "eq",
            "description": "算出された指標に適用される比較。"
          },
          "value": {
            "type": "number",
            "description": "算出された指標と比較されるしきい値。"
          },
          "window": {
            "type": "string",
            "pattern": "^\\d+(m|h|d)$",
            "default": "1d",
            "description": "取引のtxn_dateを終点とする遡及期間: <N>m（月ではなく分）、<N>h（時間）、または<N>d（日）。例: 30m、24h、7d、30d。"
          },
          "filters": {
            "type": "object",
            "additionalProperties": true,
            "description": "集計の対象となる過去の取引を絞り込みます。キーは条件フィールドカタログのフィールドパスです。値に\"__current__\"を指定すると、評価中の取引における同じフィールドの値に解決されます（例: {\"subject_vendor_data\": \"__current__\"}は期間を同一の対象者に限定します）。リスト値は、そのいずれかに含まれることを意味します。フィルターの比較は等価または包含のみです。lt/gteのフィルターはないため、「10,000未満の過去の取引」のような範囲はここでは表現できません。範囲はメトリクス側で指定してください（メトリクスmaxと演算子ltを組み合わせると、期間内のすべての取引がしきい値未満であることを条件にできます）。"
          }
        },
        "description": "ウィンドウ内のアプリケーションの過去の取引に対するベロシティチェックです。evaluation_modeにかかわらず、ルールが一致するにはすべての集計エントリーが一致する必要があります。集計が制約するのはウィンドウのみです。評価対象の取引はscopeとconditionsによって制約されるため、ルールでdirection、currency、transaction_typeを保証する場合は、その両方に同じ条件を繰り返し指定してください。"
      },
      "TransactionRuleScope": {
        "type": "object",
        "properties": {
          "transaction_types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "取引の種類に限定します（例：finance、kyc、travel_rule、user_event）。空または未指定の場合は制限なしとなります。"
          },
          "directions": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "INBOUND",
                "OUTBOUND"
              ]
            },
            "description": "取引の方向に限定します（書き込み時は大文字と小文字を区別しません）。"
          },
          "action_types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "独自のaction_type値に限定します（例：withdrawal、deposit）。"
          }
        },
        "description": "ルールを適用する取引。受け付けられるキーはこの3つのみです。"
      },
      "TransactionRuleAction": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/TransactionRuleActionAddScore"
          },
          {
            "$ref": "#/components/schemas/TransactionRuleActionChangeStatus"
          },
          {
            "$ref": "#/components/schemas/TransactionRuleActionAddTags"
          },
          {
            "$ref": "#/components/schemas/TransactionRuleActionAddNote"
          },
          {
            "$ref": "#/components/schemas/TransactionRuleActionAddToList"
          },
          {
            "$ref": "#/components/schemas/TransactionRuleActionOpenCase"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "add_score": "#/components/schemas/TransactionRuleActionAddScore",
            "change_status": "#/components/schemas/TransactionRuleActionChangeStatus",
            "add_tags": "#/components/schemas/TransactionRuleActionAddTags",
            "add_note": "#/components/schemas/TransactionRuleActionAddNote",
            "add_to_list": "#/components/schemas/TransactionRuleActionAddToList",
            "open_case": "#/components/schemas/TransactionRuleActionOpenCase"
          }
        },
        "description": "ルールのアクション1件です。1つのルールに複数のアクションを設定でき、ルールに一致した場合はすべてが同時に適用されます。TESTモードのルールは、アクションを一切適用せずに、実行していたはずの内容を記録します。"
      },
      "TransactionRuleCreateRequest": {
        "type": "object",
        "required": [
          "title",
          "category",
          "mode"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "ルール名。アプリケーション内の削除されていないルールの間で一意である必要があり、重複する場合は400が返されます。"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "description": "グループ化とレポートに使用されるリスクテーマです。例: finance、aml_ctf、anomaly_detection、fatf、device_intelligence、crypto_monitoring、travel_rule、responsible_gaming、e_commerce。"
          },
          "mode": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED",
              "TEST"
            ],
            "description": "ACTIVEは本番で評価します。TESTは評価してルールの実行を記録しますが、スコアやステータスには一切影響しません。最初に推奨されるモードです。DISABLEDはスキップされます。"
          },
          "evaluation_mode": {
            "type": "string",
            "enum": [
              "ALL",
              "ANY"
            ],
            "default": "ALL",
            "description": "すべての条件に一致する必要がある（ALL）か、少なくとも1つに一致すればよい（ANY）かです。条件でgroup_indexを使用する場合は無視されます。"
          },
          "scope": {
            "$ref": "#/components/schemas/TransactionRuleScope"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleCondition"
            }
          },
          "aggregation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAggregation"
            }
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAction"
            }
          },
          "metadata": {
            "type": "object",
            "description": "ルールに保存される自由形式のメタデータ。"
          }
        },
        "description": "CUSTOMルールを作成します。ACTIVEモードのルールは新しい取引に即座に適用されるため、まずTESTモードで作成してバックテストを行ってください。"
      },
      "TransactionRuleUpdateRequest": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "ルール名。アプリケーション内の削除されていないルールの間で一意である必要があり、重複する場合は400が返されます。"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "description": "グループ化とレポートに使用されるリスクテーマです。例: finance、aml_ctf、anomaly_detection、fatf、device_intelligence、crypto_monitoring、travel_rule、responsible_gaming、e_commerce。"
          },
          "mode": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED",
              "TEST"
            ],
            "description": "ACTIVEは本番で評価します。TESTは評価してルールの実行を記録しますが、スコアやステータスには一切影響しません。最初に推奨されるモードです。DISABLEDはスキップされます。"
          },
          "evaluation_mode": {
            "type": "string",
            "enum": [
              "ALL",
              "ANY"
            ],
            "default": "ALL",
            "description": "すべての条件に一致する必要がある（ALL）か、少なくとも1つに一致すればよい（ANY）かです。条件でgroup_indexを使用する場合は無視されます。"
          },
          "scope": {
            "$ref": "#/components/schemas/TransactionRuleScope"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleCondition"
            }
          },
          "aggregation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAggregation"
            }
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAction"
            }
          },
          "metadata": {
            "type": "object",
            "description": "ルールに保存される自由形式のメタデータ。"
          }
        },
        "description": "部分更新。カスタムルールはすべてのフィールドを受け付けますが、ライブラリ(PRESET)ルールはmodeのみを受け付け、それ以外を指定すると400が返されます。"
      },
      "TransactionRuleDetail": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "ルール名。アプリケーション内の削除されていないルールの間で一意である必要があり、重複する場合は400が返されます。"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "description": "グループ化とレポートに使用されるリスクテーマです。例: finance、aml_ctf、anomaly_detection、fatf、device_intelligence、crypto_monitoring、travel_rule、responsible_gaming、e_commerce。"
          },
          "mode": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED",
              "TEST"
            ],
            "description": "ACTIVEは本番で評価します。TESTは評価してルールの実行を記録しますが、スコアやステータスには一切影響しません。最初に推奨されるモードです。DISABLEDはスキップされます。"
          },
          "evaluation_mode": {
            "type": "string",
            "enum": [
              "ALL",
              "ANY"
            ],
            "default": "ALL",
            "description": "すべての条件に一致する必要がある（ALL）か、少なくとも1つに一致すればよい（ANY）かです。条件でgroup_indexを使用する場合は無視されます。"
          },
          "scope": {
            "$ref": "#/components/schemas/TransactionRuleScope"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleCondition"
            }
          },
          "aggregation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAggregation"
            }
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAction"
            }
          },
          "metadata": {
            "type": "object",
            "description": "ルールに保存される自由形式のメタデータ。"
          },
          "severity": {
            "type": "string",
            "enum": [
              "UNKNOWN",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ],
            "nullable": true,
            "description": "ライブラリルールが持つ情報レベルの重大度。カスタムルールでは設定できません。"
          },
          "source": {
            "type": "string",
            "enum": [
              "PRESET",
              "CUSTOM"
            ],
            "description": "PRESETルールはライブラリから提供されます（インストール/アンインストール、モードのみの編集）。CUSTOMルールは完全にお客様のものです。"
          },
          "library_key": {
            "type": "string",
            "nullable": true,
            "description": "安定したライブラリ識別子。カスタムルールの場合はnullです。"
          },
          "latest_triggered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "run_count": {
            "type": "integer",
            "description": "このルールに一致した取引の数。"
          },
          "approved_count": {
            "type": "integer"
          },
          "reviewed_count": {
            "type": "integer"
          },
          "declined_count": {
            "type": "integer"
          },
          "awaiting_user_count": {
            "type": "integer"
          },
          "approved_pct": {
            "type": "number"
          },
          "reviewed_pct": {
            "type": "number"
          },
          "declined_pct": {
            "type": "number"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TransactionRuleBacktestRequest": {
        "type": "object",
        "properties": {
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleCondition"
            },
            "default": []
          },
          "aggregation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAggregation"
            },
            "default": []
          },
          "evaluation_mode": {
            "type": "string",
            "enum": [
              "ALL",
              "ANY"
            ],
            "default": "ALL"
          },
          "scope": {
            "$ref": "#/components/schemas/TransactionRuleScope"
          },
          "period_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 90
          }
        },
        "description": "直近の取引に対して評価する仮のルール設定。読み取り専用かつ無料で、何も作成・変更されません。有効化する予定のルールと同じconditions、aggregation、evaluation_mode、scopeを送信してください。省略したconditions、aggregation、scopeは、それ自体では制約を追加しません。scopeを省略すると、保存済みのルールが対象外とする方向や取引種別が含まれる場合があります。evaluation_modeを省略するとデフォルトはALLになり（ANYルールでは一致件数が減る可能性があります）、period_daysを省略するとデフォルトは無制限の履歴ではなく90日になります。"
      },
      "TransactionRuleBacktestResult": {
        "type": "object",
        "properties": {
          "evaluated": {
            "type": "integer",
            "description": "評価された取引（新しい順、上限あり）。"
          },
          "matched": {
            "type": "integer",
            "description": "この設定が一致していたはずの取引。"
          },
          "affected_entities": {
            "type": "integer",
            "description": "一致結果に含まれる個別の対象者(vendor_data単位)。"
          },
          "period_days": {
            "type": "integer"
          }
        }
      },
      "TransactionRuleLibraryEntry": {
        "type": "object",
        "properties": {
          "library_key": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string"
          },
          "evaluation_mode": {
            "type": "string",
            "enum": [
              "ALL",
              "ANY"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/TransactionRuleScope"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleCondition"
            }
          },
          "aggregation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAggregation"
            }
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionRuleAction"
            }
          },
          "metadata": {
            "type": "object"
          },
          "bundle": {
            "type": "string",
            "nullable": true,
            "description": "機能分類。例：finance、aml_ctf、crypto_monitoring、travel_rule、responsible_gaming。"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "industries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source": {
            "type": "string"
          },
          "is_installed": {
            "type": "boolean",
            "description": "このプリセットが現在アプリケーションにインストールされているかどうか。"
          }
        }
      },
      "TransactionRuleInstallRequest": {
        "type": "object",
        "properties": {
          "library_keys": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "インストールまたはアンインストールする特定のプリセット。"
          },
          "bundle": {
            "type": "string",
            "description": "代わりに、このバンドル内のすべてのプリセットをインストールまたはアンインストールします。"
          }
        },
        "description": "library_keysまたはbundleのいずれかを指定してください。"
      },
      "TransactionRuleInstallResult": {
        "type": "object",
        "properties": {
          "installed_library_keys": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "POST（インストール）のみ: この呼び出しでインストールされたプリセット。"
          },
          "installed_count": {
            "type": "integer",
            "description": "POST（インストール）のみ。"
          },
          "uninstalled_count": {
            "type": "integer",
            "description": "DELETE（アンインストール）のみ：この呼び出しで削除されたプリセット。"
          }
        }
      },
      "WalletScreeningResult": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "description": "スクリーニングを実行したプロバイダーです(例:`merklescience`、`crystal`)。"
          },
          "screening_type": {
            "type": "string",
            "enum": [
              "WALLET_SCREENING"
            ],
            "description": "このエンドポイントでは常に`WALLET_SCREENING`です。"
          },
          "risk_score": {
            "type": "integer",
            "description": "0〜100に正規化されたリスクスコア。値が高いほど、リスクのあるエンティティへのエクスポージャーが大きいことを意味します。Merkle Scienceはアドレスを0〜5で評価し、それぞれ0、15、35、55、75、95に対応します。"
          },
          "severity": {
            "type": "string",
            "enum": [
              "UNKNOWN",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ],
            "description": "`risk_score`から導出されるリスク区分です。`0-9`はUNKNOWN、`10-39`はLOW、`40-69`はMEDIUM、`70-89`はHIGH、`90-100`はCRITICALです。`UNKNOWN`は最も低い区分であり、データなしを表す別の状態ではありません。`risk_score`が0(問題のないアドレスでよくあるケース)の場合は不利な評価がないことを意味し、1から9の範囲のゼロ以外のスコアはLOW未満ではあるものの実際のシグナルです。区分だけでなく`risk_score`を確認してください。`UNKNOWN`を低リスクや問題なしという積極的な評価として扱わないでください。合格として表示しないでください。"
          },
          "status": {
            "type": "string",
            "enum": [
              "SCREENED",
              "PENDING",
              "ERROR"
            ],
            "description": "スクリーニング結果のステータス。"
          },
          "summary": {
            "type": "string",
            "description": "スクリーニング結果の、人が読める形式の概要。"
          },
          "wallet_address": {
            "type": "string",
            "description": "スクリーニングされたアドレスで、そのまま返されます。"
          },
          "transaction_hash": {
            "type": "string",
            "nullable": true,
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に`null`です。"
          },
          "blockchain": {
            "type": "string",
            "description": "スクリーニングされたブロックチェーン。"
          },
          "block_timestamp": {
            "type": "string",
            "nullable": true,
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に`null`です。"
          },
          "total_value_usd": {
            "type": "number",
            "nullable": true,
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に`null`です。"
          },
          "fee_usd": {
            "type": "number",
            "nullable": true,
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に`null`です。"
          },
          "sender_rows": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に空です。"
          },
          "receiver_rows": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に空です。"
          },
          "transaction_flows": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に空です。"
          },
          "transaction_flows_status": {
            "type": "string",
            "nullable": true,
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に`null`です。"
          },
          "transaction_flows_error": {
            "type": "string",
            "nullable": true,
            "description": "取引スクリーニングのフィールドで、結果の形式と共通です。ウォレットスクリーニングの結果では常に`null`です。"
          },
          "source_of_funds": {
            "type": "array",
            "description": "このアドレスが資金を受け取った送金元（エンティティ別に帰属を特定）。各エントリはエクスポージャーの内訳です。",
            "items": {
              "type": "object",
              "properties": {
                "category": {
                  "type": "string",
                  "description": "正規化されたリスクカテゴリ。例: `exchange_licensed`、`dex`、`defi`、`payment_processor`、`mixer`、`darknet_market`、`sanctioned`、`stolen_funds`、`high_risk_exchange`。"
                },
                "percentage": {
                  "type": "number",
                  "description": "その方向の総エクスポージャーに占める割合（0〜100）。"
                },
                "amount_usd": {
                  "type": "number",
                  "nullable": true,
                  "description": "このエンティティに帰属するUSD価値。"
                },
                "entity_name": {
                  "type": "string",
                  "nullable": true,
                  "description": "帰属先エンティティの名称（例：取引所、ミキサー、制裁対象グループ）。"
                },
                "entity_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーにおけるエンティティの種類です(例:`Exchange`、`DeFi`、`Sanctions`、`Theft`)。"
                },
                "entity_subtype": {
                  "type": "string",
                  "nullable": true,
                  "description": "より詳細なサブタイプ（例: `Mandatory KYC and AML`、`OFAC`、`Yield Aggregator`）。"
                },
                "hops": {
                  "type": "integer",
                  "nullable": true,
                  "description": "プロバイダーが報告する場合の、エンティティまでのホップ数（直接の取引相手の場合は1）。Merkle Scienceでは常に`null`です。Merkle Scienceはエクスポージャーが直接か間接かのみを報告するため、`exposure_type`を使用してください。"
                },
                "description": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーによるエンティティのラベルどおりの`entity_type / entity_subtype`。"
                },
                "is_direct": {
                  "type": "boolean",
                  "description": "`exposure_type`が`direct`の場合はtrue。"
                },
                "exposure_direction": {
                  "type": "string",
                  "enum": [
                    "incoming",
                    "outgoing",
                    "connected"
                  ],
                  "description": "資金がこのエンティティから来たもの(`incoming`)か、このエンティティへ送られたもの(`outgoing`)か。"
                },
                "exposure_type": {
                  "type": "string",
                  "enum": [
                    "direct",
                    "indirect"
                  ],
                  "description": "`direct`（1ホップ）または`indirect`（マルチホップ）のエクスポージャー。"
                },
                "provider_entity_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "エンティティに対するプロバイダー独自の識別子です。"
                },
                "provider_entity_type_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "`entity_type`に対するプロバイダー独自の識別子です。"
                },
                "provider_entity_subtype_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "`entity_subtype`に対するプロバイダー独自の識別子です。"
                },
                "country": {
                  "type": "string",
                  "nullable": true,
                  "description": "エンティティの主たる国(ISO 3166-1 alpha-2)。プロバイダーが把握していない場合は空または`null`です。"
                },
                "raw_amount": {
                  "type": "number",
                  "nullable": true,
                  "description": "資産自体の単位での金額（プロバイダーが報告する場合）。"
                },
                "raw_currency": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーが報告する場合の`raw_amount`の単位。"
                }
              }
            }
          },
          "destination_of_funds": {
            "type": "array",
            "description": "このアドレスが資金を送った送金先（エンティティ別に帰属を特定）。項目の形式は`source_of_funds`と同じで、`exposure_direction` = `outgoing`です。",
            "items": {
              "type": "object",
              "properties": {
                "category": {
                  "type": "string",
                  "description": "正規化されたリスクカテゴリ。例: `exchange_licensed`、`dex`、`defi`、`payment_processor`、`mixer`、`darknet_market`、`sanctioned`、`stolen_funds`、`high_risk_exchange`。"
                },
                "percentage": {
                  "type": "number",
                  "description": "その方向の総エクスポージャーに占める割合（0〜100）。"
                },
                "amount_usd": {
                  "type": "number",
                  "nullable": true,
                  "description": "このエンティティに帰属するUSD価値。"
                },
                "entity_name": {
                  "type": "string",
                  "nullable": true,
                  "description": "帰属先エンティティの名称（例：取引所、ミキサー、制裁対象グループ）。"
                },
                "entity_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーにおけるエンティティの種類です(例:`Exchange`、`DeFi`、`Sanctions`、`Theft`)。"
                },
                "entity_subtype": {
                  "type": "string",
                  "nullable": true,
                  "description": "より詳細なサブタイプ（例: `Mandatory KYC and AML`、`OFAC`、`Yield Aggregator`）。"
                },
                "hops": {
                  "type": "integer",
                  "nullable": true,
                  "description": "プロバイダーが報告する場合の、エンティティまでのホップ数（直接の取引相手の場合は1）。Merkle Scienceでは常に`null`です。Merkle Scienceはエクスポージャーが直接か間接かのみを報告するため、`exposure_type`を使用してください。"
                },
                "description": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーによるエンティティのラベルどおりの`entity_type / entity_subtype`。"
                },
                "is_direct": {
                  "type": "boolean",
                  "description": "`exposure_type`が`direct`の場合はtrue。"
                },
                "exposure_direction": {
                  "type": "string",
                  "enum": [
                    "incoming",
                    "outgoing",
                    "connected"
                  ],
                  "description": "資金がこのエンティティから来たもの(`incoming`)か、このエンティティへ送られたもの(`outgoing`)か。"
                },
                "exposure_type": {
                  "type": "string",
                  "enum": [
                    "direct",
                    "indirect"
                  ],
                  "description": "`direct`（1ホップ）または`indirect`（マルチホップ）のエクスポージャー。"
                },
                "provider_entity_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "エンティティに対するプロバイダー独自の識別子です。"
                },
                "provider_entity_type_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "`entity_type`に対するプロバイダー独自の識別子です。"
                },
                "provider_entity_subtype_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "`entity_subtype`に対するプロバイダー独自の識別子です。"
                },
                "country": {
                  "type": "string",
                  "nullable": true,
                  "description": "エンティティの主たる国(ISO 3166-1 alpha-2)。プロバイダーが把握していない場合は空または`null`です。"
                },
                "raw_amount": {
                  "type": "number",
                  "nullable": true,
                  "description": "資産自体の単位での金額（プロバイダーが報告する場合）。"
                },
                "raw_currency": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーが報告する場合の`raw_amount`の単位。"
                }
              }
            }
          },
          "counterparty_connections": {
            "type": "array",
            "description": "プロバイダーがスクリーニング対象のアドレスに紐付けたエンティティ。Merkle Scienceの場合、これらはアドレス自体の所有者タグとユーザータグから取得されるため、同じエンティティが2回表示されることがあり、資金フローは含まれません。`received_usd`、`sent_usd`、`received_hops`、`sent_hops`は`null`で、`percentage`は0です。ここでは`risk_level`や`is_direct`に基づいて処理を分岐しないでください。判定には`sanctions_hit`、`dominant_risk_category`、`risk_factors[].is_high_risk`を、直接性の判断には`source_of_funds`/`destination_of_funds`内の`exposure_type`を使用してください。",
            "items": {
              "type": "object",
              "properties": {
                "entity_name": {
                  "type": "string",
                  "nullable": true,
                  "description": "帰属先のエンティティ名。"
                },
                "entity_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーにおけるエンティティの種類です。"
                },
                "entity_subtype": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロバイダーにおけるエンティティのサブタイプです。"
                },
                "risk_level": {
                  "type": "string",
                  "description": "小文字で、プロバイダーに依存します。Merkle Scienceの場合は、アドレス自体の0〜5のリスク等級（`no_risk`、`low`、`medium_low`、`medium`、`high`、`critical`）で、エンティティのカテゴリーが高リスクの場合は`high`に引き上げられます。エンティティ独自の等級ではありません。"
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "エンティティの正規化されたリスクカテゴリー。"
                },
                "received_usd": {
                  "type": "number",
                  "nullable": true,
                  "description": "エンティティから受け取ったUSD額(プロバイダーが報告する場合)。"
                },
                "sent_usd": {
                  "type": "number",
                  "nullable": true,
                  "description": "エンティティに送ったUSD額(プロバイダーが報告する場合)。"
                },
                "received_hops": {
                  "type": "integer",
                  "nullable": true,
                  "description": "受取側のエンティティまでのホップ数です(プロバイダーが報告した場合)。"
                },
                "sent_hops": {
                  "type": "integer",
                  "nullable": true,
                  "description": "送信側のエンティティまでのホップ数です(プロバイダーが報告した場合)。"
                },
                "percentage": {
                  "type": "number",
                  "description": "プロバイダーが報告している場合は、そのアドレスのエクスポージャーに占める割合。それ以外の場合は0。"
                },
                "is_direct": {
                  "type": "boolean",
                  "description": "Merkle Scienceでは常に`true`です。Merkle Scienceの接続は取引相手ではなく帰属情報であるためです。"
                },
                "country": {
                  "type": "string",
                  "nullable": true,
                  "description": "判明している場合、エンティティの国。"
                },
                "provider_entity_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "エンティティに対するプロバイダー独自の識別子です。"
                }
              }
            }
          },
          "network_nodes": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "取引スクリーニング用のエクスポージャーグラフのノードです。ウォレットスクリーニングの結果では空になります。"
          },
          "network_edges": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "取引スクリーニング用のエクスポージャーグラフのエッジです。ウォレットスクリーニングの結果では空になります。"
          },
          "sanctions_hit": {
            "type": "boolean",
            "description": "アドレスに直接的または間接的な制裁エクスポージャーがある場合はtrue。"
          },
          "pep_counterparty": {
            "type": "boolean",
            "description": "重要な公的地位を有する者 (PEP)への該当状況。PEPの検出結果がない場合は`null`となり、現時点ではPEPの結果を報告するプロバイダーがないため、すべての結果がこれに該当します。`false`は、スクリーニングで明示的に否定的な結果が出た場合にのみ返されます。`null`をPEPチェック完了と解釈しないでください。",
            "nullable": true
          },
          "dominant_risk_category": {
            "type": "string",
            "nullable": true,
            "description": "最も重みの高い高リスクカテゴリです(例: `sanctioned`、`mixer`、`stolen_funds`)。支配的なカテゴリがない場合は`null`です。"
          },
          "risk_factors": {
            "type": "array",
            "description": "`risk_score`の順位付きの説明で、この判定を導いた要因を示します。プロバイダーは独自のモデルでアドレスを評価し、判定のみを返すため（Merkle Scienceは0〜5の整数を返します）、スコアだけでは対応に活かせません。高リスクのものを先頭に、次に各ドライバーを経由した金額の大きい順に並べ、上位5件までに制限されます。`source_of_funds`と`destination_of_funds`には常に完全な内訳が含まれます。`risk_score`が高いにもかかわらず`is_high_risk`のエントリがない場合は、プロバイダーが制裁や帰属エンティティとの一致を報告しておらず、独自のエクスポージャーモデルのみでアドレスを評価したことを意味します。このことは`summary`に明記されます。",
            "items": {
              "type": "object",
              "properties": {
                "source": {
                  "type": "string",
                  "enum": [
                    "attribution",
                    "exposure"
                  ],
                  "description": "`attribution`はプロバイダーがそのアドレス自体を何と判断しているか（独自のタグやクラスター）を示し、`exposure`はその資金が実際にどこへ移動したかを示します。"
                },
                "category": {
                  "type": "string",
                  "description": "正規化されたリスクカテゴリ。エクスポージャーの内訳と同じ語彙を使用します。"
                },
                "label": {
                  "type": "string",
                  "description": "この要因に対するプロバイダー独自の表記（例：`Gambling / Crypto only`）で、プロバイダーのコンソールに表示されるものと同じです。"
                },
                "entity_name": {
                  "type": "string",
                  "nullable": true,
                  "description": "ドライバーの背後にある帰属先エンティティ。たとえばギャンブルサイトや取引所などです。"
                },
                "direction": {
                  "type": "string",
                  "enum": [
                    "incoming",
                    "outgoing",
                    "connected",
                    "unknown",
                    "attribution"
                  ],
                  "description": "資金フローの方向です。要因がアドレス自体のタグである場合は`attribution`、プロバイダーが方向を報告しなかった場合は`unknown`となります。"
                },
                "exposure_type": {
                  "type": "string",
                  "enum": [
                    "direct",
                    "indirect",
                    "unknown",
                    "attribution"
                  ],
                  "description": "`direct`（1ホップ）または`indirect`（マルチホップ）、アドレス自体のタグの場合は`attribution`、取引相手までのホップ数をプロバイダーが示さなかった場合は`unknown`。`unknown`は`direct`ではなく、未分類として扱ってください。"
                },
                "amount_usd": {
                  "type": "number",
                  "format": "float",
                  "nullable": true,
                  "description": "このドライバーに帰属するUSD価値。"
                },
                "percentage": {
                  "type": "number",
                  "format": "float",
                  "description": "双方向を合算した、そのアドレスのスクリーニング対象の総量に占める割合。方向ごとに正規化される`source_of_funds`/`destination_of_funds`内の`percentage`とは異なり、リスト全体で比較・合計できます。"
                },
                "is_high_risk": {
                  "type": "boolean",
                  "description": "カテゴリがDiditで高リスクとして扱うもの(`sanctioned`、`mixer`、`stolen_funds`、`ransomware`、`scam`、`darknet_market`、`terrorist_financing`、`child_exploitation`、`hacked_exchange`、`high_risk_exchange`、`seized_funds`)かどうか。"
                },
                "description": {
                  "type": "string",
                  "description": "ドライバーの1行表現です。例: `9.01% indirect outgoing exposure to Gambling / Crypto only (Example Gambling)`。"
                }
              }
            }
          },
          "raw_response": {
            "type": "object",
            "additionalProperties": true,
            "description": "プロバイダー独自のペイロードです。形式はプロバイダーごとに異なり、予告なく変更される場合があります。解析せずに、正規化されたフィールドを参照してください。"
          },
          "report_signature": {
            "type": "string",
            "description": "この結果そのものに対する不透明なHMAC-SHA256署名で、アプリケーションにスコープされています。単体では意味を持ちません。PDFとして出力するには、このフィールドを含むレスポンス本文全体を変更せずに`POST /v3/wallet-screening/pdf/`へ再送信してください。`report_signature`が欠落している場合、または署名対象のフィールド（例: `risk_score`、`severity`、`sanctions_hit`）が再送信前に編集されていた場合、PDFエンドポイントはリクエストを`400`で拒否します。"
          }
        },
        "required": [
          "provider",
          "screening_type",
          "risk_score",
          "severity",
          "status",
          "summary",
          "wallet_address",
          "blockchain",
          "sanctions_hit",
          "dominant_risk_category",
          "source_of_funds",
          "destination_of_funds",
          "counterparty_connections",
          "report_signature"
        ]
      },
      "NetworkRiskDisplay": {
        "type": "object",
        "properties": {
          "score": {
            "type": "integer",
            "description": "リスクスコア(0-100)。"
          },
          "band": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "description": "スコアの表示区分。70以上はhigh、40以上はmedium、それ以外はlow。"
          },
          "bar": {
            "type": "number",
            "format": "float",
            "description": "リスクバーの描画に使う0-1の正規化された値。"
          }
        }
      },
      "NetworkNodeTag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "nullable": true,
            "description": "ガードタグの場合はnullです。その色トークンはレンダラーが管理します。"
          },
          "source": {
            "type": "string",
            "enum": [
              "subject_tag",
              "session_tag",
              "transaction_tag",
              "signal_guard"
            ],
            "description": "タグの出所です。ユーザー/企業のタグ、このネットワーク内のセッションのタグ、当事者が属する取引のタグ、またはシグナルガード条件（例：ハブ、データセンターIP）のいずれかです。"
          },
          "category": {
            "type": "string",
            "enum": [
              "customer",
              "quality"
            ],
            "nullable": true,
            "description": "customerは顧客定義のタグ、qualityはシグナル品質ガードのタグを示します。該当しない場合はnullです。"
          }
        }
      },
      "NetworkListItem": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "network_id": {
            "type": "string",
            "description": "組織ごとに付与される、人が読める形式の連番ID。例: N-0001。"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "in_review",
              "resolved",
              "dismissed"
            ],
            "description": "ネットワークのライフサイクルステータス。ネットワーク内の申請者ごとのoutcome_status（approved/in_review/declined/not_completed）とは異なります。"
          },
          "risk": {
            "$ref": "#/components/schemas/NetworkRiskDisplay"
          },
          "pattern_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "exact_same_device",
                "similar_device",
                "same_ip_address",
                "same_address",
                "similar_selfie_backgrounds",
                "similar_poa_documents",
                "same_document_number",
                "same_phone_number",
                "same_email"
              ]
            },
            "description": "このネットワークで検出されたクラスタリングパターン。"
          },
          "signal_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ip_address",
                "device",
                "face",
                "document_number",
                "phone",
                "email",
                "address"
              ]
            },
            "description": "このネットワークに含まれるシグナルタイプ（重複なし）です。"
          },
          "member_counts": {
            "type": "object",
            "description": "カテゴリ別のメンバー数（例: 合計、outcome_statusごと）。"
          },
          "member_status": {
            "type": "object",
            "description": "outcome_status別のメンバーの内訳。"
          },
          "signal_coverage": {
            "type": "object",
            "description": "このネットワークのメンバーにおけるsignal_typeごとのカバレッジ。"
          },
          "first_activity_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_activity_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "NetworkDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/NetworkListItem"
          },
          {
            "type": "object",
            "properties": {
              "stats": {
                "type": "object",
                "description": "ネットワークの集計統計（例:メンバー総数）。"
              },
              "fraud_tags": {
                "type": "array",
                "items": {
                  "type": "object"
                },
                "description": "ネットワーク上で検出された不正パターンのタグ。"
              },
              "risk_signals": {
                "type": "object",
                "description": "リスクシグナルの概要: residential_proxy_reuse、email_intelligence、phone_intelligence。"
              },
              "reviewed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "reviewed_by": {
                "type": "string",
                "nullable": true
              },
              "review_reason": {
                "type": "string",
                "nullable": true
              }
            }
          }
        ],
        "properties": {
          "notes_count": {
            "type": "integer",
            "minimum": 0,
            "readOnly": true,
            "description": "この調査に含まれる、アナリスト専用の非公開メモの数。"
          }
        }
      },
      "NetworkGraphNode": {
        "type": "object",
        "description": "kindで区別されるサブジェクトノードまたはシグナルノード。サブジェクトノード(kind: vendor_user | vendor_business | transaction_party)は、id、kind、subject、node_status(approved | in_review | declined | not_completed)、tagsを持ちます。シグナルノード(kind: signal)は、id、kind、uuid、signal_type、subject_count、coverage、is_hub、is_datacenter_ip、is_high_collision_device、node_status(signal_active | signal_guarded)、tags、risk_evidence、first_seen_at、last_seen_atを持ちます。",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "vendor_user",
              "vendor_business",
              "transaction_party",
              "signal"
            ]
          }
        }
      },
      "NetworkGraphEdge": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "source": {
            "type": "string",
            "description": "対象ノードのID。"
          },
          "target": {
            "type": "string",
            "description": "シグナルノードのID。"
          },
          "subject_kind": {
            "type": "string",
            "enum": [
              "vendor_user",
              "vendor_business",
              "transaction_party"
            ]
          },
          "signal_type": {
            "type": "string",
            "enum": [
              "ip_address",
              "device",
              "face",
              "document_number",
              "phone",
              "email",
              "address"
            ]
          },
          "confidence": {
            "type": "number",
            "format": "float",
            "description": "完全一致の場合は1.0です。"
          },
          "observation_count": {
            "type": "integer"
          },
          "first_seen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_seen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "NetworkGraph": {
        "type": "object",
        "properties": {
          "network": {
            "$ref": "#/components/schemas/NetworkDetail"
          },
          "depth": {
            "type": "integer",
            "nullable": true,
            "description": "適用された実効深度。無制限（depth=all）の場合はnull。"
          },
          "truncated": {
            "type": "boolean",
            "description": "近傍が深さによって切り捨てられた場合はtrue。"
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkGraphNode"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkGraphEdge"
            }
          },
          "metrics": {
            "type": "object",
            "properties": {
              "node_count": {
                "type": "integer"
              },
              "edge_count": {
                "type": "integer"
              },
              "hub_signal_count": {
                "type": "integer"
              }
            }
          }
        }
      },
      "NetworkMember": {
        "type": "object",
        "properties": {
          "subject": {
            "type": "object",
            "description": "このメンバーが表すvendor_user、vendor_business、またはtransaction_party。"
          },
          "outcome_status": {
            "type": "string",
            "description": "対象の認証/判定の結果。"
          },
          "node_status": {
            "type": "string",
            "enum": [
              "approved",
              "in_review",
              "declined",
              "not_completed",
              "signal_active",
              "signal_guarded"
            ],
            "description": "メンバー行の場合、この値は常に対象者の結果を表す値（approved、in_review、declined、not_completed）のいずれかです。"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkNodeTag"
            }
          },
          "risk": {
            "$ref": "#/components/schemas/NetworkRiskDisplay"
          },
          "signal_coverage": {
            "type": "object"
          },
          "shared_infrastructure": {
            "type": "object"
          },
          "joined_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_seen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "provenance": {
            "type": "object",
            "properties": {
              "session_ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "business_session_ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "transaction_ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      },
      "NetworkSignal": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "signal_type": {
            "type": "string",
            "enum": [
              "ip_address",
              "device",
              "face",
              "document_number",
              "phone",
              "email",
              "address"
            ]
          },
          "subject_count": {
            "type": "integer"
          },
          "coverage": {
            "type": "number",
            "format": "float"
          },
          "is_hub": {
            "type": "boolean",
            "description": "このシグナルが異常に多数の対象者を結び付けている場合はtrueです。"
          },
          "is_datacenter_ip": {
            "type": "boolean"
          },
          "is_high_collision_device": {
            "type": "boolean"
          },
          "node_status": {
            "type": "string",
            "enum": [
              "signal_active",
              "signal_guarded"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkNodeTag"
            }
          },
          "risk_evidence": {
            "type": "object"
          },
          "first_seen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_seen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "NetworkTimelineEvent": {
        "type": "object",
        "properties": {
          "event_type": {
            "type": "string",
            "description": "例：network_detected、signal_observed、network_in_review、network_resolved、network_dismissed。"
          },
          "occurred_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "label": {
            "type": "string"
          },
          "metadata": {
            "type": "object"
          }
        }
      },
      "NetworkMap": {
        "type": "object",
        "properties": {
          "network": {
            "$ref": "#/components/schemas/NetworkDetail"
          },
          "convergence_count": {
            "type": "integer",
            "description": "メンバーが共通して集まる、異なる住所・所在地ポイントの数。"
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "points": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "country": {
                  "type": "string",
                  "nullable": true
                },
                "country_code": {
                  "type": "string",
                  "nullable": true
                },
                "city": {
                  "type": "string",
                  "nullable": true
                },
                "latitude": {
                  "type": "number",
                  "format": "float",
                  "nullable": true
                },
                "longitude": {
                  "type": "number",
                  "format": "float",
                  "nullable": true
                },
                "observed_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                }
              }
            }
          }
        }
      },
      "EntityNetworkMembership": {
        "type": "object",
        "properties": {
          "network": {
            "$ref": "#/components/schemas/NetworkListItem"
          },
          "subject": {
            "type": "object"
          },
          "signal_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ip_address",
                "device",
                "face",
                "document_number",
                "phone",
                "email",
                "address"
              ]
            }
          },
          "signal_count": {
            "type": "integer"
          },
          "joined_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_seen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "RiskSignals": {
        "type": "object",
        "description": "アプリケーションが観測したデバイスおよびネットワークのコンテキストで、任意指定です。すべてのフィールドは任意です。これらを渡すと、Networksにおけるセッション横断の一致検出に活用されます。",
        "properties": {
          "ip": {
            "type": "string",
            "format": "ip",
            "description": "エンドユーザーについて観測されたIPv4またはIPv6アドレス。",
            "example": "192.0.2.1"
          },
          "device_id": {
            "type": "string",
            "maxLength": 255,
            "description": "アプリケーションが収集する不変のデバイス識別子(Androidの`ANDROID_ID`、iOSの`identifierForVendor`)。"
          },
          "device_platform": {
            "type": "string",
            "enum": [
              "android",
              "ios",
              "ipados",
              "tvos",
              "web"
            ],
            "description": "エンドユーザーのデバイスのプラットフォーム。"
          },
          "device_model": {
            "type": "string",
            "maxLength": 255,
            "description": "アプリケーションが報告したデバイスモデルです。"
          },
          "os_version": {
            "type": "string",
            "maxLength": 64,
            "description": "オペレーティングシステムのバージョンです。"
          },
          "app_version": {
            "type": "string",
            "maxLength": 64,
            "description": "アプリケーションのバージョン。"
          },
          "user_agent": {
            "type": "string",
            "maxLength": 512,
            "description": "ブラウザまたはアプリのユーザーエージェント。"
          }
        }
      },
      "PhoneRiskRequest": {
        "type": "object",
        "required": [
          "phone_number"
        ],
        "properties": {
          "phone_number": {
            "type": "string",
            "maxLength": 20,
            "description": "スコアリング対象の電話番号。検証されたうえでE.164形式に正規化されます。",
            "example": "+14155552671"
          },
          "country_code": {
            "type": "string",
            "maxLength": 3,
            "description": "インテリジェンスのカバレッジ向けの任意のISO 3166-1 alpha-2またはalpha-3の国ヒントです。",
            "example": "US"
          },
          "signals": {
            "$ref": "#/components/schemas/RiskSignals"
          },
          "vendor_data": {
            "type": "string",
            "description": "このリクエストに対する固定の参照値です。APIセッションに保存され、レスポンスでそのまま返されます。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "機密性のないJSONメタデータです。APIセッションに保存され、レスポンスでそのまま返されます。"
          },
          "enable_social": {
            "type": "boolean",
            "default": false,
            "description": "trueの場合、番号のソーシャルフットプリント（その番号が登録されているメッセージング、ソーシャル、EC、ビジネスの各プラットフォーム）も検索します。このエンドポイント自体の料金に加えて、リクエスト1件ごとに`phone_social`1ユニット分が請求されます。",
            "example": true
          }
        }
      },
      "EmailRiskRequest": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "スコアリングするメールアドレス。",
            "example": "alice@example.com"
          },
          "country_code": {
            "type": "string",
            "maxLength": 3,
            "description": "インテリジェンスのカバレッジ向けの任意のISO 3166-1 alpha-2またはalpha-3の国ヒントです。",
            "example": "US"
          },
          "signals": {
            "$ref": "#/components/schemas/RiskSignals"
          },
          "vendor_data": {
            "type": "string",
            "description": "このリクエストに対する固定の参照値です。APIセッションに保存され、レスポンスでそのまま返されます。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "機密性のないJSONメタデータです。APIセッションに保存され、レスポンスでそのまま返されます。"
          },
          "enable_social": {
            "type": "boolean",
            "default": false,
            "description": "trueの場合、アドレスのソーシャルフットプリント（そのアドレスが登録されているメール、ソーシャル、ビジネス、EC、エンターテインメントの各プラットフォーム）も検索します。このエンドポイント自体の料金に加えて、リクエスト1件ごとに`email_social`1ユニット分が請求されます。",
            "example": true
          }
        }
      },
      "IPRiskRequest": {
        "type": "object",
        "required": [
          "ip_address"
        ],
        "properties": {
          "ip_address": {
            "type": "string",
            "format": "ip",
            "description": "スコアリング対象のIPv4またはIPv6アドレス。",
            "example": "8.8.8.8"
          },
          "claimed_country": {
            "type": "string",
            "maxLength": 3,
            "description": "ユーザーまたはセッションが申告した任意のISO 3166-1 alpha-2またはalpha-3の国です。`country_mismatch`の算出に使用されます。",
            "example": "ESP"
          },
          "user_agent": {
            "type": "string",
            "maxLength": 512,
            "description": "バックエンドで観測されたユーザーエージェント。リクエストのコンテキストとして保存されます。デバイスフィンガープリントは提供しません。"
          },
          "vendor_data": {
            "type": "string",
            "description": "このリクエストに対する固定の参照値です。APIセッションに保存され、レスポンスでそのまま返されます。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "機密性のないJSONメタデータです。APIセッションに保存され、レスポンスでそのまま返されます。"
          }
        }
      },
      "RiskWarning": {
        "type": "object",
        "required": [
          "feature",
          "risk",
          "log_type",
          "short_description",
          "long_description"
        ],
        "properties": {
          "feature": {
            "type": "string",
            "description": "警告を生成した機能。"
          },
          "risk": {
            "type": "string",
            "description": "機械可読なリスクコードです。今後、新しい値が追加される場合があります。"
          },
          "additional_data": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "リスク固有のコンテキスト、または`null`。"
          },
          "log_type": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "information"
            ],
            "description": "判定ルールで使用される重大度。"
          },
          "short_description": {
            "type": "string",
            "description": "人が読める形式の1行の概要。"
          },
          "long_description": {
            "type": "string",
            "description": "人が読める説明文。"
          }
        }
      },
      "RiskLifecycleEvent": {
        "type": "object",
        "required": [
          "type",
          "timestamp",
          "details",
          "fee"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "機械可読なイベントタイプ。今後新しい値が追加される場合があります。"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "イベントが発生した日時。"
          },
          "details": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "イベント固有のペイロード、または`null`です。"
          },
          "fee": {
            "type": "number",
            "description": "このイベントで請求されたUSD金額。"
          }
        }
      },
      "PhoneMatchItem": {
        "type": "object",
        "description": "同じ電話番号を異なる`vendor_data`で使用した、お使いのアプリケーションの別のセッション。",
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "この電話番号を使用した他の認証のセッションID。"
          },
          "session_number": {
            "type": "integer",
            "description": "そのセッションのわかりやすい連番。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "そのセッションの`vendor_data`です。"
          },
          "verification_date": {
            "type": "string",
            "description": "そのセッションが作成された日時（`YYYY-MM-DDTHH:MM:SSZ`）。"
          },
          "phone_number": {
            "type": "string",
            "description": "一致した電話番号です。"
          },
          "status": {
            "type": "string",
            "description": "そのセッションのステータス（例：`Approved`、`Declined`、`In Progress`）。"
          },
          "is_blocklisted": {
            "type": "boolean",
            "description": "電話番号がアプリケーションのブロックリストに登録されているかどうか。"
          },
          "api_service": {
            "type": "string",
            "nullable": true,
            "description": "APIタイプのセッションの場合、そのセッションを作成したスタンドアロンAPI。通常の認証セッションでは`null`です。"
          },
          "source": {
            "type": "string",
            "description": "一致が見つかった場所です。通常は`session`です。組織のリストエントリ経由のブロックリスト一致では`list_entry`が使われます。"
          }
        }
      },
      "EmailMatchItem": {
        "type": "object",
        "description": "同じメールアドレスを異なる`vendor_data`で使用した、お使いのアプリケーションの別のセッション。",
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "このメールアドレスを使用した他の認証のセッションID。"
          },
          "session_number": {
            "type": "integer",
            "description": "そのセッションのわかりやすい連番。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "そのセッションの`vendor_data`です。"
          },
          "verification_date": {
            "type": "string",
            "description": "そのセッションが作成された日時（`YYYY-MM-DDTHH:MM:SSZ`）。"
          },
          "email": {
            "type": "string",
            "description": "一致したメールアドレスです。"
          },
          "status": {
            "type": "string",
            "description": "そのセッションのステータス（例：`Approved`、`Declined`、`In Progress`）。"
          },
          "is_blocklisted": {
            "type": "boolean",
            "description": "メールアドレスがアプリケーションのブロックリストに登録されているかどうか。"
          },
          "api_service": {
            "type": "string",
            "nullable": true,
            "description": "APIタイプのセッションの場合、そのセッションを作成したスタンドアロンAPI。通常の認証セッションでは`null`です。"
          },
          "source": {
            "type": "string",
            "description": "一致が見つかった場所です。通常は`session`です。組織のリストエントリ経由のブロックリスト一致では`list_entry`が使われます。"
          }
        }
      },
      "PhoneIntelligence": {
        "type": "object",
        "description": "正規化された電話番号インテリジェンスブロック。この照会に対してインテリジェンスアドオンが実行された場合にのみ存在します。存在する場合は、同一の値を持つ`enrichment`エイリアスでも公開されます。",
        "properties": {
          "score": {
            "type": "number",
            "nullable": true,
            "description": "0-100に正規化されたリスクスコア。値が高いほどリスクが高くなります。"
          },
          "phone_type_risk": {
            "type": "string",
            "nullable": true,
            "description": "スコアから算出される`Low`、`Medium`、`High`のいずれかです。"
          },
          "phone_trust_index": {
            "type": "number",
            "nullable": true,
            "description": "スコアの逆数です。値が高いほど良いことを示すダッシュボード向けです。"
          },
          "network_stability_index": {
            "type": "number",
            "nullable": true,
            "description": "回線のネットワークの安定性。"
          },
          "is_disposable": {
            "type": "boolean",
            "nullable": true,
            "description": "番号が使い捨てまたは仮想番号と見られる場合は`true`です。"
          },
          "is_ported": {
            "type": "boolean",
            "nullable": true,
            "description": "番号の通信事業者が変更されている場合は`true`です。"
          },
          "is_recently_ported": {
            "type": "boolean",
            "nullable": true,
            "description": "番号ポータビリティが最近行われた場合は`true`です。"
          },
          "carrier_type": {
            "type": "string",
            "nullable": true,
            "description": "ルックアップで報告された回線の分類（例: `mobile`）。"
          },
          "reason_codes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "description": "シグナルの不変のDidit識別子。例: `IR-5AC67A32`。不透明な値のため、グループ化やフィルターには使用できますが、解析はしないでください。"
                },
                "value": {
                  "nullable": true,
                  "description": "リスクフラグ（例：`voip`、`leaked`、`disposable`、`spam_trap`）の場合、その値です：真偽値、レベル、または日付。スコア付きの理由コードではnullです。"
                },
                "direction": {
                  "type": "string",
                  "enum": [
                    "risk",
                    "trust"
                  ],
                  "description": "シグナルがリスクを高めたか、信頼を加えたか。"
                },
                "message": {
                  "type": "string",
                  "description": "シグナルを人が読める形で説明したもの（英語）。"
                },
                "impact_level": {
                  "type": "string",
                  "nullable": true,
                  "description": "シグナルがスコアに与えた影響の強さ。例：`low`、`medium`、`high`。"
                }
              }
            },
            "description": "スコアの根拠となるシグナル。それぞれに安定したDiditコード、方向、メッセージ、影響度があります。新しいコードが今後追加される可能性があるため、未知のコードを拒否しないでください。"
          }
        }
      },
      "EmailIntelligence": {
        "type": "object",
        "description": "正規化されたメールインテリジェンスブロック。このメールアドレスに対してインテリジェンスアドオンが実行された場合にのみ存在します。存在する場合は、同一の値を持つ`enrichment`エイリアスとしても公開されます。",
        "properties": {
          "score": {
            "type": "number",
            "nullable": true,
            "description": "0-100に正規化されたリスクスコア。値が高いほどリスクが高くなります。"
          },
          "deliverable": {
            "type": "string",
            "nullable": true,
            "description": "配信可能性の区分(例:`high`)。"
          },
          "breach_risk_level": {
            "type": "string",
            "nullable": true,
            "description": "`Low`、`Medium`、`High`のいずれかです。"
          },
          "breach_risk_index": {
            "type": "number",
            "nullable": true,
            "description": "情報漏えいリスクの数値指標です。"
          },
          "is_recent_breach": {
            "type": "boolean",
            "nullable": true,
            "description": "このアドレスが最近の情報漏えいに含まれている場合は`true`です。"
          },
          "is_frequent_breached": {
            "type": "boolean",
            "nullable": true,
            "description": "このアドレスが多数の情報漏えいに含まれている場合は`true`です。"
          },
          "is_disposable": {
            "type": "boolean",
            "nullable": true,
            "description": "ドメインが使い捨てメールプロバイダーである場合は`true`です。"
          },
          "is_free_domain": {
            "type": "boolean",
            "nullable": true,
            "description": "ドメインがフリーメールプロバイダーである場合は`true`です。"
          },
          "is_breached": {
            "type": "boolean",
            "nullable": true,
            "description": "このアドレスが既知の情報漏えいに含まれている場合は`true`です。"
          },
          "no_of_breaches": {
            "type": "number",
            "nullable": true,
            "description": "このメールアドレスを含む既知のデータ侵害の数。"
          },
          "reason_codes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "description": "シグナルの不変のDidit識別子。例: `IR-5AC67A32`。不透明な値のため、グループ化やフィルターには使用できますが、解析はしないでください。"
                },
                "value": {
                  "nullable": true,
                  "description": "リスクフラグ（例：`voip`、`leaked`、`disposable`、`spam_trap`）の場合、その値です：真偽値、レベル、または日付。スコア付きの理由コードではnullです。"
                },
                "direction": {
                  "type": "string",
                  "enum": [
                    "risk",
                    "trust"
                  ],
                  "description": "シグナルがリスクを高めたか、信頼を加えたか。"
                },
                "message": {
                  "type": "string",
                  "description": "シグナルを人が読める形で説明したもの（英語）。"
                },
                "impact_level": {
                  "type": "string",
                  "nullable": true,
                  "description": "シグナルがスコアに与えた影響の強さ。例：`low`、`medium`、`high`。"
                }
              }
            },
            "description": "スコアの根拠となるシグナル。それぞれに安定したDiditコード、方向、メッセージ、影響度があります。新しいコードが今後追加される可能性があるため、未知のコードを拒否しないでください。"
          }
        }
      },
      "IPRiskResult": {
        "type": "object",
        "description": "IPリスクの結果。照会で利用可能なデータが返されなかった場合、個々のエンリッチメントフィールドは`null`になることがあります。",
        "required": [
          "status",
          "threat"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "In Review"
            ],
            "description": "特定された国が`claimed_country`と矛盾する場合、またはそのアドレスがVPN、Tor、データセンターのインフラに関連付けられている場合は`In Review`です。それ以外は`Approved`です。"
          },
          "ip_address": {
            "type": "string",
            "nullable": true,
            "description": "スコアリングされたアドレスです。どのエンリッチメントソースからも利用可能なデータが返されなかった場合は`null`になります。"
          },
          "ip_country": {
            "type": "string",
            "nullable": true,
            "description": "特定された国名。"
          },
          "ip_country_code": {
            "type": "string",
            "nullable": true,
            "description": "特定された国コード。国を比較する際は、生の国名文字列を自分で比較するのではなく、`country_mismatch`を使用してください。"
          },
          "ip_state": {
            "type": "string",
            "nullable": true,
            "description": "特定された州または地域。"
          },
          "ip_city": {
            "type": "string",
            "nullable": true,
            "description": "特定された都市。"
          },
          "latitude": {
            "type": "number",
            "nullable": true,
            "description": "ネットワークに基づくおおよその位置情報であり、デバイスの正確な位置ではありません。"
          },
          "longitude": {
            "type": "number",
            "nullable": true,
            "description": "ネットワークに基づくおおよその位置情報であり、デバイスの正確な位置ではありません。"
          },
          "isp": {
            "type": "string",
            "nullable": true,
            "description": "そのアドレスにサービスを提供しているインターネットサービスプロバイダー。"
          },
          "organization": {
            "type": "string",
            "nullable": true,
            "description": "アドレスブロックを所有する組織です。"
          },
          "is_vpn_or_tor": {
            "type": "boolean",
            "nullable": true,
            "description": "このアドレスがVPNまたはTorのインフラに関連付けられている場合は`true`です。"
          },
          "is_data_center": {
            "type": "boolean",
            "nullable": true,
            "description": "このアドレスがホスティングまたはデータセンターのネットワークに属している場合は`true`です。"
          },
          "time_zone": {
            "type": "string",
            "nullable": true,
            "description": "特定された位置のタイムゾーン。"
          },
          "time_zone_offset": {
            "type": "string",
            "nullable": true,
            "description": "特定された位置のUTCオフセット。"
          },
          "asn_number": {
            "type": "number",
            "nullable": true,
            "description": "自律システム番号。"
          },
          "asn_organization": {
            "type": "string",
            "nullable": true,
            "description": "自律システムを運用している組織です。"
          },
          "connection_type": {
            "type": "string",
            "nullable": true,
            "description": "接続の分類（例：`cellular`、`hosting`）。"
          },
          "carrier": {
            "type": "string",
            "nullable": true,
            "description": "アドレスがモバイルネットワーク上にある場合の携帯通信事業者。"
          },
          "proxy_type": {
            "type": "string",
            "nullable": true,
            "description": "アドレスがプロキシの背後にある場合のプロキシ分類です。"
          },
          "claimed_country": {
            "type": "string",
            "nullable": true,
            "description": "送信した`claimed_country`のエコー。"
          },
          "country_mismatch": {
            "type": "boolean",
            "nullable": true,
            "description": "判定された国が`claimed_country`と異なる場合は`true`です。エンリッチメントデータまたは申告された国が利用できない場合は`null`になります。"
          },
          "threat": {
            "type": "object",
            "additionalProperties": true,
            "description": "エンリッチメントソースから得られる自由形式のネットワーク脅威の証拠（例：`is_proxy`、`is_tor`）。エンリッチメントデータがない場合は空のオブジェクトになります。安定した仕様ではなく、診断用の詳細情報として扱ってください。"
          }
        }
      },
      "PhoneRiskResponse": {
        "type": "object",
        "required": [
          "request_id",
          "status",
          "created_at"
        ],
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "このリクエストで作成されたAPIセッションのID。結果を後続のWebhookやコンソール上のアクティビティと関連付ける必要がある場合は、`vendor_data`とともに保存してください。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "In Review",
              "Declined"
            ],
            "description": "このAPIセッションの最終判定です。通常は`Approved`ですが、リスク評価によって`In Review`または`Declined`になる場合があります。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "送信した`vendor_data`のエコー。送信しなかった場合は`null`です。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "送信した`metadata`のエコー。送信しなかった場合は`null`です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "このレスポンスの日時。"
          },
          "phone": {
            "type": "object",
            "description": "正規化された電話番号レポート。電話番号検証のレスポンスで使われるものと同じブロックです。",
            "required": [
              "status"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "Approved",
                  "In Review",
                  "Declined"
                ],
                "description": "この電話番号の判定。トップレベルの`status`と同じ値です。"
              },
              "phone_number_prefix": {
                "type": "string",
                "description": "先頭に`+`を付けた国際電話の国番号(例: `+1`)。",
                "example": "+1"
              },
              "phone_number": {
                "type": "string",
                "description": "国番号を除いた国内番号。",
                "example": "4155552671"
              },
              "full_number": {
                "type": "string",
                "description": "E.164形式の完全な番号。",
                "example": "+14155552671"
              },
              "country_code": {
                "type": "string",
                "nullable": true,
                "description": "番号の国を示すISO 3166-1 alpha-2コード。",
                "example": "US"
              },
              "country_name": {
                "type": "string",
                "description": "`country_code`から導出された国の正式名称。",
                "example": "United States"
              },
              "carrier": {
                "type": "object",
                "nullable": true,
                "description": "番号を提供している現在のネットワーク。照会で通信事業者を特定できなかった場合は`null`です。",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "通信事業者名。照会で特定できなかった場合は空文字列です。"
                  },
                  "type": {
                    "type": "string",
                    "description": "ルックアップで報告された回線種別: `mobile`、`fixed_line`、`voip`、`isp`、`vpn`、`toll_free`、`premium_rate`、またはこれらに類する値。"
                  }
                }
              },
              "is_disposable": {
                "type": "boolean",
                "description": "番号が一時的な番号サービスまたは使い捨て番号サービスに属する場合は`true`です。"
              },
              "is_virtual": {
                "type": "boolean",
                "description": "回線種別が仮想（`voip`、`isp`、`vpn`のいずれか）の場合は`true`です。"
              },
              "verification_method": {
                "type": "string",
                "nullable": true,
                "description": "基盤となる認証のOTPチャネルです。コードを送信しないリスク照会では`null`になります。"
              },
              "verification_attempts": {
                "type": "integer",
                "description": "この番号へのOTP送信回数。リスク照会の場合は`0`です。"
              },
              "verified_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "番号がOTPで最後に検証された日時。リスク照会では`null`です。"
              },
              "warnings": {
                "type": "array",
                "description": "このリクエストで記録されたリスク警告。該当がない場合は空の配列です。",
                "items": {
                  "$ref": "#/components/schemas/RiskWarning"
                }
              },
              "lifecycle": {
                "type": "array",
                "description": "リクエストの時系列の監査証跡。送信イベントのないリスク照会では空の配列です。",
                "items": {
                  "$ref": "#/components/schemas/RiskLifecycleEvent"
                }
              },
              "matches": {
                "type": "array",
                "description": "同じ電話番号が別のユーザー（異なる`vendor_data`）によって使用された、アプリケーション内の他のセッション。最大5件です。一致がない場合は空の配列です。",
                "items": {
                  "$ref": "#/components/schemas/PhoneMatchItem"
                }
              },
              "phone_intelligence": {
                "$ref": "#/components/schemas/PhoneIntelligence"
              },
              "enrichment": {
                "$ref": "#/components/schemas/PhoneIntelligence"
              },
              "phone_social": {
                "$ref": "#/components/schemas/PhoneSocialFootprint"
              }
            }
          }
        }
      },
      "EmailRiskResponse": {
        "type": "object",
        "required": [
          "request_id",
          "status",
          "created_at"
        ],
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "このリクエストで作成されたAPIセッションのID。結果を後続のWebhookやコンソール上のアクティビティと関連付ける必要がある場合は、`vendor_data`とともに保存してください。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "In Review",
              "Declined"
            ],
            "description": "このAPIセッションの最終判定です。通常は`Approved`ですが、リスク評価によって`In Review`または`Declined`になる場合があります。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "送信した`vendor_data`のエコー。送信しなかった場合は`null`です。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "送信した`metadata`のエコー。送信しなかった場合は`null`です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "このレスポンスの日時。"
          },
          "email": {
            "type": "object",
            "description": "正規化されたメールレポート。メールアドレス認証のレスポンスで使われるものと同じブロックです。",
            "required": [
              "status",
              "email",
              "is_breached",
              "breaches",
              "is_disposable",
              "is_undeliverable"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "Approved",
                  "In Review",
                  "Declined"
                ],
                "description": "このメールアドレスの判定。トップレベルの`status`と同じ値です。"
              },
              "email": {
                "type": "string",
                "description": "スコアリングされたアドレスです。",
                "example": "alice@example.com"
              },
              "is_breached": {
                "type": "boolean",
                "description": "そのアドレスが既知の認証情報漏えいに含まれているかどうか。"
              },
              "breaches": {
                "type": "array",
                "description": "このメールアドレスを含む既知の漏洩のうち、最新のものを最大5件返します。`is_breached`が`false`の場合は空配列です。",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "データ侵害の識別子。"
                    },
                    "domain": {
                      "type": "string",
                      "description": "漏洩したサービスのドメインです。"
                    },
                    "breach_date": {
                      "type": "string",
                      "format": "date",
                      "description": "データ侵害が発生した日付。"
                    },
                    "breach_emails_count": {
                      "type": "integer",
                      "description": "侵害で流出したアカウントの総数。"
                    },
                    "description": {
                      "type": "string",
                      "description": "情報漏えいの内容を人が読める形で説明したもの（HTMLマークアップを含む場合があります）。"
                    },
                    "logo_path": {
                      "type": "string",
                      "description": "漏洩したサービスのロゴのURL。"
                    },
                    "data_classes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "漏洩したデータのカテゴリ。snake_caseで表されます（例: `email_addresses`、`passwords`）。"
                    },
                    "is_verified": {
                      "type": "boolean",
                      "description": "漏えいが正当なものとして検証済みかどうか。"
                    }
                  }
                }
              },
              "is_disposable": {
                "type": "boolean",
                "description": "ドメインが使い捨てメールのプロバイダーに属しているかどうか。"
              },
              "is_undeliverable": {
                "type": "boolean",
                "description": "そのアドレスが配信不能と判定されたかどうか。"
              },
              "verification_attempts": {
                "type": "integer",
                "description": "このメールアドレスへのOTP送信回数。リスク照会の場合は`0`です。"
              },
              "verified_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "アドレスがOTPで最後に検証された日時。リスク照会の場合は`null`。"
              },
              "warnings": {
                "type": "array",
                "description": "このリクエストで記録されたリスク警告。該当がない場合は空の配列です。",
                "items": {
                  "$ref": "#/components/schemas/RiskWarning"
                }
              },
              "lifecycle": {
                "type": "array",
                "description": "リクエストの時系列の監査証跡。送信のないリスク照会では空の配列です。",
                "items": {
                  "$ref": "#/components/schemas/RiskLifecycleEvent"
                }
              },
              "matches": {
                "type": "array",
                "description": "同じメールアドレスが別のユーザー（異なる`vendor_data`）によって使用された、アプリケーション内の他のセッション。最大5件です。一致がない場合は空の配列です。",
                "items": {
                  "$ref": "#/components/schemas/EmailMatchItem"
                }
              },
              "email_intelligence": {
                "$ref": "#/components/schemas/EmailIntelligence"
              },
              "enrichment": {
                "$ref": "#/components/schemas/EmailIntelligence"
              },
              "email_social": {
                "$ref": "#/components/schemas/EmailSocialFootprint"
              }
            }
          }
        }
      },
      "IPRiskResponse": {
        "type": "object",
        "required": [
          "request_id",
          "status",
          "created_at"
        ],
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "このリクエストで作成されたAPIセッションのID。結果を後続のWebhookやコンソール上のアクティビティと関連付ける必要がある場合は、`vendor_data`とともに保存してください。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "In Review"
            ],
            "description": "このAPIセッションの判定。ネットワークまたは国の不一致リスクがある場合は`In Review`、それ以外は`Approved`です。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "送信した`vendor_data`のエコー。送信しなかった場合は`null`です。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "送信した`metadata`のエコー。送信しなかった場合は`null`です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "このレスポンスの日時。"
          },
          "ip": {
            "type": "object",
            "description": "IPリスクの結果。照会で利用可能なデータが返されなかった場合、個々のエンリッチメントフィールドは`null`になることがあります。",
            "required": [
              "status",
              "threat"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "Approved",
                  "In Review"
                ],
                "description": "特定された国が`claimed_country`と矛盾する場合、またはそのアドレスがVPN、Tor、データセンターのインフラに関連付けられている場合は`In Review`です。それ以外は`Approved`です。"
              },
              "ip_address": {
                "type": "string",
                "nullable": true,
                "description": "スコアリングされたアドレスです。どのエンリッチメントソースからも利用可能なデータが返されなかった場合は`null`になります。"
              },
              "ip_country": {
                "type": "string",
                "nullable": true,
                "description": "特定された国名。"
              },
              "ip_country_code": {
                "type": "string",
                "nullable": true,
                "description": "特定された国コード。国を比較する際は、生の国名文字列を自分で比較するのではなく、`country_mismatch`を使用してください。"
              },
              "ip_state": {
                "type": "string",
                "nullable": true,
                "description": "特定された州または地域。"
              },
              "ip_city": {
                "type": "string",
                "nullable": true,
                "description": "特定された都市。"
              },
              "latitude": {
                "type": "number",
                "nullable": true,
                "description": "ネットワークに基づくおおよその位置情報であり、デバイスの正確な位置ではありません。"
              },
              "longitude": {
                "type": "number",
                "nullable": true,
                "description": "ネットワークに基づくおおよその位置情報であり、デバイスの正確な位置ではありません。"
              },
              "isp": {
                "type": "string",
                "nullable": true,
                "description": "そのアドレスにサービスを提供しているインターネットサービスプロバイダー。"
              },
              "organization": {
                "type": "string",
                "nullable": true,
                "description": "アドレスブロックを所有する組織です。"
              },
              "is_vpn_or_tor": {
                "type": "boolean",
                "nullable": true,
                "description": "このアドレスがVPNまたはTorのインフラに関連付けられている場合は`true`です。"
              },
              "is_data_center": {
                "type": "boolean",
                "nullable": true,
                "description": "このアドレスがホスティングまたはデータセンターのネットワークに属している場合は`true`です。"
              },
              "time_zone": {
                "type": "string",
                "nullable": true,
                "description": "特定された位置のタイムゾーン。"
              },
              "time_zone_offset": {
                "type": "string",
                "nullable": true,
                "description": "特定された位置のUTCオフセット。"
              },
              "asn_number": {
                "type": "number",
                "nullable": true,
                "description": "自律システム番号。"
              },
              "asn_organization": {
                "type": "string",
                "nullable": true,
                "description": "自律システムを運用している組織です。"
              },
              "connection_type": {
                "type": "string",
                "nullable": true,
                "description": "接続の分類（例：`cellular`、`hosting`）。"
              },
              "carrier": {
                "type": "string",
                "nullable": true,
                "description": "アドレスがモバイルネットワーク上にある場合の携帯通信事業者。"
              },
              "proxy_type": {
                "type": "string",
                "nullable": true,
                "description": "アドレスがプロキシの背後にある場合のプロキシ分類です。"
              },
              "claimed_country": {
                "type": "string",
                "nullable": true,
                "description": "送信した`claimed_country`のエコー。"
              },
              "country_mismatch": {
                "type": "boolean",
                "nullable": true,
                "description": "判定された国が`claimed_country`と異なる場合は`true`です。エンリッチメントデータまたは申告された国が利用できない場合は`null`になります。"
              },
              "threat": {
                "type": "object",
                "additionalProperties": true,
                "description": "エンリッチメントソースから得られる自由形式のネットワーク脅威の証拠（例：`is_proxy`、`is_tor`）。エンリッチメントデータがない場合は空のオブジェクトになります。安定した仕様ではなく、診断用の詳細情報として扱ってください。"
              }
            }
          }
        }
      },
      "SocialFootprintPlatform": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "description": "プラットフォーム識別子。",
            "example": "whatsapp"
          },
          "category": {
            "type": "string",
            "description": "プラットフォームのカテゴリー。例: MESSAGING、SOCIAL_MEDIA、ECOMMERCE、PROFESSIONAL、EMAIL_PROVIDER。",
            "example": "MESSAGING"
          },
          "scope": {
            "type": "string",
            "enum": [
              "global",
              "local"
            ],
            "description": "グローバルなプラットフォームの場合は`global`、地域限定のプラットフォームの場合は`local`。",
            "example": "global"
          }
        }
      },
      "SocialFootprintCategorySummary": {
        "type": "object",
        "properties": {
          "registered": {
            "type": "integer",
            "nullable": true,
            "description": "このカテゴリーのうち、登録が確認されたプラットフォーム。",
            "example": 2
          },
          "ratio": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "description": "そのカテゴリでチェックしたプラットフォームのうち、登録があるものの割合（0.0〜1.0）。",
            "example": 0.6667
          }
        }
      },
      "SocialFootprintProfile": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true,
            "description": "プロフィール名。プラットフォームが公開している場合に返されます。"
          },
          "photo": {
            "type": "string",
            "nullable": true,
            "description": "プロフィール写真のURL。プラットフォームが公開している場合に返されます。"
          },
          "about": {
            "type": "string",
            "nullable": true,
            "description": "プロフィールの自己紹介文。プラットフォームが公開している場合に返されます。"
          },
          "privacy_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "PUBLIC",
              "PRIVATE",
              null
            ],
            "description": "プロフィールの公開設定。プラットフォームが公開している場合に返されます。"
          },
          "business_account": {
            "type": "boolean",
            "nullable": true,
            "description": "プラットフォームが公開している場合、プロフィールがビジネスアカウントかどうか。"
          }
        }
      },
      "PhoneSocialFootprint": {
        "type": "object",
        "nullable": true,
        "description": "電話番号のソーシャルフットプリント: その電話番号が登録されているオンラインプラットフォームです。`enable_social`が設定され、チェックが完了した場合にのみ含まれます。データが返されなかった項目の件数は、いずれもnullになる場合があります。`profiles_registered: 0`は、プラットフォームがチェックされ、そのいずれにも電話番号が見つからなかったことを意味します。これは有効かつ課金対象の結果であり、合成IDによく見られる兆候です。",
        "properties": {
          "profiles_registered": {
            "type": "integer",
            "nullable": true,
            "description": "電話番号の登録が確認されたプラットフォーム。",
            "example": 5
          },
          "profiles_checked": {
            "type": "integer",
            "nullable": true,
            "description": "登録状況を評価したプラットフォーム。",
            "example": 14
          },
          "names_found": {
            "type": "integer",
            "nullable": true,
            "description": "関連付けられた名前を返したプラットフォーム。",
            "example": 0
          },
          "photos_found": {
            "type": "integer",
            "nullable": true,
            "description": "プロフィール写真を返したプラットフォーム。",
            "example": 0
          },
          "communication_breadth": {
            "type": "integer",
            "nullable": true,
            "description": "存在が検出されたコミュニケーションプラットフォーム。",
            "example": 2
          },
          "digital_footprint_diversity": {
            "type": "integer",
            "nullable": true,
            "description": "存在が検出された個別のプラットフォームカテゴリ。",
            "example": 5
          },
          "digital_sophistication_index": {
            "type": "integer",
            "nullable": true,
            "description": "デジタル成熟度の総合指標（0-10）。",
            "example": 5
          },
          "engagement_depth_index": {
            "type": "integer",
            "nullable": true,
            "description": "プロフィールの充実度を示す指標(0-10)。",
            "example": 3
          },
          "subscription_affordability_index": {
            "type": "integer",
            "nullable": true,
            "description": "無料プラットフォームと有料プラットフォームの構成比（0-10）。",
            "example": 2
          },
          "free_platforms": {
            "type": "integer",
            "nullable": true,
            "description": "無料プラットフォームでの登録。",
            "example": 4
          },
          "full_paid_platforms": {
            "type": "integer",
            "nullable": true,
            "description": "完全有料プラットフォームでの登録。",
            "example": 0
          },
          "partial_paid_platforms": {
            "type": "integer",
            "nullable": true,
            "description": "フリーミアムプラットフォームでの登録。",
            "example": 1
          },
          "whatsapp_profile_completeness": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Basic",
              "Partial",
              "Complete",
              "Not Present",
              null
            ],
            "description": "WhatsAppプロフィールの充実度。電話番号のみ対象で、メールアドレスの場合はnullです。",
            "example": "Partial"
          },
          "registered_platforms": {
            "type": "array",
            "description": "登録が確認されたプラットフォーム。",
            "items": {
              "$ref": "#/components/schemas/SocialFootprintPlatform"
            }
          },
          "not_registered_platforms": {
            "type": "array",
            "description": "確認の結果、否定的な結果となったプラットフォーム。",
            "items": {
              "$ref": "#/components/schemas/SocialFootprintPlatform"
            }
          },
          "categories": {
            "type": "object",
            "description": "プラットフォームカテゴリごとの登録数と割合。",
            "additionalProperties": {
              "$ref": "#/components/schemas/SocialFootprintCategorySummary"
            }
          },
          "profiles": {
            "type": "object",
            "description": "プラットフォームが公開している場合の、プラットフォームごとのプロフィール詳細です。プラットフォームをキーとします。",
            "additionalProperties": {
              "$ref": "#/components/schemas/SocialFootprintProfile"
            }
          }
        }
      },
      "EmailSocialFootprint": {
        "type": "object",
        "nullable": true,
        "description": "メールアドレスのソーシャルフットプリント: そのメールアドレスが登録されているオンラインプラットフォームです。`enable_social`が設定され、チェックが完了した場合にのみ含まれます。データが返されなかった項目の件数は、いずれもnullになる場合があります。`profiles_registered: 0`は、プラットフォームがチェックされ、そのいずれにもメールアドレスが見つからなかったことを意味します。これは有効かつ課金対象の結果であり、合成IDによく見られる兆候です。",
        "properties": {
          "profiles_registered": {
            "type": "integer",
            "nullable": true,
            "description": "メールアドレスの登録が確認されたプラットフォーム。",
            "example": 5
          },
          "profiles_checked": {
            "type": "integer",
            "nullable": true,
            "description": "登録状況を評価したプラットフォーム。",
            "example": 14
          },
          "names_found": {
            "type": "integer",
            "nullable": true,
            "description": "関連付けられた名前を返したプラットフォーム。",
            "example": 0
          },
          "photos_found": {
            "type": "integer",
            "nullable": true,
            "description": "プロフィール写真を返したプラットフォーム。",
            "example": 0
          },
          "communication_breadth": {
            "type": "integer",
            "nullable": true,
            "description": "存在が検出されたコミュニケーションプラットフォーム。",
            "example": 2
          },
          "digital_footprint_diversity": {
            "type": "integer",
            "nullable": true,
            "description": "存在が検出された個別のプラットフォームカテゴリ。",
            "example": 5
          },
          "digital_sophistication_index": {
            "type": "integer",
            "nullable": true,
            "description": "デジタル成熟度の総合指標（0-10）。",
            "example": 5
          },
          "engagement_depth_index": {
            "type": "integer",
            "nullable": true,
            "description": "プロフィールの充実度を示す指標(0-10)。",
            "example": 3
          },
          "subscription_affordability_index": {
            "type": "integer",
            "nullable": true,
            "description": "無料プラットフォームと有料プラットフォームの構成比（0-10）。",
            "example": 2
          },
          "free_platforms": {
            "type": "integer",
            "nullable": true,
            "description": "無料プラットフォームでの登録。",
            "example": 4
          },
          "full_paid_platforms": {
            "type": "integer",
            "nullable": true,
            "description": "完全有料プラットフォームでの登録。",
            "example": 0
          },
          "partial_paid_platforms": {
            "type": "integer",
            "nullable": true,
            "description": "フリーミアムプラットフォームでの登録。",
            "example": 1
          },
          "whatsapp_profile_completeness": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Basic",
              "Partial",
              "Complete",
              "Not Present",
              null
            ],
            "description": "WhatsAppプロフィールの充実度。電話番号のみ対象で、メールアドレスの場合はnullです。",
            "example": "Partial"
          },
          "registered_platforms": {
            "type": "array",
            "description": "登録が確認されたプラットフォーム。",
            "items": {
              "$ref": "#/components/schemas/SocialFootprintPlatform"
            }
          },
          "not_registered_platforms": {
            "type": "array",
            "description": "確認の結果、否定的な結果となったプラットフォーム。",
            "items": {
              "$ref": "#/components/schemas/SocialFootprintPlatform"
            }
          },
          "categories": {
            "type": "object",
            "description": "プラットフォームカテゴリごとの登録数と割合。",
            "additionalProperties": {
              "$ref": "#/components/schemas/SocialFootprintCategorySummary"
            }
          },
          "profiles": {
            "type": "object",
            "description": "プラットフォームが公開している場合の、プラットフォームごとのプロフィール詳細です。プラットフォームをキーとします。",
            "additionalProperties": {
              "$ref": "#/components/schemas/SocialFootprintProfile"
            }
          }
        }
      },
      "KYBRegistryAddress": {
        "type": "object",
        "description": "登記に記載された住所。国や登記ソースを問わず同じ形式です。すべてのキーが常に存在し、登記で公開されていない部分はnullになります。",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true,
            "description": "小文字の住所種別です。登記上の本店所在地は`registered`、その他の種別は登記機関での名称のとおりです（例:`postal`、`office`）。登記機関が住所の種別を示していない場合は`null`です。"
          },
          "address": {
            "type": "string",
            "description": "1行で表した住所全体です。すべての住所に必ず含まれます。"
          },
          "street": {
            "type": "string",
            "nullable": true,
            "description": "通り名と番地。"
          },
          "city": {
            "type": "string",
            "nullable": true,
            "description": "都市または地域。"
          },
          "postal_code": {
            "type": "string",
            "nullable": true,
            "description": "郵便番号。"
          },
          "region": {
            "type": "string",
            "nullable": true,
            "description": "地域、州、または県。"
          },
          "country_code": {
            "type": "string",
            "nullable": true,
            "description": "ISO 3166-1 alpha-2国コード。"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "登記上の住所のラベル（登記側が提供する場合）。"
          }
        },
        "required": [
          "type",
          "address",
          "street",
          "city",
          "postal_code",
          "region",
          "country_code",
          "description"
        ]
      },
      "KYBRegistryIndustry": {
        "type": "object",
        "description": "登記上で企業が分類されている事業活動。国や登記ソースを問わず同じ形式です。",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true,
            "description": "登記簿に記載されているとおりの事業コード（例: `73110`）。"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "登記機関が公開している場合、事業のラベル。"
          },
          "scheme": {
            "type": "string",
            "nullable": true,
            "description": "分類体系。どのソースが報告したかにかかわらず、体系ごとに1つの名前を使用します: `UK SIC 2007`、`US SIC`、`NACE Rev. 2`、`NACE Rev. 2.1`、`NAF Rev. 2`、`CNAE`、`SBI`、`NOGA 2008`、`CAE Rev. 4`、`Canada SIC 1977`。その他の国の体系は登記機関独自の名称のままです。登記機関が体系を示していない場合はnullです。"
          },
          "is_primary": {
            "type": "boolean",
            "description": "企業の主要事業の場合はtrue。リストが空でない場合、primaryとなるエントリは必ず1つだけです。"
          }
        },
        "required": [
          "code",
          "description",
          "scheme",
          "is_primary"
        ]
      },
      "KYBRegistryShareholding": {
        "type": "object",
        "nullable": true,
        "description": "所有者が保有するもの。すべての国と登記情報ソースで同じ形式です。登記に保有の記載がない場合はnullです。範囲（例: 英国PSCの25-50%）は持分ではありません。`percentage`はnullとなり、範囲は`ownership_min_shares` / `ownership_max_shares`に保持されます。",
        "properties": {
          "share_class": {
            "type": "string",
            "nullable": true,
            "description": "登記簿上の名称どおりの株式のクラスまたは種類。"
          },
          "number_of_shares": {
            "type": "number",
            "nullable": true,
            "description": "保有株式数です。"
          },
          "currency": {
            "type": "string",
            "nullable": true,
            "description": "以下の値のISO 4217通貨。"
          },
          "nominal_value": {
            "type": "number",
            "nullable": true,
            "description": "1株あたりの額面金額。"
          },
          "total_value": {
            "type": "number",
            "nullable": true,
            "description": "保有資産の合計額。"
          },
          "percentage": {
            "type": "number",
            "nullable": true,
            "description": "パーセント単位の正確な出資比率で、小数点以下4桁までです。"
          }
        },
        "required": [
          "share_class",
          "number_of_shares",
          "currency",
          "nominal_value",
          "total_value",
          "percentage"
        ]
      },
      "KYBRegistryOwnership": {
        "type": "object",
        "description": "所有構造（株主／UBO）レベルの結果。国や登記ソースにかかわらず同じ形式です。",
        "properties": {
          "status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "not_requested",
              "pending",
              "delivered",
              "not_held",
              "unavailable",
              null
            ],
            "description": "登記簿が所有構造を公開した場合は`delivered`、所有構造の登記簿が応答したもののこの企業がまったく掲載されていない場合は`not_held`（`unavailable_reason`を参照）、その他の理由で所有構造データが提供されなかった場合は`unavailable`（`unavailable_reason`を参照）、登記簿がまだ取得中の場合は`pending`、Basicレベルでは`not_requested`です。"
          },
          "tier_requested": {
            "type": "string",
            "nullable": true,
            "enum": [
              "basic",
              "shareholders",
              "ubo",
              null
            ],
            "description": "ワークフローが注文したレベル。"
          },
          "tier_delivered": {
            "type": "string",
            "nullable": true,
            "enum": [
              "basic",
              "shareholders",
              "ubo",
              null
            ],
            "description": "登記機関が提供したレベル（請求対象となるレベル）。直接の株主のみで回答されたUBOリクエストは`shareholders`になります。"
          },
          "unavailable_reason": {
            "type": "string",
            "nullable": true,
            "enum": [
              "no_owners_on_record",
              "no_natural_person_owner",
              "ownership_section_unavailable",
              "company_not_found",
              "ambiguous_company_match",
              "missing_registration_number",
              "entity_type_not_covered",
              "provider_unavailable",
              "other",
              null
            ],
            "description": "要求された所有構造のレベルが提供されなかった理由です。`status`が`unavailable`または`pending`でない限りnullです。"
          },
          "direct_ownership_complete": {
            "type": "boolean",
            "nullable": true,
            "description": "直接株主の記載された持分の合計が100%になる場合（端数処理による1パーセントポイント以内の差を含む）はtrue、ならない場合はfalse、所有構造が提供されていないか、記載されていない持分がある場合はnull。"
          },
          "unresolved": {
            "type": "array",
            "description": "法人登記で解決できなかった所有構造チェーンの部分。たとえば、直接の所有者より上位のグループ構造が記録されていない場合です。",
            "items": {
              "type": "object",
              "properties": {
                "reason": {
                  "type": "string"
                },
                "section": {
                  "type": "string",
                  "nullable": true
                }
              }
            }
          }
        },
        "required": [
          "status",
          "tier_requested",
          "tier_delivered",
          "unavailable_reason",
          "direct_ownership_complete",
          "unresolved"
        ]
      },
      "KYBRegistryData": {
        "type": "object",
        "nullable": true,
        "description": "Diditが正規化した企業の登記詳細です。所有構造の結果（`ownership_error`、`section_errors`、`ubo_resolution`、`lite_enrichment`）、update-dataで行われた修正、および専用のフィールドを持たない登記上の事実が含まれます。登記情報源自体のレコードが含まれることはありません。すべてのキーは任意で、企業にその値がある場合にのみ存在します。新しいキーが追加される場合があります。正規フィールド（`addresses`、`industries`、`ownership`、`beneficial_owners[].shareholding`）が扱う内容については、それらのフィールドを参照してください。",
        "properties": {
          "company_name": {
            "type": "string",
            "description": "コンソールで修正された会社名。"
          },
          "registration_number": {
            "type": "string",
            "description": "登記所またはコンソールでの修正に記載されている登記番号。"
          },
          "country_code": {
            "type": "string",
            "description": "登記機関またはコンソールでの修正内容に記載された登録国。"
          },
          "region": {
            "type": "string",
            "description": "登記の地域または州。"
          },
          "incorporation_date": {
            "type": "string",
            "description": "設立日（ISO 8601）。"
          },
          "registration_date": {
            "type": "string",
            "description": "登記所が設立日とは別に登録日を記載している場合の登録日（ISO 8601）。"
          },
          "dissolution_date": {
            "type": "string",
            "description": "登記に記載がある場合の解散日(ISO 8601)。"
          },
          "tax_number": {
            "type": "string",
            "description": "納税者番号。"
          },
          "vat_number": {
            "type": "string",
            "description": "VAT番号。"
          },
          "legal_address": {
            "type": "string",
            "description": "コンソールで修正された法定住所。"
          },
          "registered_address": {
            "type": "string",
            "description": "登記所に記載されているとおりの登記住所。"
          },
          "company_type": {
            "type": "string",
            "description": "法人形態。"
          },
          "registry_status": {
            "type": "string",
            "description": "登記上の企業ステータス。"
          },
          "verification_status": {
            "type": "string",
            "description": "認証ステータス。"
          },
          "alternative_names": {
            "type": "string",
            "description": "企業が現在または過去に使用している商号です。"
          },
          "nature_of_business": {
            "type": "string",
            "description": "事業内容の説明。"
          },
          "registered_capital": {
            "type": "string",
            "description": "記載どおりの資本金。"
          },
          "registered_capital_amount": {
            "type": "string",
            "description": "資本金の額（10進数の文字列）。"
          },
          "registered_capital_currency": {
            "type": "string",
            "description": "資本金の通貨（ISO 4217）。"
          },
          "website": {
            "type": "string",
            "description": "Webサイト。"
          },
          "email": {
            "type": "string",
            "description": "連絡先メールアドレス。"
          },
          "phone": {
            "type": "string",
            "description": "連絡先電話番号。"
          },
          "legal_entity_identifier": {
            "type": "string",
            "description": "取引主体識別子(LEI)。"
          },
          "location_of_registration": {
            "type": "string",
            "description": "登録地。"
          },
          "control_scheme": {
            "type": "string",
            "description": "登記機関が公開している場合のガバナンス体制。"
          },
          "ownership_error": {
            "type": "string",
            "enum": [
              "no_owners_on_record",
              "no_natural_person_owner",
              "ownership_section_unavailable",
              "company_not_found",
              "ambiguous_company_match",
              "missing_registration_number",
              "entity_type_not_covered",
              "provider_unavailable",
              "other"
            ],
            "description": "要求された所有構造のレベルが提供されなかった理由で、`ownership.unavailable_reason`と同じコードを使用します。`no_owners_on_record`（登記機関は応答したが所有者が記載されていない）と`ownership_section_unavailable`（登記機関が所有構造のセクションを返さなかった）は異なる結果です。"
          },
          "section_errors": {
            "type": "object",
            "description": "登記所が返さなかったセクションで、セクション(`officers`、`shareholders`、`group_structure`)をキーとします。ここに記載されたセクションは一度も配信されていません。そのセクションの空のリストは、企業について何も示すものではありません。",
            "additionalProperties": {
              "$ref": "#/components/schemas/KYBRegistrySectionError"
            }
          },
          "ubo_resolution": {
            "$ref": "#/components/schemas/KYBRegistryUboResolution"
          },
          "lite_enrichment": {
            "$ref": "#/components/schemas/KYBRegistryLiteEnrichment"
          },
          "registry_metadata": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "登記簿上の企業のフィールド。登記簿での名称をキーとし、プレーンな値で示されます（レガシーレコード）。登記上の事実としてレビューされたフィールドのみが含まれます。"
          },
          "registry_sources": {
            "type": "array",
            "description": "レコードの読み取り元となった公式登記簿（従来のレコード）。その他のソースは明示されません。",
            "items": {
              "$ref": "#/components/schemas/KYBRegistrySource"
            }
          },
          "previous_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "会社が以前に登録されていた名称（過去の記録）。"
          },
          "parent_companies": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "登記に記載されている親会社(旧形式のレコード)。"
          },
          "documents_available": {
            "type": "integer",
            "description": "登記機関がこの企業について提供している提出書類の数（過去の記録）。"
          }
        }
      },
      "KYBRegistryGroupCompany": {
        "type": "object",
        "description": "企業グループに属する会社。法人登記上の識別情報で示されます。",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true,
            "description": "会社名。"
          },
          "country_code": {
            "type": "string",
            "nullable": true,
            "description": "登録国。"
          },
          "registration_number": {
            "type": "string",
            "nullable": true,
            "description": "登記番号。"
          }
        },
        "required": [
          "name",
          "country_code",
          "registration_number"
        ]
      },
      "KYBRegistryUboResolution": {
        "type": "object",
        "description": "UBOレベルが企業の上位にある所有構造の連鎖をどのようにたどったか。",
        "properties": {
          "parent_chain": {
            "type": "array",
            "description": "最終親会社から当該企業までの親会社。",
            "items": {
              "$ref": "#/components/schemas/KYBRegistryGroupCompany"
            }
          },
          "subsidiaries": {
            "type": "array",
            "description": "企業グループ内で、その企業の直下にある企業。",
            "items": {
              "$ref": "#/components/schemas/KYBRegistryGroupCompany"
            }
          },
          "unresolved": {
            "type": "array",
            "description": "法人登記で解決できなかったチェーンの部分（`ownership.unresolved`と同じエントリ）。",
            "items": {
              "type": "object",
              "properties": {
                "reason": {
                  "type": "string",
                  "description": "理由。例：`no_group_structure_on_record`、`selected_company_not_in_group_structure`、`section_error`。"
                },
                "section": {
                  "type": "string",
                  "nullable": true,
                  "description": "対象のセクションです（例: `group_structure`）。"
                }
              },
              "required": [
                "reason",
                "section"
              ]
            }
          }
        },
        "required": [
          "parent_chain",
          "subsidiaries",
          "unresolved"
        ]
      },
      "KYBRegistrySectionError": {
        "type": "object",
        "description": "登記機関から返されなかったセクション。",
        "properties": {
          "status_code": {
            "type": "integer",
            "nullable": true,
            "description": "レジストリがそのセクションについて回答したステータス。"
          }
        },
        "required": [
          "status_code"
        ]
      },
      "KYBRegistryLiteEnrichment": {
        "type": "object",
        "description": "その国の別の登記ソースが補完した、Liteプロファイルの空欄フィールド。ソース名は示されません。",
        "properties": {
          "fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "入力された企業フィールド。"
          },
          "people_added": {
            "type": "integer",
            "description": "追加された役員または所有者の数。"
          }
        },
        "required": [
          "fields",
          "people_added"
        ]
      },
      "KYBRegistrySource": {
        "type": "object",
        "description": "記録の読み取り元である公式登記簿。名前が示されるのは政府の公式登記簿、規制当局、公式の識別子システムのみで、それ以外の情報源は省略されます。",
        "properties": {
          "name": {
            "type": "string",
            "description": "登記所の名称。例: `UK Companies House`。"
          },
          "source_type": {
            "type": "string",
            "enum": [
              "official"
            ],
            "description": "常に`official`です。"
          }
        },
        "required": [
          "name",
          "source_type"
        ]
      },
      "KYBOwnershipStructure": {
        "type": "object",
        "nullable": true,
        "description": "所有構造レベルが提供された時点で登記情報により証明された資本構成表。直接の`shareholders`と`beneficial_owners`を含みます。登記情報により所有構造が証明されなかった場合はnullです。登記ソース自体の行は含まれません。最新の記録は`company.beneficial_owners`と`company.ownership`を参照してください。",
        "properties": {
          "shareholders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KYBOwnershipStructureOwner"
            }
          },
          "beneficial_owners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KYBOwnershipStructureOwner"
            }
          }
        },
        "required": [
          "shareholders",
          "beneficial_owners"
        ]
      },
      "KYBOwnershipStructureOwner": {
        "type": "object",
        "description": "所有構造スナップショットの所有者1名です。`company.beneficial_owners[]`と同じ登記上の身元と持分、およびその正規の`shareholding`を含みます。",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true,
            "description": "登記に記載されているとおりの所有者名。"
          },
          "first_name": {
            "type": "string",
            "nullable": true,
            "description": "自然人の名。登記機関に記載がある場合に返されます。"
          },
          "last_name": {
            "type": "string",
            "nullable": true,
            "description": "自然人の場合の姓（登記簿に記載されている場合）。"
          },
          "date_of_birth": {
            "type": "string",
            "nullable": true,
            "description": "登記簿で公開されている場合の生年月日（ISO 8601）。"
          },
          "country_of_birth": {
            "type": "string",
            "nullable": true,
            "description": "登記機関が公開している場合の出生国。"
          },
          "company_name": {
            "type": "string",
            "nullable": true,
            "description": "法人の所有者の場合の会社名。"
          },
          "registration_number": {
            "type": "string",
            "nullable": true,
            "description": "法人所有者の場合の登記番号。"
          },
          "entity_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "person",
              "company",
              null
            ],
            "description": "所有者が自然人か企業か。"
          },
          "nationality": {
            "type": "string",
            "nullable": true,
            "description": "登記簿に記載がある場合の国籍。"
          },
          "designation": {
            "type": "string",
            "nullable": true,
            "description": "登記簿に記載されているとおりの所有者の肩書きまたは役割。"
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "直接の保有者の場合は`shareholder`、実質的支配者の場合は`ubo`です。"
          },
          "ownership_min_shares": {
            "type": "string",
            "nullable": true,
            "description": "持分の下限（パーセント）。正確な持分の場合は上限と同じ値になります。"
          },
          "ownership_max_shares": {
            "type": "string",
            "nullable": true,
            "description": "持分の上限値（パーセント）。"
          },
          "voting_min_shares": {
            "type": "string",
            "nullable": true,
            "description": "議決権の下限（パーセント）。"
          },
          "voting_max_shares": {
            "type": "string",
            "nullable": true,
            "description": "議決権の上限値（パーセント）。"
          },
          "appointment_date": {
            "type": "string",
            "nullable": true,
            "description": "保有または就任の開始日（ISO 8601）。"
          },
          "is_active": {
            "type": "boolean",
            "nullable": true,
            "description": "以前の所有者の場合はfalseです。"
          },
          "shareholding": {
            "$ref": "#/components/schemas/KYBRegistryShareholding"
          }
        },
        "required": [
          "name",
          "first_name",
          "last_name",
          "date_of_birth",
          "country_of_birth",
          "company_name",
          "registration_number",
          "entity_type",
          "nationality",
          "designation",
          "roles",
          "ownership_min_shares",
          "ownership_max_shares",
          "voting_min_shares",
          "voting_max_shares",
          "appointment_date",
          "is_active",
          "shareholding"
        ]
      },
      "DigitalIdWalletApiWalletVerificationError": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "安定した機械可読コード（例: wallet_unavailable）。"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "detail",
          "error"
        ]
      },
      "DigitalIdWalletApiWalletVerificationStartForbidden": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage"
          },
          {
            "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
          }
        ]
      },
      "DigitalIdWalletApiClientCredentialsForbiddenErrorMessage": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "string",
            "default": "Forbidden - User doesn't have permission"
          }
        }
      },
      "DigitalIdWalletApiWalletVerificationStartBadRequest": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationError"
          },
          {
            "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationFieldErrors"
          }
        ]
      },
      "DigitalIdWalletApiWalletVerificationFieldErrors": {
        "type": "object",
        "description": "リクエストのバリデーションエラー：拒否された各フィールドとそのメッセージ。",
        "additionalProperties": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "DigitalIdWalletApiWalletVerificationResponse": {
        "type": "object",
        "description": "すべてのウォレットエンドポイントが返す形式の、単独のウォレット検証1件です。",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "wallet_verification": {
            "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResult"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "開始時に送信されたmetadataオブジェクト、またはnullです。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "created_at",
          "metadata",
          "request_id",
          "vendor_data",
          "wallet_verification"
        ]
      },
      "DigitalIdWalletApiWalletVerificationResult": {
        "type": "object",
        "properties": {
          "wallet": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiWallet"
              }
            ],
            "readOnly": true
          },
          "country": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "保留中はNot Finished、その後Approved（認証済み）またはDeclinedになります。"
          },
          "outcome": {
            "$ref": "#/components/schemas/DigitalIdWalletApiWalletVerificationResultOutcomeEnum"
          },
          "error": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "interaction": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiInteractionEnum"
              }
            ],
            "readOnly": true
          },
          "simulated": {
            "type": "boolean",
            "readOnly": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "next_action": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletNextAction"
              }
            ],
            "nullable": true,
            "readOnly": true
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletIdentity"
              }
            ],
            "nullable": true,
            "readOnly": true
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "readOnly": true
          },
          "level_of_assurance": {
            "type": "string",
            "nullable": true
          },
          "verified_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "signature_valid": {
            "type": "boolean",
            "nullable": true,
            "description": "クレデンシャルの署名が検証されるとtrue、シミュレートされたものの場合はnull。"
          },
          "credential_type": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "attributes",
          "country",
          "credential_type",
          "error",
          "expires_at",
          "identity",
          "interaction",
          "level_of_assurance",
          "next_action",
          "outcome",
          "signature_valid",
          "simulated",
          "status",
          "verified_at",
          "wallet"
        ]
      },
      "DigitalIdWalletApiWalletIdentity": {
        "type": "object",
        "properties": {
          "full_name": {
            "type": "string",
            "nullable": true
          },
          "first_name": {
            "type": "string",
            "nullable": true
          },
          "last_name": {
            "type": "string",
            "nullable": true
          },
          "date_of_birth": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true,
            "description": "ISO3形式の国籍。ウォレットが国籍を示している場合のみ返されます（推測されることはありません）。"
          },
          "issuing_state": {
            "type": "string",
            "description": "IDを発行したスキームの国を示すISO3コード。"
          }
        },
        "required": [
          "date_of_birth",
          "first_name",
          "full_name",
          "issuing_state",
          "last_name",
          "nationality"
        ]
      },
      "DigitalIdWalletApiWalletNextAction": {
        "type": "object",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletNextActionTypeEnum"
              }
            ],
            "description": "redirect：ユーザーのブラウザをurlに遷移させます。confirm_in_app：verification_codeをユーザーに表示します。ユーザーはそれがウォレットアプリ内のコードと一致することを確認し、ウォレットアプリで承認します。その後、ポーリングしてください。request_digital_credential：開始時と同じオリジン上で、ユーザー操作の中でdigital_credentials.requestを使ってウォレットにリクエストし、返された内容をPOST .../verifications/{request_id}/response/に送信します。\n\n* `redirect` - redirect\n* `confirm_in_app` - confirm_in_app\n* `request_digital_credential` - request_digital_credential"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "redirectのみ：ユーザーがウォレットでサインインする場所。"
          },
          "digital_credentials": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiWalletDigitalCredentialsRequest"
              }
            ],
            "description": "request_digital_credentialのみ：ウォレットに渡すリクエスト。"
          },
          "verification_code": {
            "type": "string",
            "description": "confirm_in_appのみ：ウォレットアプリにも表示される4桁の照合コード。"
          },
          "poll_interval_seconds": {
            "type": "integer",
            "description": "confirm_in_appのみ：迅速なフィードバックを得るためにPOST .../verifications/{request_id}/poll/を呼び出す間隔。Diditは保留中のサインインもバックグラウンドでポーリングするため、ポーリングしない場合でもWebhookが結果を通知します。"
          }
        },
        "required": [
          "type"
        ]
      },
      "DigitalIdWalletApiWalletNextActionTypeEnum": {
        "enum": [
          "redirect",
          "confirm_in_app",
          "request_digital_credential"
        ],
        "type": "string",
        "description": "* `redirect` - redirect\n* `confirm_in_app` - confirm_in_app\n* `request_digital_credential` - request_digital_credential"
      },
      "DigitalIdWalletApiInteractionEnum": {
        "enum": [
          "redirect",
          "in_app",
          "digital_credentials"
        ],
        "type": "string",
        "description": "* `redirect` - redirect\n* `in_app` - in_app\n* `digital_credentials` - digital_credentials"
      },
      "DigitalIdWalletApiWalletVerificationResultOutcomeEnum": {
        "enum": [
          "pending",
          "verified",
          "cancelled",
          "timeout",
          "failed"
        ],
        "type": "string",
        "description": "* `pending` - 保留中\n* `verified` - 検証済み\n* `cancelled` - ユーザーによりキャンセル\n* `timeout` - タイムアウト\n* `failed` - 失敗"
      },
      "DigitalIdWalletApiWallet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ウォレットのカタログID（例: bankid_se）。"
          },
          "name": {
            "type": "string"
          },
          "issuing_authority": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "id",
          "issuing_authority",
          "name"
        ]
      },
      "DigitalIdWalletApiEudiWalletVerificationStartRequest": {
        "type": "object",
        "description": "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)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiEudiWalletVerificationStartCountryEnum"
              }
            ],
            "description": "EUDI Walletの本人情報の国を示すISO 3166-1 alpha-3コード。\n\n* `AUT` - AUT\n* `BEL` - BEL\n* `BGR` - BGR\n* `HRV` - HRV\n* `CYP` - CYP\n* `CZE` - CZE\n* `DNK` - DNK\n* `EST` - EST\n* `FIN` - FIN\n* `FRA` - FRA\n* `DEU` - DEU\n* `GRC` - GRC\n* `HUN` - HUN\n* `IRL` - IRL\n* `ITA` - ITA\n* `LVA` - LVA\n* `LTU` - LTU\n* `LUX` - LUX\n* `MLT` - MLT\n* `NLD` - NLD\n* `POL` - POL\n* `PRT` - PRT\n* `ROU` - ROU\n* `SVK` - SVK\n* `SVN` - SVN\n* `ESP` - ESP\n* `SWE` - SWE\n* `ISL` - ISL\n* `LIE` - LIE\n* `NOR` - NOR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "country",
          "return_url"
        ]
      },
      "DigitalIdWalletApiDeviceEnum": {
        "enum": [
          "same_device",
          "cross_device"
        ],
        "type": "string",
        "description": "* `same_device` - same_device\n* `cross_device` - cross_device"
      },
      "DigitalIdWalletApiEudiWalletVerificationStartCountryEnum": {
        "enum": [
          "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"
        ],
        "type": "string",
        "description": "* `AUT` - AUT\n* `BEL` - BEL\n* `BGR` - BGR\n* `HRV` - HRV\n* `CYP` - CYP\n* `CZE` - CZE\n* `DNK` - DNK\n* `EST` - EST\n* `FIN` - FIN\n* `FRA` - FRA\n* `DEU` - DEU\n* `GRC` - GRC\n* `HUN` - HUN\n* `IRL` - IRL\n* `ITA` - ITA\n* `LVA` - LVA\n* `LTU` - LTU\n* `LUX` - LUX\n* `MLT` - MLT\n* `NLD` - NLD\n* `POL` - POL\n* `PRT` - PRT\n* `ROU` - ROU\n* `SVK` - SVK\n* `SVN` - SVN\n* `ESP` - ESP\n* `SWE` - SWE\n* `ISL` - ISL\n* `LIE` - LIE\n* `NOR` - NOR"
      },
      "DigitalIdWalletApiConnectidWalletVerificationStartRequest": {
        "type": "object",
        "description": "ConnectIDによる本人確認を開始します(AUS)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiConnectidWalletVerificationStartCountryEnum"
              }
            ],
            "default": "AUS",
            "description": "ConnectIDの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはAUSで、ConnectIDが対応する唯一の国です。\n\n* `AUS` - AUS"
          },
          "authorisation_server_id": {
            "type": "string",
            "minLength": 1,
            "description": "ConnectIDの銀行セレクターで選択された認可サーバーID。サンドボックスではデフォルトでMock Bank Aが使用されます。",
            "maxLength": 36
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiConnectidWalletVerificationStartCountryEnum": {
        "enum": [
          "AUS"
        ],
        "type": "string",
        "description": "* `AUS` - AUS"
      },
      "DigitalIdWalletApiAudkenniWalletVerificationStartRequest": {
        "type": "object",
        "description": "Auðkenni認証（ISL）を開始します。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiAudkenniWalletVerificationStartCountryEnum"
              }
            ],
            "default": "ISL",
            "description": "Auðkenniの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはISLで、Auðkenniが対応する唯一の国です。\n\n* `ISL` - ISL"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiAudkenniWalletVerificationStartCountryEnum": {
        "enum": [
          "ISL"
        ],
        "type": "string",
        "description": "* `ISL` - ISL"
      },
      "DigitalIdWalletApiFranceconnectWalletVerificationStartRequest": {
        "type": "object",
        "description": "FranceConnectによる本人確認を開始します(FRA)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiFranceconnectWalletVerificationStartCountryEnum"
              }
            ],
            "default": "FRA",
            "description": "FranceConnectの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはFRAで、FranceConnectが対応する唯一の国です。\n\n* `FRA` - FRA"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiFranceconnectWalletVerificationStartCountryEnum": {
        "enum": [
          "FRA"
        ],
        "type": "string",
        "description": "* `FRA` - FRA"
      },
      "DigitalIdWalletApiDiiaWalletVerificationStartRequest": {
        "type": "object",
        "description": "Diiaによる本人確認を開始します(UKR)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDiiaWalletVerificationStartCountryEnum"
              }
            ],
            "default": "UKR",
            "description": "Diiaの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはUKRで、Diiaが対応する唯一の国です。\n\n* `UKR` - UKR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiDiiaWalletVerificationStartCountryEnum": {
        "enum": [
          "UKR"
        ],
        "type": "string",
        "description": "* `UKR` - UKR"
      },
      "DigitalIdWalletApiMojeidWalletVerificationStartRequest": {
        "type": "object",
        "description": "MojeID認証を開始します(CZE)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryE2dEnum"
              }
            ],
            "default": "CZE",
            "description": "MojeID IDの国を示すISO 3166-1 alpha-3コード。デフォルトはCZEで、MojeIDが対応する唯一の国です。\n\n* `CZE` - CZE"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiCountryE2dEnum": {
        "enum": [
          "CZE"
        ],
        "type": "string",
        "description": "* `CZE` - CZE"
      },
      "DigitalIdWalletApiBankidCzWalletVerificationStartRequest": {
        "type": "object",
        "description": "Bank iD認証（CZE）を開始します。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryE2dEnum"
              }
            ],
            "default": "CZE",
            "description": "Bank iDの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはCZEで、Bank iDが対応する唯一の国です。\n\n* `CZE` - CZE"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiEparakstsMobileWalletVerificationStartRequest": {
        "type": "object",
        "description": "eParaksts mobileによる認証を開始します（LVA）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiEparakstsMobileWalletVerificationStartCountryEnum"
              }
            ],
            "default": "LVA",
            "description": "eParaksts mobile IDの国を示すISO 3166-1 alpha-3コード。デフォルトはLVAで、eParaksts mobileが対応する唯一の国です。\n\n* `LVA` - LVA"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiEparakstsMobileWalletVerificationStartCountryEnum": {
        "enum": [
          "LVA"
        ],
        "type": "string",
        "description": "* `LVA` - LVA"
      },
      "DigitalIdWalletApiIdcardEeWalletVerificationStartRequest": {
        "type": "object",
        "description": "エストニアIDカードによる本人確認を開始します(EST)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdcardEeWalletVerificationStartCountryEnum"
              }
            ],
            "default": "EST",
            "description": "エストニアIDカードの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはESTで、エストニアIDカードが対応する唯一の国です。\n\n* `EST` - EST"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiIdcardEeWalletVerificationStartCountryEnum": {
        "enum": [
          "EST"
        ],
        "type": "string",
        "description": "* `EST` - EST"
      },
      "DigitalIdWalletApiMobileIdWalletVerificationStartRequest": {
        "type": "object",
        "description": "Mobile-ID認証を開始します(EST、LTU)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum"
              }
            ],
            "description": "Mobile-ID IDの国を示すISO 3166-1 alpha-3コード。\n\n* `EST` - EST\n* `LTU` - LTU"
          },
          "personal_code": {
            "type": "string",
            "minLength": 1,
            "description": "ユーザーの国民個人識別コード。ユーザーのMobile-IDアプリを指定するために使用され、ユーザーはアプリで照合コードを確認してPINを入力します。PINは絶対に収集しないでください。",
            "pattern": "^[0-9-]{6,20}$"
          },
          "phone_number": {
            "type": "string",
            "minLength": 1,
            "description": "E.164形式のMobile-ID電話番号（+372...または+370...）。",
            "maxLength": 16
          }
        },
        "required": [
          "country",
          "personal_code",
          "phone_number"
        ]
      },
      "DigitalIdWalletApiMobileIdWalletVerificationStartCountryEnum": {
        "enum": [
          "EST",
          "LTU"
        ],
        "type": "string",
        "description": "* `EST` - EST\n* `LTU` - LTU"
      },
      "DigitalIdWalletApiSmartIdWalletVerificationStartRequest": {
        "type": "object",
        "description": "Smart-IDによる認証を開始します（EST、LVA、LTU、BEL）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiSmartIdWalletVerificationStartCountryEnum"
              }
            ],
            "description": "Smart-ID IDの国を示すISO 3166-1 alpha-3コード。\n\n* `EST` - EST\n* `LVA` - LVA\n* `LTU` - LTU\n* `BEL` - BEL"
          },
          "personal_code": {
            "type": "string",
            "minLength": 1,
            "description": "ユーザーの国民個人識別コード。ユーザーのSmart-IDアプリを指定するために使用され、ユーザーはアプリで照合コードを確認してPINを入力します。PINは絶対に収集しないでください。",
            "pattern": "^[0-9-]{6,20}$"
          }
        },
        "required": [
          "country",
          "personal_code"
        ]
      },
      "DigitalIdWalletApiSmartIdWalletVerificationStartCountryEnum": {
        "enum": [
          "EST",
          "LVA",
          "LTU",
          "BEL"
        ],
        "type": "string",
        "description": "* `EST` - EST\n* `LVA` - LVA\n* `LTU` - LTU\n* `BEL` - BEL"
      },
      "DigitalIdWalletApiGovukWalletWalletVerificationStartRequest": {
        "type": "object",
        "description": "GOV.UK Wallet認証を開始します(GBR)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountry520Enum"
              }
            ],
            "default": "GBR",
            "description": "GOV.UK Walletの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはGBRで、GOV.UK Walletが対応する唯一の国です。\n\n* `GBR` - GBR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiCountry520Enum": {
        "enum": [
          "GBR"
        ],
        "type": "string",
        "description": "* `GBR` - GBR"
      },
      "DigitalIdWalletApiOneidWalletVerificationStartRequest": {
        "type": "object",
        "description": "OneID認証を開始します(GBR)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountry520Enum"
              }
            ],
            "default": "GBR",
            "description": "OneID IDの国を示すISO 3166-1 alpha-3コード。デフォルトはGBRで、OneIDが対応する唯一の国です。\n\n* `GBR` - GBR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiGovbrWalletVerificationStartRequest": {
        "type": "object",
        "description": "gov.brによる認証を開始します（BRA）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiGovbrWalletVerificationStartCountryEnum"
              }
            ],
            "default": "BRA",
            "description": "gov.br IDの国を示すISO 3166-1 alpha-3コード。デフォルトはBRAで、gov.brが対応する唯一の国です。\n\n* `BRA` - BRA"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiGovbrWalletVerificationStartCountryEnum": {
        "enum": [
          "BRA"
        ],
        "type": "string",
        "description": "* `BRA` - BRA"
      },
      "DigitalIdWalletApiUaePassWalletVerificationStartRequest": {
        "type": "object",
        "description": "UAE PASSによる認証を開始します（ARE）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiUaePassWalletVerificationStartCountryEnum"
              }
            ],
            "default": "ARE",
            "description": "UAE PASS IDの国を示すISO 3166-1 alpha-3コード。デフォルトはAREで、UAE PASSが対応する唯一の国です。\n\n* `ARE` - ARE"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiUaePassWalletVerificationStartCountryEnum": {
        "enum": [
          "ARE"
        ],
        "type": "string",
        "description": "* `ARE` - ARE"
      },
      "DigitalIdWalletApiFrejaidWalletVerificationStartRequest": {
        "type": "object",
        "description": "Freja eID認証を開始します(SWE)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryEe9Enum"
              }
            ],
            "default": "SWE",
            "description": "Freja eIDの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはSWEで、Freja eIDが対応する唯一の国です。\n\n* `SWE` - SWE"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiCountryEe9Enum": {
        "enum": [
          "SWE"
        ],
        "type": "string",
        "description": "* `SWE` - SWE"
      },
      "DigitalIdWalletApiPersonalausweisWalletVerificationStartRequest": {
        "type": "object",
        "description": "Personalausweisによる認証を開始します（DEU）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiPersonalausweisWalletVerificationStartCountryEnum"
              }
            ],
            "default": "DEU",
            "description": "Personalausweis IDの国を示すISO 3166-1 alpha-3コード。デフォルトはDEUで、Personalausweisが対応する唯一の国です。\n\n* `DEU` - DEU"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiPersonalausweisWalletVerificationStartCountryEnum": {
        "enum": [
          "DEU"
        ],
        "type": "string",
        "description": "* `DEU` - DEU"
      },
      "DigitalIdWalletApiFtnWalletVerificationStartRequest": {
        "type": "object",
        "description": "Finnish Trust Networkによる本人確認を開始します(FIN)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiFtnWalletVerificationStartCountryEnum"
              }
            ],
            "default": "FIN",
            "description": "Finnish Trust Networkの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはFINで、Finnish Trust Networkが対応する唯一の国です。\n\n* `FIN` - FIN"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiFtnWalletVerificationStartCountryEnum": {
        "enum": [
          "FIN"
        ],
        "type": "string",
        "description": "* `FIN` - FIN"
      },
      "DigitalIdWalletApiIdinWalletVerificationStartRequest": {
        "type": "object",
        "description": "iDINによる認証を開始します（NLD）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiIdinWalletVerificationStartCountryEnum"
              }
            ],
            "default": "NLD",
            "description": "iDIN IDの国を示すISO 3166-1 alpha-3コード。デフォルトはNLDで、iDINが対応する唯一の国です。\n\n* `NLD` - NLD"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiIdinWalletVerificationStartCountryEnum": {
        "enum": [
          "NLD"
        ],
        "type": "string",
        "description": "* `NLD` - NLD"
      },
      "DigitalIdWalletApiItsmeWalletVerificationStartRequest": {
        "type": "object",
        "description": "itsme認証（BEL、LUX、NLD）を開始します。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiItsmeWalletVerificationStartCountryEnum"
              }
            ],
            "description": "itsme IDの国を示すISO 3166-1 alpha-3コード。\n\n* `BEL` - BEL\n* `LUX` - LUX\n* `NLD` - NLD"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "country",
          "return_url"
        ]
      },
      "DigitalIdWalletApiItsmeWalletVerificationStartCountryEnum": {
        "enum": [
          "BEL",
          "LUX",
          "NLD"
        ],
        "type": "string",
        "description": "* `BEL` - BEL\n* `LUX` - LUX\n* `NLD` - NLD"
      },
      "DigitalIdWalletApiBuypassWalletVerificationStartRequest": {
        "type": "object",
        "description": "Buypass IDによる本人確認を開始します(NOR)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryAfcEnum"
              }
            ],
            "default": "NOR",
            "description": "Buypass IDの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはNORで、Buypass IDが対応する唯一の国です。\n\n* `NOR` - NOR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiCountryAfcEnum": {
        "enum": [
          "NOR"
        ],
        "type": "string",
        "description": "* `NOR` - NOR"
      },
      "DigitalIdWalletApiVippsWalletVerificationStartRequest": {
        "type": "object",
        "description": "Vippsによる認証を開始します（NOR）。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryAfcEnum"
              }
            ],
            "default": "NOR",
            "description": "Vipps IDの国を示すISO 3166-1 alpha-3コード。デフォルトはNORで、Vippsが対応する唯一の国です。\n\n* `NOR` - NOR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiBankidNoWalletVerificationStartRequest": {
        "type": "object",
        "description": "BankIDによる本人確認を開始します(NOR)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryAfcEnum"
              }
            ],
            "default": "NOR",
            "description": "BankIDの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはNORで、このBankIDが対応する唯一の国です。\n\n* `NOR` - NOR"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiBankidSeWalletVerificationStartRequest": {
        "type": "object",
        "description": "BankIDによる本人確認を開始します(SWE)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiCountryEe9Enum"
              }
            ],
            "default": "SWE",
            "description": "BankIDの本人情報の国を示すISO 3166-1 alpha-3コード。デフォルトはSWEで、このBankIDが対応する唯一の国です。\n\n* `SWE` - SWE"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiMitidWalletVerificationStartRequest": {
        "type": "object",
        "description": "MitID認証を開始します(DNK)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiMitidWalletVerificationStartCountryEnum"
              }
            ],
            "default": "DNK",
            "description": "MitID IDの国を示すISO 3166-1 alpha-3コード。デフォルトはDNKで、MitIDが対応する唯一の国です。\n\n* `DNK` - DNK"
          },
          "return_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "ウォレットでの操作後にユーザーのブラウザが戻るhttps URLで、request_idとresultが付加されます。このURLのホストは、アプリケーションのallowed_return_hostsに登録されている必要があります（またはアプリケーションのホワイトラベルドメインであること）。resultだけを信用しないでください。結果はGET .../verifications/{request_id}/またはWebhookで取得してください。",
            "maxLength": 2048
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiDeviceEnum"
              }
            ],
            "default": "same_device",
            "description": "ユーザーがお客様のページを表示しているデバイスでサインインする場合はsame_device、別のデバイスを使用する場合（例：BankIDのQRコード）はcross_device。\n\n* `same_device` - same_device\n* `cross_device` - cross_device"
          }
        },
        "required": [
          "return_url"
        ]
      },
      "DigitalIdWalletApiMitidWalletVerificationStartCountryEnum": {
        "enum": [
          "DNK"
        ],
        "type": "string",
        "description": "* `DNK` - DNK"
      },
      "DigitalIdWalletApiWalletCatalogResponse": {
        "type": "object",
        "properties": {
          "wallets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DigitalIdWalletApiWalletCatalogEntry"
            }
          }
        },
        "required": [
          "wallets"
        ]
      },
      "DigitalIdWalletApiWalletCatalogEntry": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "path": {
            "type": "string",
            "description": "ウォレット独自の開始エンドポイント。"
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "issuing_authority": {
            "type": "string"
          },
          "level_of_assurance": {
            "type": "string",
            "nullable": true
          },
          "interaction": {
            "$ref": "#/components/schemas/DigitalIdWalletApiInteractionEnum"
          },
          "required_fields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "available": {
            "type": "boolean",
            "description": "このアプリケーションがこの環境で今すぐ開始できるかどうか。一覧に表示されていても、利用可能とは限りません。"
          }
        },
        "required": [
          "available",
          "countries",
          "id",
          "interaction",
          "issuing_authority",
          "level_of_assurance",
          "name",
          "path",
          "required_fields"
        ]
      },
      "CaseDuplicateCaseDuplicate": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "case_number": {
            "type": "string",
            "nullable": true,
            "maxLength": 32
          },
          "title": {
            "type": "string",
            "maxLength": 255
          },
          "status": {
            "$ref": "#/components/schemas/CaseDuplicateStatusEnum"
          },
          "priority": {
            "$ref": "#/components/schemas/CaseDuplicatePriorityEnum"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "created_at",
          "title",
          "uuid"
        ]
      },
      "CaseDuplicateCaseDuplicatePage": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer"
          },
          "next_offset": {
            "type": "integer",
            "nullable": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseDuplicateCaseDuplicate"
            }
          }
        },
        "required": [
          "count",
          "next_offset",
          "results"
        ]
      },
      "RoutingPublicationPolicyDraftResponse": {
        "type": "object",
        "properties": {
          "draft": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoutingPublicationPolicyDraft"
              }
            ],
            "nullable": true
          }
        },
        "required": [
          "draft"
        ]
      },
      "RoutingPublicationPolicyDraftWriteRequest": {
        "type": "object",
        "properties": {
          "expected_version": {
            "type": "integer",
            "minimum": 0
          },
          "expected_revision": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "changes": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "changes",
          "expected_revision",
          "expected_version"
        ]
      },
      "CasePublicationPolicyDraft": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "string",
            "format": "uuid"
          },
          "base_version": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "changes": {},
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "maxLength": 254
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "base_version",
          "updated_at"
        ]
      },
      "CasePublicationPolicyDraftPreconditionRequest": {
        "type": "object",
        "properties": {
          "expected_version": {
            "type": "integer",
            "minimum": 0
          },
          "expected_revision": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "required": [
          "expected_revision",
          "expected_version"
        ]
      },
      "CaseCollaborationCaseNote": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "comment": {
            "type": "string"
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "maxLength": 255
          },
          "actor_name": {
            "type": "string",
            "nullable": true,
            "maxLength": 255
          },
          "mentioned_emails": {},
          "is_internal": {
            "type": "boolean"
          },
          "attachments": {},
          "tags": {},
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "reply_to": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CaseCollaborationCaseNoteReply"
              }
            ],
            "nullable": true,
            "readOnly": true
          },
          "is_pinned": {
            "type": "boolean"
          },
          "client_reference": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "required": [
          "comment",
          "created_at",
          "reply_to",
          "uuid"
        ]
      },
      "CustomerMessagingPaginatedCaseRequestList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=400&limit=100"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=200&limit=100"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerMessagingCaseRequest"
            }
          }
        }
      },
      "FraudCheckResponse": {
        "type": "object",
        "properties": {
          "check_id": {
            "type": "string",
            "format": "uuid"
          },
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "このチェックのために作成されたネイティブの検証セッション。"
          },
          "client_reference": {
            "type": "string",
            "nullable": true
          },
          "processing_status": {
            "$ref": "#/components/schemas/FraudProcessingStatusEnum"
          },
          "profile_id": {
            "type": "string"
          },
          "profile_version": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "inputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudCheckInput"
            }
          },
          "modules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudCheckModuleReport"
            }
          },
          "attribute_evidence": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            }
          },
          "compound_evidence": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            }
          },
          "risk": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudCheckRisk"
            }
          },
          "network": {
            "type": "object",
            "additionalProperties": {}
          },
          "enrichment": {
            "type": "object",
            "additionalProperties": {}
          },
          "identity_relationship": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FraudCheckIdentityRelationship"
              }
            ],
            "nullable": true
          },
          "recommendation": {
            "$ref": "#/components/schemas/FraudRecommendationEnum"
          },
          "next_action": {
            "$ref": "#/components/schemas/FraudNextActionEnum"
          },
          "decision_reasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "coverage": {
            "type": "object",
            "additionalProperties": {}
          },
          "usage": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            }
          },
          "vendor_data": {
            "type": "string",
            "nullable": true
          },
          "metadata": {
            "nullable": true
          }
        },
        "required": [
          "attribute_evidence",
          "check_id",
          "client_reference",
          "completed_at",
          "compound_evidence",
          "coverage",
          "created_at",
          "decision_reasons",
          "inputs",
          "modules",
          "network",
          "next_action",
          "processing_status",
          "profile_id",
          "profile_version",
          "recommendation",
          "risk",
          "usage"
        ]
      },
      "CaseReviewTeam": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseReviewTeamMember"
            },
            "maxItems": 250
          },
          "is_active": {
            "type": "boolean"
          },
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        }
      },
      "CaseActionCaseEntityActionRequest": {
        "type": "object",
        "properties": {
          "client_reference": {
            "type": "string",
            "format": "uuid"
          },
          "retry": {
            "type": "boolean",
            "default": false
          },
          "action": {
            "$ref": "#/components/schemas/CaseActionActionEnum"
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "note": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "action"
        ]
      },
      "RoutingPublicationPaginatedPolicyRevisionList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=400&limit=100"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=200&limit=100"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingPublicationPolicyRevision"
            }
          }
        }
      },
      "FraudRecommendationEnum": {
        "enum": [
          "approve",
          "review",
          "reject"
        ],
        "type": "string",
        "description": "* `approve` - 承認\n* `review` - レビュー\n* `reject` - 却下"
      },
      "CustomerMessagingCaseRequestPreviewResponse": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "recipient": {
            "type": "string",
            "format": "email"
          },
          "sender": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "html": {
            "type": "string"
          },
          "requires_user_action": {
            "type": "boolean"
          },
          "preview_token": {
            "type": "string"
          }
        },
        "required": [
          "expires_at",
          "html",
          "preview_token",
          "recipient",
          "request_id",
          "requires_user_action",
          "sender",
          "subject"
        ]
      },
      "CustomerMessagingCaseCustomerResponseRequest": {
        "type": "object",
        "properties": {
          "full_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "date_of_birth": {
            "type": "string",
            "format": "date"
          },
          "file": {
            "type": "string",
            "format": "binary",
            "writeOnly": true
          }
        }
      },
      "CaseCollaborationCaseNoteReply": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "actor_name": {
            "type": "string",
            "nullable": true
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "maxLength": 300
          }
        },
        "required": [
          "actor_email",
          "actor_name",
          "comment",
          "uuid"
        ]
      },
      "FraudCheckModuleReport": {
        "type": "object",
        "properties": {
          "module": {
            "$ref": "#/components/schemas/FraudExcludeEnum"
          },
          "status": {
            "$ref": "#/components/schemas/FraudStatusEnum"
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "latency_ms": {
            "type": "integer"
          },
          "freshness": {
            "type": "string",
            "nullable": true
          },
          "billable_units": {
            "type": "integer"
          }
        },
        "required": [
          "billable_units",
          "freshness",
          "latency_ms",
          "module",
          "reason",
          "status"
        ]
      },
      "CaseDuplicateEntityTypeEnum": {
        "enum": [
          "session",
          "business_session",
          "transaction"
        ],
        "type": "string",
        "description": "* `session` - セッション\n* `business_session` - 企業セッション\n* `transaction` - 取引"
      },
      "FraudClientCredentialsErrorMessage": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "string",
            "default": "Authentication failed: Invalid client access token."
          }
        }
      },
      "FraudAvailabilityEnum": {
        "enum": [
          "available",
          "not_requested",
          "no_reference",
          "insufficient_history",
          "unsupported_region",
          "source_unavailable"
        ],
        "type": "string",
        "description": "* `available` - 利用可能\n* `not_requested` - 未リクエスト\n* `no_reference` - 参照データなし\n* `insufficient_history` - 履歴不足\n* `unsupported_region` - 非対応地域\n* `source_unavailable` - ソース利用不可"
      },
      "CasePublicationPolicyDraftResponse": {
        "type": "object",
        "properties": {
          "draft": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CasePublicationPolicyDraft"
              }
            ],
            "nullable": true
          }
        },
        "required": [
          "draft"
        ]
      },
      "FraudCheckAttributesRequest": {
        "type": "object",
        "description": "裏付けとなる属性。すべて任意で、指定するとモジュールの適用範囲が広がります。",
        "properties": {
          "first_name": {
            "type": "string",
            "maxLength": 128
          },
          "last_name": {
            "type": "string",
            "maxLength": 128
          },
          "full_name": {
            "type": "string",
            "maxLength": 256
          },
          "date_of_birth": {
            "type": "string",
            "format": "date"
          },
          "nationality": {
            "type": "string",
            "maxLength": 3
          },
          "gender": {
            "type": "string",
            "maxLength": 16
          },
          "address": {
            "type": "string",
            "maxLength": 512
          },
          "city": {
            "type": "string",
            "maxLength": 128
          },
          "state": {
            "type": "string",
            "maxLength": 128
          },
          "postal_code": {
            "type": "string",
            "maxLength": 32
          }
        }
      },
      "NetworkNote": {
        "type": "object",
        "required": [
          "uuid",
          "actor_email",
          "comment",
          "client_reference",
          "created_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "readOnly": true,
            "description": "認証済みの作成者。サーバーによって割り当てられます。"
          },
          "comment": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "client_reference": {
            "type": "string",
            "format": "uuid"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        }
      },
      "CaseActionEntityTypeEnum": {
        "enum": [
          "user",
          "business"
        ],
        "type": "string",
        "description": "* `user` - user\n* `business` - business"
      },
      "CaseRoutingCondition": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "enum": [
              "source",
              "priority",
              "tags"
            ]
          },
          "operator": {
            "type": "string",
            "enum": [
              "equals",
              "in",
              "contains"
            ]
          },
          "value": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          }
        },
        "required": [
          "field",
          "operator",
          "value"
        ],
        "description": "ソースと優先度は、サポートされている値でのequalsまたはinに対応しています。タグは、空でないタグ1つでのcontainsに対応しています。"
      },
      "RoutingPublicationPolicyRevision": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "snapshot": {},
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "maxLength": 254
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "published_at",
          "snapshot",
          "version"
        ]
      },
      "CasePublicationPolicyRevision": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "snapshot": {},
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "maxLength": 254
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "published_at",
          "snapshot",
          "version"
        ]
      },
      "FraudCheckIdentityRelationship": {
        "type": "object",
        "properties": {
          "result": {
            "$ref": "#/components/schemas/FraudResultEnum"
          },
          "reference_type": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "availability": {
            "$ref": "#/components/schemas/FraudAvailabilityEnum"
          },
          "reason_codes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "availability",
          "country",
          "reason_codes",
          "reference_type",
          "result"
        ]
      },
      "CasePublicationPaginatedPolicyRevisionList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=400&limit=100"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=200&limit=100"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CasePublicationPolicyRevision"
            }
          }
        }
      },
      "CaseDuplicateBlankEnum": {
        "enum": [
          ""
        ]
      },
      "FraudCheckPlan": {
        "type": "object",
        "properties": {
          "profile_id": {
            "type": "string"
          },
          "profile_version": {
            "type": "string"
          },
          "modules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudCheckPlannedModule"
            }
          },
          "estimated_price": {
            "type": "string",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "is_sandbox": {
            "type": "boolean"
          },
          "can_afford": {
            "type": "boolean"
          }
        },
        "required": [
          "can_afford",
          "currency",
          "estimated_price",
          "is_sandbox",
          "modules",
          "profile_id",
          "profile_version"
        ]
      },
      "CaseReviewTeamUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseReviewTeamMember"
            },
            "maxItems": 250
          },
          "is_active": {
            "type": "boolean"
          }
        }
      },
      "RoutingPublicationPolicyDraft": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "string",
            "format": "uuid"
          },
          "base_version": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "changes": {},
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "maxLength": 254
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "base_version",
          "updated_at"
        ]
      },
      "FraudCheckRequestRequest": {
        "type": "object",
        "properties": {
          "client_reference": {
            "type": "string",
            "minLength": 1,
            "description": "このチェックに対するお客様独自の参照値です。冪等性キーを兼ねます。同じボディで再利用すると、モジュールを再実行・再請求することなく元のチェックが返されます。異なるボディで再利用すると409が返されます。",
            "maxLength": 255
          },
          "profile": {
            "type": "string",
            "minLength": 1,
            "default": "standard",
            "description": "オーケストレーションプロファイルIDです。デフォルトはDiditの`standard`プロファイルです。",
            "maxLength": 64
          },
          "profile_version": {
            "type": "string",
            "minLength": 1,
            "description": "固定されたプロファイルバージョンを指定します。デフォルトはプロファイルの現在のバージョンです。",
            "maxLength": 32
          },
          "subject": {
            "$ref": "#/components/schemas/FraudCheckSubjectRequest"
          },
          "context": {
            "$ref": "#/components/schemas/FraudCheckContextRequest"
          },
          "checks": {
            "$ref": "#/components/schemas/FraudCheckModuleSelectionRequest"
          },
          "vendor_data": {
            "type": "string",
            "maxLength": 1000
          },
          "metadata": {}
        },
        "required": [
          "subject"
        ]
      },
      "CaseDuplicateCaseSubjectInputRequest": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/CaseDuplicateTypeEnum"
          },
          "uuid": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "type",
          "uuid"
        ]
      },
      "CaseReviewTeamMember": {
        "type": "object",
        "properties": {
          "user_id": {
            "type": "string",
            "format": "uuid"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "unavailable"
            ],
            "default": "available"
          },
          "capacity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 10
          },
          "skills": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxItems": 25
          },
          "available_from": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "available_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "required": [
          "user_id"
        ]
      },
      "CaseRoutingPreviewRequest": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string",
            "enum": [
              "MANUAL",
              "AML_SCREENING",
              "TRANSACTION_RULE",
              "WORKFLOW_BUILDER"
            ]
          },
          "priority": {
            "type": "string",
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "default": "MEDIUM"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxItems": 50
          },
          "rule_uuid": {
            "type": "string",
            "format": "uuid"
          },
          "draft": {
            "$ref": "#/components/schemas/CaseRoutingRuleCreate"
          }
        },
        "required": [
          "source"
        ]
      },
      "FraudExcludeEnum": {
        "enum": [
          "normalization",
          "email_risk",
          "email_social",
          "phone_social",
          "phone_risk",
          "ip_risk",
          "database_validation",
          "networks_same_org",
          "networks_cross_org",
          "biometric_identity"
        ],
        "type": "string",
        "description": "* `normalization` - 正規化\n* `email_risk` - メールアドレスのリスク\n* `email_social` - メールアドレスのソーシャル情報\n* `phone_social` - 電話番号のソーシャル情報\n* `phone_risk` - 電話番号のリスク\n* `ip_risk` - IPリスク\n* `database_validation` - データベース検証\n* `networks_same_org` - 同一組織内ネットワーク\n* `networks_cross_org` - 組織横断ネットワーク\n* `biometric_identity` - 生体情報による本人確認"
      },
      "CaseDuplicateCaseLinkCreateRequest": {
        "type": "object",
        "properties": {
          "entity_type": {
            "$ref": "#/components/schemas/CaseDuplicateEntityTypeEnum"
          },
          "entity_uuid": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "entity_type",
          "entity_uuid"
        ]
      },
      "CaseDuplicateStatusEnum": {
        "enum": [
          "OPEN",
          "AWAITING_USER",
          "RESOLVED"
        ],
        "type": "string",
        "description": "* `OPEN` - オープン\n* `AWAITING_USER` - ユーザー対応待ち\n* `RESOLVED` - 解決済み"
      },
      "FraudBandEnum": {
        "enum": [
          "low",
          "medium",
          "high",
          "unknown"
        ],
        "type": "string",
        "description": "* `low` - 低\n* `medium` - 中\n* `high` - 高\n* `unknown` - 不明"
      },
      "CaseDuplicatePriorityEnum": {
        "enum": [
          "LOW",
          "MEDIUM",
          "HIGH"
        ],
        "type": "string",
        "description": "* `LOW` - 低\n* `MEDIUM` - 中\n* `HIGH` - 高"
      },
      "FraudStatusEnum": {
        "enum": [
          "planned",
          "completed",
          "skipped",
          "failed"
        ],
        "type": "string",
        "description": "* `planned` - 予定\n* `completed` - 完了\n* `skipped` - スキップ\n* `failed` - 失敗"
      },
      "FraudCheckInput": {
        "type": "object",
        "properties": {
          "reference": {
            "type": "string",
            "description": "送信された識別子のマスク済みハンドル。"
          },
          "type": {
            "$ref": "#/components/schemas/FraudTypeEnum"
          },
          "namespace": {
            "type": "object",
            "additionalProperties": {}
          },
          "quality": {
            "type": "string"
          },
          "normalization": {
            "type": "object",
            "additionalProperties": {}
          },
          "availability": {
            "$ref": "#/components/schemas/FraudAvailabilityEnum"
          }
        },
        "required": [
          "availability",
          "namespace",
          "normalization",
          "quality",
          "reference",
          "type"
        ]
      },
      "CustomerMessagingPurposesEnum": {
        "enum": [
          "identity_document",
          "proof_of_address",
          "business_document",
          "confirm_details",
          "review_in_progress"
        ],
        "type": "string",
        "description": "* `identity_document` - identity_document\n* `proof_of_address` - proof_of_address\n* `business_document` - business_document\n* `confirm_details` - confirm_details\n* `review_in_progress` - review_in_progress"
      },
      "FraudTypeEnum": {
        "enum": [
          "email",
          "phone",
          "national_id",
          "tax_number",
          "passport_number",
          "driving_licence_number",
          "residence_permit_number",
          "voter_id",
          "external_id"
        ],
        "type": "string",
        "description": "* `email` - メールアドレス\n* `phone` - 電話番号\n* `national_id` - 国民ID番号\n* `tax_number` - 納税者番号\n* `passport_number` - パスポート番号\n* `driving_licence_number` - 運転免許証番号\n* `residence_permit_number` - 在留許可番号\n* `voter_id` - 有権者ID\n* `external_id` - 外部ID"
      },
      "CaseDuplicateCaseSubjectInput": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/CaseDuplicateTypeEnum"
          },
          "uuid": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "type",
          "uuid"
        ]
      },
      "CaseReviewTeamCreate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseReviewTeamMember"
            },
            "maxItems": 250
          },
          "is_active": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "members"
        ]
      },
      "CaseDuplicateCaseDuplicateQueryRequest": {
        "type": "object",
        "properties": {
          "subject": {
            "$ref": "#/components/schemas/CaseDuplicateCaseSubjectInputRequest"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseDuplicateCaseLinkCreateRequest"
            }
          },
          "offset": {
            "type": "integer",
            "maximum": 1000000,
            "minimum": 0,
            "default": 0
          }
        }
      },
      "CaseDuplicateResolutionEnum": {
        "enum": [
          "FALSE_POSITIVE",
          "VALID_THREAT"
        ],
        "type": "string",
        "description": "* `FALSE_POSITIVE` - 誤検知\n* `VALID_THREAT` - 有効な脅威"
      },
      "CasePublicationPolicyDraftWriteRequest": {
        "type": "object",
        "properties": {
          "expected_version": {
            "type": "integer",
            "minimum": 0
          },
          "expected_revision": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "changes": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "changes",
          "expected_revision",
          "expected_version"
        ]
      },
      "FraudCheckSubjectRequest": {
        "type": "object",
        "properties": {
          "selfie": {
            "type": "string",
            "minLength": 1,
            "description": "Base64エンコードされたJPEG、PNGまたはWebP形式のセルフィーで、最大6MBです。参照画像やURLは使用しません。",
            "maxLength": 8388672
          },
          "identifiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudCheckIdentifierRequest"
            },
            "description": "1つ以上の型付き識別子です。1つで十分です。",
            "maxItems": 10,
            "minItems": 1
          },
          "attributes": {
            "$ref": "#/components/schemas/FraudCheckAttributesRequest"
          }
        },
        "required": [
          "identifiers"
        ]
      },
      "RoutingPublicationRoutingCondition": {
        "type": "object",
        "properties": {
          "field": {
            "$ref": "#/components/schemas/RoutingPublicationFieldEnum"
          },
          "operator": {
            "$ref": "#/components/schemas/RoutingPublicationOperatorEnum"
          },
          "value": {}
        },
        "required": [
          "field",
          "operator",
          "value"
        ]
      },
      "CaseActionCaseActionReceipt": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "client_reference": {
            "type": "string",
            "format": "uuid"
          },
          "action": {
            "type": "string",
            "maxLength": 32
          },
          "status": {
            "$ref": "#/components/schemas/CaseActionStatusEnum"
          },
          "result": {},
          "error": {
            "type": "string",
            "maxLength": 255
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "maxLength": 254
          },
          "attempts": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "action",
          "client_reference",
          "created_at",
          "status",
          "updated_at",
          "uuid"
        ]
      },
      "FraudCheckContextRequest": {
        "type": "object",
        "properties": {
          "ip_address": {
            "type": "string",
            "minLength": 1
          },
          "user_agent": {
            "type": "string",
            "maxLength": 512
          },
          "country": {
            "type": "string",
            "description": "対象者が所在すると申告している国。参考情報にすぎず、本人であることの証明には決してなりません。",
            "maxLength": 3
          },
          "purpose": {
            "type": "string",
            "maxLength": 128
          },
          "consent_obtained": {
            "type": "boolean"
          }
        }
      },
      "CustomerMessagingCaseCustomerResponseResult": {
        "type": "object",
        "properties": {
          "responded_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "responded_at"
        ]
      },
      "CustomerMessagingCaseRequestContact": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "verified_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "email",
          "uuid",
          "verified_at"
        ]
      },
      "FraudClientCredentialsForbiddenErrorMessage": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "string",
            "default": "Forbidden - User doesn't have permission"
          }
        }
      },
      "CasePublicationAssignmentMethodEnum": {
        "enum": [
          "MANUAL",
          "AUTOMATIC"
        ],
        "type": "string",
        "description": "* `MANUAL` - 手動\n* `AUTOMATIC` - 自動"
      },
      "CaseDuplicateNullEnum": {
        "enum": [
          null
        ]
      },
      "CustomerMessagingLanguageEnum": {
        "enum": [
          "en",
          "es",
          "pt"
        ],
        "type": "string",
        "description": "* `en` - en\n* `es` - es\n* `pt` - pt"
      },
      "CaseDuplicateCaseFraudSourceContextRequest": {
        "type": "object",
        "properties": {
          "check_id": {
            "type": "string",
            "format": "uuid"
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "source_section": {
            "type": "string",
            "minLength": 1,
            "pattern": "^[A-Z][A-Z0-9_:-]{0,63}$"
          }
        },
        "required": [
          "check_id",
          "request_id",
          "source_section"
        ]
      },
      "FraudCheckPlannedModule": {
        "type": "object",
        "properties": {
          "module": {
            "$ref": "#/components/schemas/FraudExcludeEnum"
          },
          "available": {
            "type": "boolean"
          },
          "availability_reason": {
            "type": "string",
            "nullable": true
          },
          "will_run": {
            "type": "boolean"
          },
          "selection_reason": {
            "type": "string",
            "nullable": true
          },
          "estimated_price": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "availability_reason",
          "available",
          "estimated_price",
          "module",
          "selection_reason",
          "will_run"
        ]
      },
      "CustomerMessagingCaseRequestOptions": {
        "type": "object",
        "properties": {
          "contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerMessagingCaseRequestContact"
            }
          },
          "purposes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerMessagingPurposesEnum"
            }
          },
          "languages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerMessagingLanguagesEnum"
            }
          }
        },
        "required": [
          "contacts",
          "languages",
          "purposes"
        ]
      },
      "CaseCollaborationPaginatedCaseNoteList": {
        "type": "object",
        "required": [
          "count",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "example": 123
          },
          "next": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=400&limit=100"
          },
          "previous": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "example": "http://api.example.org/accounts/?offset=200&limit=100"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseCollaborationCaseNote"
            }
          }
        }
      },
      "FraudProcessingStatusEnum": {
        "enum": [
          "pending",
          "running",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `pending` - 保留中\n* `running` - 実行中\n* `completed` - 完了\n* `failed` - 失敗"
      },
      "CasePublicationCaseBlueprint": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 24
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "assignment_method": {
            "$ref": "#/components/schemas/CasePublicationAssignmentMethodEnum"
          },
          "assignee_pool": {},
          "max_active_cases": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0,
            "nullable": true
          },
          "escalation_enabled": {
            "type": "boolean"
          },
          "escalation_blueprint": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "escalation_blueprint_name": {
            "type": "string",
            "readOnly": true
          },
          "transfer_enabled": {
            "type": "boolean"
          },
          "four_eyes_checker_blueprint": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "four_eyes_checker_blueprint_name": {
            "type": "string",
            "readOnly": true
          },
          "require_resolution_note": {
            "type": "boolean"
          },
          "content_config": {},
          "version": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "default_deadline_hours": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0,
            "nullable": true
          },
          "is_active": {
            "type": "boolean"
          },
          "preset_key": {
            "type": "string",
            "nullable": true,
            "maxLength": 64
          },
          "creation_sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            },
            "readOnly": true
          },
          "receives_escalation_from": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            },
            "readOnly": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "created_at",
          "creation_sources",
          "escalation_blueprint_name",
          "four_eyes_checker_blueprint_name",
          "name",
          "receives_escalation_from",
          "updated_at",
          "uuid"
        ]
      },
      "CaseRoutingRuleUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "priority": {
            "type": "integer",
            "minimum": 0
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseRoutingCondition"
            },
            "maxItems": 20
          },
          "required_skills": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxItems": 25
          },
          "blueprint": {
            "type": "string",
            "format": "uuid"
          },
          "team": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "is_active": {
            "type": "boolean"
          },
          "expected_version": {
            "type": "integer",
            "minimum": 1,
            "writeOnly": true,
            "description": "エディターが開いたバージョン。指定した場合、古いバージョンに基づく書き込みはルールを変更せずに409を返します。"
          }
        }
      },
      "CustomerMessagingCaseRequestPreviewRequest": {
        "type": "object",
        "properties": {
          "contact_id": {
            "type": "string",
            "format": "uuid"
          },
          "purpose": {
            "$ref": "#/components/schemas/CustomerMessagingPurposeEnum"
          },
          "language": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerMessagingLanguageEnum"
              }
            ],
            "default": "en"
          }
        },
        "required": [
          "contact_id",
          "purpose"
        ]
      },
      "CaseDuplicateCaseFraudSourceContext": {
        "type": "object",
        "properties": {
          "check_id": {
            "type": "string",
            "format": "uuid"
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "source_section": {
            "type": "string",
            "pattern": "^[A-Z][A-Z0-9_:-]{0,63}$"
          }
        },
        "required": [
          "check_id",
          "request_id",
          "source_section"
        ]
      },
      "RoutingPublicationOperatorEnum": {
        "enum": [
          "equals",
          "in",
          "contains"
        ],
        "type": "string",
        "description": "* `equals` - equals\n* `in` - in\n* `contains` - contains"
      },
      "CaseRoutingPreview": {
        "type": "object",
        "properties": {
          "rule_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "rule_name": {
            "type": "string",
            "nullable": true
          },
          "rule_version": {
            "type": "integer",
            "nullable": true
          },
          "blueprint_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "team_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "assignee_user_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "reason": {
            "type": "string"
          },
          "candidates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "user_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "eligible": {
                  "type": "boolean"
                },
                "active_cases": {
                  "type": "integer",
                  "nullable": true
                },
                "reason": {
                  "type": "string",
                  "nullable": true
                }
              }
            }
          },
          "matched_rules": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "priority": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "FraudDimensionEnum": {
        "enum": [
          "identity",
          "contact",
          "device_network",
          "behavioral",
          "fraud_network"
        ],
        "type": "string",
        "description": "* `identity` - 本人情報\n* `contact` - 連絡先\n* `device_network` - デバイス・ネットワーク\n* `behavioral` - 行動\n* `fraud_network` - 不正ネットワーク"
      },
      "FraudBadRequestErrorMessage": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "string",
            "default": "Bad Request - Invalid request data"
          }
        }
      },
      "FraudNextActionEnum": {
        "enum": [
          "none",
          "manual_review",
          "step_up",
          "resubmit_capture"
        ],
        "type": "string",
        "description": "* `none` - なし\n* `manual_review` - 手動レビュー\n* `step_up` - ステップアップ\n* `resubmit_capture` - 撮影の再提出"
      },
      "RoutingPublicationPolicyDraftPreconditionRequest": {
        "type": "object",
        "properties": {
          "expected_version": {
            "type": "integer",
            "minimum": 0
          },
          "expected_revision": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "required": [
          "expected_revision",
          "expected_version"
        ]
      },
      "FraudCheckRisk": {
        "type": "object",
        "properties": {
          "dimension": {
            "$ref": "#/components/schemas/FraudDimensionEnum"
          },
          "score": {
            "type": "integer",
            "nullable": true
          },
          "band": {
            "$ref": "#/components/schemas/FraudBandEnum"
          },
          "availability": {
            "$ref": "#/components/schemas/FraudAvailabilityEnum"
          },
          "requested_but_unavailable": {
            "type": "boolean",
            "description": "このディメンションに必要な情報がすべてリクエストで提供されたにもかかわらず、プラットフォームが回答できなかった場合はtrue。このようなチェックが、回答が得られた他のディメンションの結果を根拠に承認を推奨されることはありません。"
          },
          "reason_codes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "evidence_indexes": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "required": [
          "availability",
          "band",
          "dimension",
          "evidence_indexes",
          "reason_codes",
          "requested_but_unavailable",
          "score"
        ]
      },
      "CaseDuplicateSourceEnum": {
        "enum": [
          "MANUAL",
          "AML_SCREENING",
          "TRANSACTION_RULE",
          "WORKFLOW_BUILDER"
        ],
        "type": "string",
        "description": "* `MANUAL` - 手動\n* `AML_SCREENING` - AMLスクリーニング\n* `TRANSACTION_RULE` - 取引ルール\n* `WORKFLOW_BUILDER` - ワークフロービルダー"
      },
      "CaseCollaborationPatchedCaseNoteUpdateRequest": {
        "type": "object",
        "properties": {
          "is_pinned": {
            "type": "boolean"
          }
        }
      },
      "CustomerMessagingPurposeEnum": {
        "enum": [
          "identity_document",
          "proof_of_address",
          "business_document",
          "confirm_details",
          "review_in_progress"
        ],
        "type": "string",
        "description": "* `identity_document` - identity_document\n* `proof_of_address` - proof_of_address\n* `business_document` - business_document\n* `confirm_details` - confirm_details\n* `review_in_progress` - review_in_progress"
      },
      "CaseDuplicateTypeEnum": {
        "enum": [
          "user",
          "business"
        ],
        "type": "string",
        "description": "* `user` - user\n* `business` - business"
      },
      "CaseCollaborationCaseNoteCreateRequest": {
        "type": "object",
        "properties": {
          "comment": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "reply_to": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "client_reference": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "mentioned_emails": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "email",
              "minLength": 1
            }
          },
          "is_internal": {
            "type": "boolean",
            "default": false
          },
          "attachments": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        },
        "required": [
          "comment"
        ]
      },
      "CustomerMessagingLanguagesEnum": {
        "enum": [
          "en",
          "es",
          "pt"
        ],
        "type": "string",
        "description": "* `en` - en\n* `es` - es\n* `pt` - pt"
      },
      "CustomerMessagingCaseRequestConfirmRequest": {
        "type": "object",
        "properties": {
          "contact_id": {
            "type": "string",
            "format": "uuid"
          },
          "purpose": {
            "$ref": "#/components/schemas/CustomerMessagingPurposeEnum"
          },
          "language": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerMessagingLanguageEnum"
              }
            ],
            "default": "en"
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "preview_token": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          }
        },
        "required": [
          "contact_id",
          "expires_at",
          "preview_token",
          "purpose",
          "request_id"
        ]
      },
      "CaseRoutingRule": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "priority": {
            "type": "integer",
            "minimum": 0
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseRoutingCondition"
            },
            "maxItems": 20
          },
          "required_skills": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxItems": 25
          },
          "blueprint": {
            "type": "string",
            "format": "uuid"
          },
          "team": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "is_active": {
            "type": "boolean"
          },
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "version": {
            "type": "integer",
            "readOnly": true
          },
          "blueprint_name": {
            "type": "string",
            "readOnly": true
          },
          "team_name": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        }
      },
      "FraudResultEnum": {
        "enum": [
          "match",
          "mismatch",
          "inconclusive",
          "no_reference"
        ],
        "type": "string",
        "description": "* `match` - 一致\n* `mismatch` - 不一致\n* `inconclusive` - 判定不能\n* `no_reference` - 参照データなし"
      },
      "CaseRoutingRuleCreate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "priority": {
            "type": "integer",
            "minimum": 0
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseRoutingCondition"
            },
            "maxItems": 20
          },
          "required_skills": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxItems": 25
          },
          "blueprint": {
            "type": "string",
            "format": "uuid"
          },
          "team": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "is_active": {
            "type": "boolean"
          },
          "publish": {
            "type": "boolean",
            "writeOnly": true,
            "description": "falseに設定すると、一度も公開されていない下書きとして保存します。下書きが明示的に公開されるまで、レコードはバージョン0のまま非アクティブです。このフィールドを省略すると、既存の連携に向けて即時作成の動作が維持されます。"
          }
        },
        "required": [
          "name",
          "conditions",
          "blueprint"
        ]
      },
      "FraudCheckIdentifierRequest": {
        "type": "object",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FraudTypeEnum"
              }
            ],
            "description": "識別子の種類。必須となるネームスペースのフィールドを決定します。\n\n* `email` - メールアドレス\n* `phone` - 電話番号\n* `national_id` - 国民ID\n* `tax_number` - 納税者番号\n* `passport_number` - パスポート番号\n* `driving_licence_number` - 運転免許証番号\n* `residence_permit_number` - 在留許可番号\n* `voter_id` - 有権者ID\n* `external_id` - 外部ID"
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "description": "識別子の値です。一般的に使われる任意の形式で指定できます。",
            "maxLength": 255
          },
          "country": {
            "type": "string",
            "description": "ISO-3166 alpha-2またはalpha-3形式の発行国。政府発行の識別子タイプでは必須です。同じ番号でも、国が異なれば別の人物を指すためです。",
            "maxLength": 3
          },
          "issuer": {
            "type": "string",
            "description": "国だけでは一意に特定できない場合に指定する、任意の発行機関または国より下位の発行者です。",
            "maxLength": 128
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "CaseActionActionEnum": {
        "enum": [
          "set_status",
          "add_tags",
          "add_note",
          "add_to_blocklist"
        ],
        "type": "string",
        "description": "* `set_status` - set_status\n* `add_tags` - add_tags\n* `add_note` - add_note\n* `add_to_blocklist` - add_to_blocklist"
      },
      "CaseActionCaseActionReceiptPage": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer"
          },
          "next_offset": {
            "type": "integer",
            "nullable": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CaseActionCaseActionReceipt"
            }
          }
        },
        "required": [
          "count",
          "next_offset",
          "results"
        ]
      },
      "CaseActionCaseEntityActionResult": {
        "type": "object",
        "properties": {
          "receipt": {
            "$ref": "#/components/schemas/CaseActionCaseActionReceipt"
          },
          "entity_type": {
            "$ref": "#/components/schemas/CaseActionEntityTypeEnum"
          },
          "entity_uuid": {
            "type": "string",
            "format": "uuid"
          },
          "action": {
            "type": "string"
          },
          "previous_status": {
            "type": "string"
          },
          "new_status": {
            "type": "string"
          },
          "tags_added": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "comment_uuid": {
            "type": "string",
            "format": "uuid"
          },
          "blocklisted": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CustomerMessagingCaseRequest": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "purpose": {
            "type": "string",
            "readOnly": true
          },
          "language": {
            "type": "string",
            "readOnly": true
          },
          "recipient": {
            "type": "string",
            "format": "email",
            "readOnly": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "readOnly": true,
            "nullable": true
          },
          "delivery_status": {
            "type": "string",
            "readOnly": true
          },
          "delivered_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "nullable": true
          },
          "cancelled_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "nullable": true
          },
          "responded_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "nullable": true
          },
          "response": {
            "readOnly": true,
            "nullable": true
          },
          "has_attachment": {
            "type": "boolean",
            "readOnly": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "actor_email",
          "cancelled_at",
          "created_at",
          "delivered_at",
          "delivery_status",
          "expires_at",
          "has_attachment",
          "language",
          "purpose",
          "recipient",
          "responded_at",
          "response",
          "uuid"
        ]
      },
      "CustomerMessagingCaseRequestPublic": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "purpose": {
            "$ref": "#/components/schemas/CustomerMessagingPurposeEnum"
          },
          "language": {
            "$ref": "#/components/schemas/CustomerMessagingLanguageEnum"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "responded_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "copy": {
            "type": "object",
            "additionalProperties": {}
          },
          "organization_name": {
            "type": "string"
          },
          "is_white_label": {
            "type": "boolean"
          },
          "customization": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true
          }
        },
        "required": [
          "copy",
          "customization",
          "expires_at",
          "is_white_label",
          "language",
          "organization_name",
          "purpose",
          "request_id",
          "responded_at"
        ]
      },
      "RoutingPublicationFieldEnum": {
        "enum": [
          "source",
          "priority",
          "tags"
        ],
        "type": "string",
        "description": "* `source` - source\n* `priority` - priority\n* `tags` - tags"
      },
      "RoutingPublicationCaseRoutingRule": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "priority": {
            "type": "integer",
            "maximum": 2147483647,
            "minimum": 0
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingPublicationRoutingCondition"
            }
          },
          "required_skills": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxItems": 25
          },
          "blueprint": {
            "type": "string",
            "format": "uuid"
          },
          "blueprint_name": {
            "type": "string",
            "readOnly": true
          },
          "team": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "team_name": {
            "type": "string",
            "readOnly": true
          },
          "is_active": {
            "type": "boolean"
          },
          "version": {
            "type": "integer",
            "readOnly": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          }
        },
        "required": [
          "blueprint",
          "blueprint_name",
          "conditions",
          "created_at",
          "name",
          "team_name",
          "updated_at",
          "uuid",
          "version"
        ]
      },
      "CaseActionStatusEnum": {
        "enum": [
          "APPLIED",
          "FAILED"
        ],
        "type": "string",
        "description": "* `APPLIED` - 適用済み\n* `FAILED` - 失敗"
      },
      "FraudCheckModuleSelectionRequest": {
        "type": "object",
        "properties": {
          "include": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudExcludeEnum"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FraudExcludeEnum"
            }
          }
        }
      },
      "SignatureField": {
        "type": "object",
        "description": "セッション書類に配置するフィールド。どの署名者が、どのように、どこに入力するかを指定します。位置(`page`、`x`、`y`、`width`、`height`)または`anchor`のいずれかを指定してください。位置は、表示されたページの左上隅を起点とするページに対する割合で、小数点以下4桁に丸められます。フィールドはページ内に収まる必要があります。1つの書類には最大200個、1人の署名者には最大500個のフィールドを設定でき、書類上にフィールドを持つすべての役割には、その書類上に`signature`または`initials`フィールドが必要です。[書類上のフィールド](/ja/core-technology/electronic-signature/overview#書類上のフィールド)を参照してください。",
        "required": [
          "key",
          "type"
        ],
        "properties": {
          "key": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "description": "結果および`sign.field_values`におけるフィールドの名前になります。書類内で一意です。"
          },
          "type": {
            "type": "string",
            "enum": [
              "signature",
              "initials",
              "full_name",
              "date_signed",
              "text",
              "checkbox",
              "email",
              "data"
            ],
            "description": "フィールドが保持する内容です。署名者は採用した`signature`と`initials`を適用し、`text`を入力し、`checkbox`にチェックを入れ、セッションに認証済みのメールアドレスがない場合は`email`を入力します。Diditは`full_name`（認証済みの氏名）、`date_signed`（署名者のタイムゾーンでの署名日）、`data`（`prefill`から取得）、認証済みの`email`を入力し、読み取り専用で表示します。日付選択の種類はありません。`text`を使用してください。"
          },
          "role": {
            "type": "string",
            "enum": [
              "verified_person",
              "legal_representative",
              "key_people"
            ],
            "description": "フィールドに入力する人。`signature_signer`の値で指定します。ステップは自身の署名者のフィールドのみ入力・押印します。デフォルトはステップの署名者です。"
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "ページ番号（1から書類のページ数まで）。Word文書の場合は、変換後のPDFのページです。"
          },
          "x": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "左端。ページ幅に対する割合で表します。"
          },
          "y": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "ページの高さに対する割合で表した上端。"
          },
          "width": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 1,
            "description": "幅。ページ幅に対する割合で指定します。署名の幅は最低`0.12`です。"
          },
          "height": {
            "type": "number",
            "minimum": 0.012,
            "maximum": 1,
            "description": "高さです。ページの高さに対する比率で指定します。署名の高さは最低`0.035`です。"
          },
          "anchor": {
            "$ref": "#/components/schemas/SignatureFieldAnchor"
          },
          "required": {
            "type": "boolean",
            "description": "`signature` and `initials` are required unless you set `false`. `full_name`, `date_signed` and `data` are always required. The signer can't finish a document until its required fields have a value, and a required checkbox must be ticked."
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "署名者と結果に表示されます。デフォルト値はタイプから設定されます。"
          },
          "placeholder": {
            "type": "string",
            "nullable": true,
            "maxLength": 80,
            "description": "`text`と`email`のみです。"
          },
          "validation": {
            "$ref": "#/components/schemas/SignatureFieldValidation"
          },
          "prefill": {
            "type": "string",
            "nullable": true,
            "description": "値の取得元です。`identity.full_name`、`identity.first_name`、`identity.last_name`、`identity.date_of_birth`（`DD/MM/YYYY`）、`identity.nationality`、`identity.document_number`、`identity.document_type`、`identity.issuing_country`、`identity.address`、`contact.email`、`contact.phone`、`company.name`、`company.registration_number`、`company.address`、`company.country`（KYB）、`session.vendor_data`、`metadata.<key>`（セッションの`metadata`のキー）、または`api.<key>`（`sign.field_values`のキー）のいずれかです。`data`では必須です。`full_name`は常に`identity.full_name`を、`email`は`contact.email`を使用します。`data`、`full_name`、および検証済みの`email`フィールドの値は、署名者が署名を開始した時点で確定します。"
          },
          "editable_when_prefilled": {
            "type": "boolean",
            "default": false,
            "description": "`text`と`email`のみです。署名者は事前入力された値を変更できます。"
          },
          "checked_by_default": {
            "type": "boolean",
            "default": false,
            "description": "`checkbox`のみ：ボックスは最初からチェックされた状態になります。"
          },
          "date_format": {
            "type": "string",
            "enum": [
              "DD/MM/YYYY",
              "MM/DD/YYYY",
              "YYYY-MM-DD",
              "D MMMM YYYY"
            ],
            "default": "DD/MM/YYYY",
            "description": "`date_signed`のみ。"
          }
        }
      },
      "SessionSignDocument": {
        "type": "object",
        "required": [
          "file_name",
          "content_base64"
        ],
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "署名者に表示されるタイトル。デフォルトは`file_name`です。"
          },
          "file_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "`.pdf`または`.docx`で終わるファイル名。"
          },
          "content_base64": {
            "type": "string",
            "format": "byte",
            "description": "ファイルをbase64エンコードしたものです。PDFは最大20MB・100ページまでで、パスワード、スクリプト、添付ファイルを含まないものに限ります。Wordファイル（`.docx`）は最大20MBまでで、リクエストの処理中に最大25秒でPDFに変換されます。変換後のPDFにも同じ制限が適用されます。Wordファイルはセッション1件あたり最大5件です。マクロ、変更履歴、外部コンテンツへのリンク、埋め込みオブジェクトを含むWordファイルは`signature_document_not_supported`で拒否され、変換できないファイルは`signature_document_conversion_failed`を返します。いずれも`reason`が付きます。"
          },
          "fields": {
            "type": "array",
            "description": "この書類に配置する任意のフィールドです（最大200件）。ページと位置はPDFを基準とし、Wordファイルの場合は変換後のPDFを基準とします。フィールドがない場合、署名者は書類を読んで同意します。",
            "items": {
              "$ref": "#/components/schemas/SignatureField"
            },
            "maxItems": 200
          }
        }
      },
      "SignatureResult": {
        "type": "object",
        "description": "1つの電子署名ステップにおける署名者1名の結果です。[電子署名レポート](/ja/core-technology/electronic-signature/report-electronic-signature)を参照してください。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "この署名者の証跡をダウンロードする場合や署名を検証する場合は、これを`signature_id`として渡します。"
          },
          "node_id": {
            "type": "string",
            "description": "これを生成したワークフローのステップ。"
          },
          "status": {
            "type": "string",
            "enum": [
              "intro",
              "review",
              "code",
              "signing",
              "signed",
              "declined"
            ],
            "description": "ステップ内での署名者の状況です。書類が署名済みであることを意味するのは`signed`のみです。"
          },
          "verdict": {
            "type": "string",
            "enum": [
              "Not Finished",
              "Approved",
              "In Review",
              "Declined"
            ],
            "description": "ステップの結果。警告はそのルールを通じて結果を設定し、カスタムステータスルールはその後に適用されます。"
          },
          "level": {
            "type": "string",
            "enum": [
              "simple",
              "aes",
              "qes"
            ],
            "description": "`simple`（デフォルト）または`aes`です。`qes`（適格電子署名、QES）はアドオンで、まだ提供されていません。"
          },
          "format": {
            "type": "string",
            "enum": [
              "pdf",
              "pades"
            ],
            "description": "Simple署名の場合は`pdf`、Advanced（AES）の場合は`pades`です。"
          },
          "profile": {
            "type": "string",
            "nullable": true,
            "description": "高度電子署名（AES）が署名されると`PAdES-B-LT`、それ以外はnullです。"
          },
          "signer": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "description": "署名者の氏名。検証済みの氏名（承認済みの本人確認またはセッションから取得）ですが、検証済みのセッション名がないSimpleレベルの場合は例外で、署名者が入力した氏名となり、検証されていません。"
              },
              "capacity": {
                "type": "string",
                "enum": [
                  "self",
                  "company"
                ]
              },
              "company": {
                "type": "string",
                "nullable": true
              },
              "role": {
                "type": "string",
                "nullable": true,
                "description": "申告された主要人物の役職です。"
              },
              "roles": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "企業について申告された主要人物の構造化された役割です。"
              },
              "identity_session_id": {
                "type": "string",
                "format": "uuid",
                "description": "署名者を検証したKYCセッション。"
              }
            }
          },
          "identity_used": {
            "type": "object",
            "description": "署名の根拠となる検証済みの本人情報。検証済みの本人情報がないSimple署名の場合は空です。",
            "properties": {
              "session_id": {
                "type": "string",
                "format": "uuid"
              },
              "kyc_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true
              },
              "verified": {
                "type": "boolean"
              },
              "expected_name": {
                "type": "string",
                "nullable": true,
                "description": "署名者が一致する必要があった名前です。"
              }
            }
          },
          "certificate": {
            "type": "object",
            "nullable": true,
            "description": "書類の署名に使用された証明書。署名されるまでは`null`で、Simple署名の場合は常に`null`です。",
            "properties": {
              "issuer": {
                "type": "string"
              },
              "issued_to": {
                "type": "string"
              },
              "serial": {
                "type": "string",
                "description": "シリアル番号（16進数）。"
              },
              "valid_from": {
                "type": "string",
                "format": "date-time"
              },
              "valid_until": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "confirmation": {
            "type": "object",
            "properties": {
              "channel": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "email",
                  "sms"
                ],
                "description": "Simple署名の場合は、コードがないため`null`です。"
              },
              "destination": {
                "type": "string",
                "nullable": true,
                "description": "コードの送信先となった、マスク済みの連絡先です。"
              },
              "confirmed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "attempts": {
                "type": "integer",
                "description": "入力されたコード（正しいコードを含む）。"
              }
            }
          },
          "timestamp": {
            "type": "object",
            "nullable": true,
            "description": "署名に含まれるRFC 3161タイムスタンプで、Diditが発行します。署名されるまでは`null`で、Simple署名では常に`null`です。",
            "properties": {
              "time": {
                "type": "string",
                "format": "date-time"
              },
              "qualified": {
                "type": "boolean",
                "description": "AESの場合は常に`false`です。"
              },
              "valid": {
                "type": "boolean"
              }
            }
          },
          "documents": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "この署名者のコピーにある書類です。署名済みファイルのダウンロードに使用します。"
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "description": "`id`と同じ。"
                },
                "title": {
                  "type": "string"
                },
                "file_name": {
                  "type": "string"
                },
                "pages": {
                  "type": "integer",
                  "description": "署名された書類のページ。Wordの場合は、変換後のPDFのページです。"
                },
                "size_bytes": {
                  "type": "integer"
                },
                "sha256_original": {
                  "type": "string",
                  "description": "署名者に表示された時点の書類のSHA-256。"
                },
                "sha256_signed": {
                  "type": "string",
                  "nullable": true,
                  "description": "署名後の、署名済みPDFのSHA-256。"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "signed",
                    "declined",
                    "not_signed",
                    "not_reached"
                  ],
                  "description": "`not_signed`: 開かれましたが署名されていません。`not_reached`: 一度も開かれていません。"
                },
                "opened_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                },
                "read_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "ステップで必須とされている場合に、署名者がフィールドのない書類の最後まで到達した日時。"
                },
                "read_to_end": {
                  "type": "boolean"
                },
                "consented_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "署名者がフィールドのない書類に同意した日時、またはフィールドのある書類のフィールドへの入力を完了した日時。"
                },
                "consent": {
                  "type": "boolean"
                },
                "signed_file": {
                  "type": "string",
                  "nullable": true,
                  "description": "署名後の署名済みPDFのパス。[署名済み書類をダウンロード](/ja/sessions-api/electronic-signature/download-signed-document)を参照してください。"
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "fields",
                    "read_and_agree"
                  ],
                  "description": "フィールドがある書類の場合は`fields`、フィールドがない書類の場合は`read_and_agree`。"
                },
                "source_format": {
                  "type": "string",
                  "enum": [
                    "pdf",
                    "docx"
                  ],
                  "description": "`pdf`、またはDiditがPDFに変換したWord文書の場合は`docx`です。"
                },
                "conversion": {
                  "type": "object",
                  "nullable": true,
                  "description": "PDFの場合は`null`です。Word文書の場合は、元のファイルと変換後のファイルです。",
                  "properties": {
                    "from": {
                      "type": "string",
                      "enum": [
                        "docx"
                      ]
                    },
                    "file_name": {
                      "type": "string",
                      "description": "元のWordファイル名です。"
                    },
                    "sha256": {
                      "type": "string",
                      "description": "元のWordファイルのSHA-256。"
                    },
                    "size_bytes": {
                      "type": "integer",
                      "description": "元のWordファイルのサイズ。"
                    },
                    "converter": {
                      "type": "string",
                      "description": "PDFを生成したコンバーターのバージョン。"
                    }
                  }
                },
                "fields": {
                  "type": "array",
                  "description": "書類のフィールドとその値。フィールドのない書類では空です。",
                  "items": {
                    "$ref": "#/components/schemas/SignatureFieldResult"
                  }
                }
              }
            }
          },
          "adopted_signature": {
            "type": "object",
            "nullable": true,
            "description": "署名者が署名フィールドとイニシャルフィールド用に採用した署名とイニシャル。署名者が採用するまでは`null`です。",
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "typed",
                  "drawn"
                ],
                "description": "`typed`：認証済みの氏名を手書き風の書体で表示したもの。`drawn`：指またはマウスで描いたもの。"
              },
              "font": {
                "type": "string",
                "nullable": true,
                "description": "入力した署名の筆跡スタイルです。手書きの場合は`null`です。"
              },
              "adopted_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "electronic_signature_consent_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "署名者がレビュー画面で、書類に電子的に署名することに同意した日時。いずれかの書類にフィールドがある場合に設定されます。"
          },
          "evidence_file": {
            "type": "string",
            "nullable": true,
            "description": "署名後の証跡PDFのパス。[署名の証跡をダウンロード](/ja/sessions-api/electronic-signature/download-evidence)を参照してください。"
          },
          "warnings": {
            "type": "array",
            "description": "この署名者に対して発生した警告。[電子署名の警告](/ja/core-technology/electronic-signature/warnings-electronic-signature)を参照してください。",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "enum": [
                    "SIGNATURE_DECLINED",
                    "SIGNATURE_OTP_FAILED",
                    "SIGNATURE_NAME_MISMATCH",
                    "SIGNATURE_IDENTITY_NOT_VERIFIED",
                    "SIGNATURE_DOCUMENT_CHANGED",
                    "SIGNATURE_FIELD_DATA_MISSING"
                  ]
                },
                "node_id": {
                  "type": "string"
                }
              }
            }
          },
          "validation": {
            "type": "object",
            "nullable": true,
            "description": "署名済み書類の最後の暗号学的チェックです。書類が署名されるまでは`null`です。Diditが署名の結果を確認できない場合は`{\"valid\": null, \"reason\": \"signature_provider_outcome_unknown\", \"checked_at\": ...}`となり、`status`は`signing`のままです。この場合は未署名として扱ってください。",
            "properties": {
              "valid": {
                "type": "boolean",
                "nullable": true,
                "description": "すべての書類が有効な場合は`true`です。署名の結果を確認できなかった場合は`null`です。"
              },
              "reason": {
                "type": "string",
                "description": "`valid`が`null`の場合に設定されます：`signature_provider_outcome_unknown`。"
              },
              "checked_at": {
                "type": "string",
                "format": "date-time"
              },
              "documents": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "checked_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "valid": {
                      "type": "boolean",
                      "description": "署名とタイムスタンプがともに有効かつ信頼できる場合は`true`です。"
                    },
                    "integrity": {
                      "type": "boolean",
                      "description": "署名後に書類が変更されていない場合は`true`です。"
                    },
                    "trusted": {
                      "type": "boolean",
                      "description": "署名証明書が信頼されたルートまでチェーンしている場合は`true`です。"
                    },
                    "revoked": {
                      "type": "boolean"
                    },
                    "trusted_list": {
                      "type": "object",
                      "description": "EUトラステッドリストのチェック。AESの場合：`{\"status\": \"not_applicable\", \"reason\": \"aes_not_qualified\"}`。",
                      "properties": {
                        "status": {
                          "type": "string"
                        },
                        "reason": {
                          "type": "string"
                        }
                      }
                    },
                    "certificate": {
                      "type": "object",
                      "nullable": true,
                      "description": "書類の署名に使用された証明書。署名されるまでは`null`で、Simple署名の場合は常に`null`です。",
                      "properties": {
                        "issuer": {
                          "type": "string"
                        },
                        "issued_to": {
                          "type": "string"
                        },
                        "serial": {
                          "type": "string",
                          "description": "シリアル番号（16進数）。"
                        },
                        "valid_from": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "valid_until": {
                          "type": "string",
                          "format": "date-time"
                        }
                      }
                    },
                    "timestamp": {
                      "type": "object",
                      "nullable": true,
                      "description": "署名に含まれるRFC 3161タイムスタンプで、Diditが発行します。署名されるまでは`null`で、Simple署名では常に`null`です。",
                      "properties": {
                        "time": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "qualified": {
                          "type": "boolean",
                          "description": "AESの場合は常に`false`です。"
                        },
                        "valid": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "declined_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "declined_action": {
            "type": "string",
            "enum": [
              "DECLINE",
              "REVIEW",
              "NO_ACTION"
            ]
          },
          "signed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "署名リンクが機能しなくなる日時。"
          },
          "email_sent_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "email_unavailable_reason": {
            "type": "string",
            "nullable": true
          },
          "ip_address": {
            "type": "string",
            "nullable": true,
            "description": "署名者がコードをリクエストしたときのIPアドレス。"
          },
          "place": {
            "type": "string",
            "nullable": true,
            "description": "収集されません: 常に`null`です。"
          },
          "place_unavailable_reason": {
            "type": "string",
            "nullable": true,
            "enum": [
              "not_collected"
            ]
          }
        }
      },
      "SignatureFieldValidation": {
        "type": "object",
        "nullable": true,
        "description": "`text`フィールドの値に対するルール。コンソールのプレビュー、署名フロー、APIはすべて同じルールを適用します。",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "any",
              "letters",
              "number",
              "email",
              "pattern"
            ],
            "description": "`letters`: 任意の文字体系の文字、スペース、ハイフン、アポストロフィ。`number`: 数字（小数点区切り文字は任意）。`pattern`: 値が`pattern`に一致する必要があります。"
          },
          "min_length": {
            "type": "integer",
            "minimum": 0,
            "maximum": 500,
            "description": "`0`から`max_length`まで。"
          },
          "max_length": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "default": 120
          },
          "pattern": {
            "type": "string",
            "nullable": true,
            "minLength": 1,
            "maxLength": 200,
            "description": "`kind: \"pattern\"`の場合は必須です。値全体が一致する必要がある正規表現です。先読み・後読みと後方参照はサポートされていません。"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "maxLength": 120,
            "description": "デフォルトのエラーの代わりに署名者に表示されます。"
          }
        }
      },
      "SignatureFieldAnchor": {
        "type": "object",
        "description": "位置ではなく、書類内のテキストを基準にフィールドを配置します。DiditはPDFからそのテキストを削除しないため、ページの背景と同じ色で記述してください。テキストが見つからない場合、呼び出しは`field_anchor_not_found`とともに`400`を返します。[アンカーテキストでフィールドを配置する](/ja/sessions-api/create-session#アンカーテキストでフィールドを配置する)を参照してください。",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "書類内で検索するテキスト。Wordファイルの場合は、変換後のPDF内で検索します。"
          },
          "occurrence": {
            "type": "string",
            "enum": [
              "first",
              "all"
            ],
            "default": "first",
            "description": "`all`は一致ごとに1つのフィールドを配置します。最初のキー以降には`_2`、`_3`などが付きます。"
          },
          "offset_x": {
            "type": "number",
            "description": "テキストの左端に加算される値で、ページ幅に対する割合で表します。"
          },
          "offset_y": {
            "type": "number",
            "description": "テキストの上端に加算される値で、ページの高さに対する割合で表します。"
          },
          "width": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 1,
            "description": "フィールドの幅。ページ幅に対する割合で指定します。"
          },
          "height": {
            "type": "number",
            "minimum": 0.012,
            "maximum": 1,
            "description": "フィールドの高さです。ページの高さに対する比率で指定します。"
          }
        }
      },
      "SignatureFieldResult": {
        "type": "object",
        "description": "署名済み書類のフィールドと、この署名者のコピー上での値。[フィールド](/ja/core-technology/electronic-signature/report-electronic-signature#フィールド)を参照してください。",
        "properties": {
          "key": {
            "type": "string",
            "description": "`sign.field_values`で使用するフィールドのキーです。"
          },
          "type": {
            "type": "string",
            "enum": [
              "signature",
              "initials",
              "full_name",
              "date_signed",
              "text",
              "checkbox",
              "email",
              "data"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "verified_person",
              "legal_representative",
              "key_people"
            ]
          },
          "label": {
            "type": "string"
          },
          "page": {
            "type": "integer",
            "description": "ページ番号（1から）。Word文書の場合は、変換後のPDFのページです。"
          },
          "x": {
            "type": "number",
            "description": "左端。ページ幅に対する割合で表します。"
          },
          "y": {
            "type": "number",
            "description": "ページの高さに対する割合で表した上端。"
          },
          "width": {
            "type": "number",
            "description": "幅。ページ幅に対する割合で指定します。"
          },
          "height": {
            "type": "number",
            "description": "高さです。ページの高さに対する比率で指定します。"
          },
          "required": {
            "type": "boolean"
          },
          "value": {
            "nullable": true,
            "description": "`text`、`email`、`full_name`、`date_signed`、`data`では文字列、`checkbox`ではブール値、署名またはイニシャルが適用されている場合は`true`です。空の場合は`null`です。"
          },
          "display_value": {
            "type": "string",
            "nullable": true,
            "description": "ページに刻印された値。日付はフィールドの`date_format`形式、チェックボックスは`Yes`または`No`、署名またはイニシャルは`Signed`です。"
          },
          "value_source": {
            "type": "string",
            "nullable": true,
            "enum": [
              "signer",
              "identity",
              "contact",
              "company",
              "session",
              "metadata",
              "api",
              "signing_time",
              null
            ],
            "description": "値の出所です。`signer`（署名者が入力、チェック、または適用したもの）、`identity`（検証済みのID）、`contact`（検証済みのメールアドレスまたは電話番号）、`company`（検証済みの企業）、`session`（`vendor_data`）、`metadata`、`api`（`sign.field_values`）、または`signing_time`（署名日）のいずれかです。"
          },
          "filled_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "image_url": {
            "type": "string",
            "nullable": true,
            "description": "署名とイニシャルのみ：適用された画像のパス。[署名画像をダウンロードする](/ja/sessions-api/electronic-signature/download-field-image)を参照してください。"
          },
          "value_unavailable_reason": {
            "type": "string",
            "nullable": true,
            "enum": [
              "source_empty",
              null
            ],
            "description": "事前入力フィールドの値がセッション内になく、`signature_field_data_missing_action`により署名者がそのまま署名できた場合は`source_empty`です。"
          }
        }
      },
      "VaspDirectoryWidgetEntry": {
        "type": "object",
        "description": "エンドユーザーのVASP選択画面に表示される内容です。VASPが誰であるか、また到達可能かどうかを示します。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "GET /v3/travel-rule/vasps/{vasp_id}/で使用するエントリのIDです。"
          },
          "kind": {
            "type": "string",
            "enum": [
              "directory",
              "didit"
            ],
            "description": "directoryは共有ディレクトリのエントリ、diditはDiditネットワークのメンバーを示します。"
          },
          "name": {
            "type": "string"
          },
          "lei": {
            "type": "string"
          },
          "jurisdiction": {
            "type": "string",
            "description": "ソースが提供するとおりのISO 3166国コード。"
          },
          "domains": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "VASPのWebドメインです。Diditネットワークのメンバーでは常に空です。"
          },
          "reachable": {
            "type": "boolean",
            "description": "アプリケーションからこのVASP、またはブランドの場合はそのエンティティのいずれかへの利用可能なルートがあるかどうか。Diditネットワークのメンバーであれば常にtrueです。"
          }
        }
      },
      "TravelRuleDataSharingFields": {
        "type": "object",
        "description": "Diditが自社ユーザーについて取引相手のVASPに送信するフィールドを、エンティティタイプごとに指定します。`name`と`wallet_address`は、リストの内容にかかわらず常に送信されます。一度も選択していないエンティティタイプでは、すべてのフィールドが共有されます。空のリストも選択の一つであり、その場合は名前とウォレットのみが共有されます。",
        "properties": {
          "individual": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "name",
                "wallet_address",
                "address",
                "national_id",
                "customer_identification",
                "date_of_birth",
                "place_of_birth"
              ]
            },
            "description": "自然人について共有されるフィールド。"
          },
          "company": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "name",
                "wallet_address",
                "address",
                "national_id",
                "customer_identification"
              ]
            },
            "description": "法人について共有されるフィールド。"
          }
        }
      },
      "TravelRuleMatchingRules": {
        "type": "object",
        "description": "取引相手のデータの各フィールドを、保有しているデータとどの程度厳密に比較するか（エンティティ種別ごと）。指定しなかったフィールドはデフォルトのままです。`NONE`は比較をスキップし、`STRICT`は完全に同じ単語を必要とし、`CONTAINS`は一方の値の単語がすべてもう一方に含まれる場合に一致とみなし、`DEFAULT`は標準のサブセット一致、`FUZZY`は近い綴り（生年月日の場合は日と月の入れ替わりも）を許容します。",
        "properties": {
          "individual": {
            "type": "object",
            "description": "自然人に対するルール。",
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "デフォルト：`name_matching_strictness`に従います。"
              },
              "date_of_birth": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "デフォルトは`NONE`。"
              },
              "address": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "デフォルトは`NONE`。"
              },
              "account": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "交換のルーティングに使用されたウォレット。デフォルトは`STRICT`。"
              }
            }
          },
          "company": {
            "type": "object",
            "description": "法人に対するルール。",
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "デフォルト：`name_matching_strictness`に従います。"
              },
              "address": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "デフォルトは`NONE`。"
              },
              "account": {
                "type": "string",
                "enum": [
                  "NONE",
                  "STRICT",
                  "CONTAINS",
                  "DEFAULT",
                  "FUZZY"
                ],
                "description": "交換のルーティングに使用されたウォレット。デフォルトは`STRICT`。"
              }
            }
          }
        }
      },
      "TravelRuleDataMatch": {
        "type": "object",
        "nullable": true,
        "description": "送金の当事者データと、相手側がウォレット保有者について把握している情報とのフィールドごとの比較。フィールド名と結果のみを示し、値は一切含まないため、取引相手のデータがマスクされている間も読み取ることができます。比較が実行されるまではnullです。",
        "properties": {
          "matched": {
            "type": "boolean",
            "description": "比較したフィールドに差異がない場合はtrue。"
          },
          "mismatched_fields": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "name",
                "date_of_birth",
                "address",
                "account"
              ]
            },
            "description": "差異のあるフィールドです。"
          },
          "fields": {
            "type": "object",
            "description": "当事者のエンティティ種別について比較されたフィールドごとに1エントリー（`name`、`date_of_birth`、`address`、`account`。企業には`date_of_birth`はありません）。",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "result": {
                  "type": "string",
                  "enum": [
                    "matched",
                    "mismatched",
                    "not_compared"
                  ],
                  "description": "ルールが`NONE`の場合、またはいずれかの側にそのフィールドの値がない場合は`not_compared`。"
                },
                "strictness": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "STRICT",
                    "CONTAINS",
                    "DEFAULT",
                    "FUZZY"
                  ]
                }
              }
            }
          }
        }
      },
      "TravelRuleDataUnmasked": {
        "type": "object",
        "nullable": true,
        "description": "取引相手のデータのマスクが解除された時点の監査記録です。データがまだマスクされている間、および外部への送金の場合はnullです。",
        "properties": {
          "at": {
            "type": "string",
            "format": "date-time"
          },
          "reason": {
            "type": "string",
            "enum": [
              "ownership_confirmed",
              "wallet_proof",
              "address_book_match",
              "own_verified_wallet",
              "inquiry_approved",
              "known_payment_method",
              "travel_address"
            ],
            "description": "所有を確認した根拠: ownership_confirmed（コンソールまたはAPIを通じたお客様による確認）、wallet_proof（ウィジェットでのウォレット証明、またはINTERNALの受信送金。作成時に設定されます）、address_book_match（検証済みのアドレス帳ウォレット）、own_verified_wallet（ユーザー自身の検証済みウォレット）、inquiry_approved（受信したTRP照会、またはGTRもしくはSygnaメッセージをお客様が承認したこと）、known_payment_method（ユーザーがすでに支払いに使用したウォレット）、travel_address（ウォレットごとのトラベルアドレスがそのウォレットを指定したこと）のいずれかです。"
          },
          "actor": {
            "type": "string",
            "description": "確認した主体：コンソールユーザーのメールアドレス、またはAPIキーのラベル。自動判定の場合は空欄です。"
          }
        }
      },
      "TravelRuleMessageAttachment": {
        "type": "object",
        "nullable": true,
        "description": "メッセージに添付された書類です。他の取引書類と同様に保存されます。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "note": {
            "type": "string",
            "nullable": true
          },
          "uploaded_by": {
            "type": "string",
            "nullable": true,
            "description": "添付した主体。受け取りポータルでは、送信したファイルにはVASP名が表示され、その背後にいる人物やAPIキーが表示されることはありません。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "file_url": {
                  "type": "string",
                  "nullable": true,
                  "description": "期限付きのダウンロードURL。"
                },
                "original_filename": {
                  "type": "string"
                },
                "file_size": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "TravelRuleMessage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "kind": {
            "type": "string",
            "enum": [
              "MESSAGE",
              "DOCUMENT_REQUEST"
            ]
          },
          "direction": {
            "type": "string",
            "enum": [
              "INBOUND",
              "OUTBOUND"
            ],
            "description": "`OUTBOUND`は閲覧者自身の側が送信したものです。受け取りポータルでは、方向は取引相手の側から見たものになります。"
          },
          "author": {
            "type": "string",
            "description": "それぞれの側でこれを記入した者です。コンソールユーザーのメールアドレスまたはAPIキーのラベル、あるいは相手方VASPの名前です。"
          },
          "body": {
            "type": "string"
          },
          "requested_documents": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "DOCUMENT_REQUESTが求めている内容（依頼者の言葉で記載）。"
          },
          "reply_to": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "fulfilled_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "DOCUMENT_REQUESTへの返信に書類が含まれた時点で、そのDOCUMENT_REQUESTに設定されます。"
          },
          "attachment": {
            "$ref": "#/components/schemas/TravelRuleMessageAttachment"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TravelRuleMessageCreateRequest": {
        "type": "object",
        "description": "JSON、または添付ファイルを`files`に含めたmultipart/form-dataとして送信します。",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "MESSAGE",
              "DOCUMENT_REQUEST"
            ],
            "default": "MESSAGE"
          },
          "body": {
            "type": "string",
            "maxLength": 5000,
            "description": "ファイルが添付されていない場合、MESSAGEでは必須です。"
          },
          "requested_documents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 255
            },
            "maxItems": 10,
            "description": "DOCUMENT_REQUESTでは必須（1つ以上）で、それ以外では指定できません。"
          },
          "reply_to": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "同じ送金のメッセージ。書類を含む返信は、それが応答する書類リクエストを満たします。"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "binary"
            },
            "maxItems": 5,
            "description": "multipart形式のみ。1ファイルあたり10MBまで、最大5ファイルです。"
          }
        }
      },
      "SessionDeletionJob": {
        "type": "object",
        "description": "バックグラウンドで実行中のセッション一括削除。進捗と結果ごとの件数を示しますが、どのセッションを削除したかは示しません。",
        "properties": {
          "job_id": {
            "type": "string",
            "format": "uuid",
            "description": "このIDを使用して`GET /v3/sessions/delete/{job_id}/`をポーリングします。"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "PROCESSING",
              "COMPLETED",
              "FAILED"
            ],
            "description": "`PENDING`：受け付け済みで、まだ開始されていません。`PROCESSING`：削除中で、`processed`と`outcomes`が更新されています。`COMPLETED`：選択されたすべてのセッションの処理が完了しました。`FAILED`：ジョブが途中で停止しました。`error`を参照してください。"
          },
          "total": {
            "type": "integer",
            "description": "削除がリクエストされた時点で選択されていたセッション。"
          },
          "processed": {
            "type": "integer",
            "description": "ジョブがこれまでに処理を完了したセッション。"
          },
          "outcomes": {
            "type": "object",
            "description": "各結果で終了したセッションの数。すべてのキーが常に含まれます。",
            "properties": {
              "deleted": {
                "type": "integer",
                "description": "顔エンベディングとともに削除されたセッション。"
              },
              "none": {
                "type": "integer",
                "description": "削除されたセッションのうち、顔エンベディングがなかったもの。"
              },
              "retained_with_user": {
                "type": "integer",
                "description": "リクエストまたはアプリケーションのポリシーの指定に従い、画像を含まない生体認証テンプレートを1つそのユーザー用に保持したうえで削除されたセッション。"
              },
              "ineligible_no_vendor_user": {
                "type": "integer",
                "description": "保持がリクエストされたものの、紐付けられたユーザーがいなかったため、顔エンベディングとともに削除されたセッション。"
              },
              "failed_retryable": {
                "type": "integer",
                "description": "削除されなかったと報告されたセッション。ジョブは自身で削除できなかったグループをここに計上せず、再試行します。"
              },
              "already_deleted": {
                "type": "integer",
                "description": "選択されたセッションのうち、ジョブが処理する時点で、別のリクエストなどによりすでに削除されていたセッションです。"
              }
            }
          },
          "deleted_child_verifications": {
            "type": "integer",
            "description": "削除された法人確認によって作成され、それとあわせて削除された認証です。`POST /v3/sessions/delete/`で開始されたジョブはKYCセッションのみを削除するため、常に`0`です。"
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "通常は`null`で、`status`が`FAILED`の場合のみ削除が停止した理由が入ります。ジョブが到達していなかったセッションはそのまま残っています。それらを削除するには、リクエストを再度送信してください。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "削除がリクエストされた日時。"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "ジョブが完了した日時。実行中は`null`です。"
          }
        }
      },
      "EntityStatusUpdateRequest": {
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "FLAGGED",
              "BLOCKED"
            ],
            "description": "新しいライフサイクルステータス。`BLOCKED`を指定すると、`vendor_data`もシステムのブロックリストに追加されます。"
          }
        }
      },
      "AMLMonitoringToggleResult": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "users_total",
              "already_enabled",
              "with_existing_aml",
              "needing_screening",
              "skipped_no_identity_data",
              "skipped_blocked",
              "estimated_screening_cost_usd",
              "estimated_annual_monitoring_cost_usd",
              "balance_sufficient",
              "unmatched"
            ],
            "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(何も書き込まれません)。",
            "properties": {
              "users_total": {
                "type": "integer",
                "description": "選択条件に一致したプロフィール。"
              },
              "already_enabled": {
                "type": "integer",
                "description": "すでにモニタリング中のプロフィール(有効化時には何も行われず、無効化するとこれらがオフになります)。"
              },
              "with_existing_aml": {
                "type": "integer",
                "description": "既存のAMLスクリーニングがモニタリング対象に切り替えられるプロファイル（新たなスクリーニングは行われません）。"
              },
              "needing_screening": {
                "type": "integer",
                "description": "AMLスクリーニングが一度も行われておらず、最初にスクリーニングが行われるプロファイル（通常のAMLスクリーニングとして請求されます）。"
              },
              "skipped_no_identity_data": {
                "type": "integer",
                "description": "本人情報が不足しているためスクリーニングできないプロフィール。"
              },
              "skipped_blocked": {
                "type": "integer",
                "description": "スキップされるブロック済みユーザーの数（企業の場合は常に0）。"
              },
              "estimated_screening_cost_usd": {
                "type": "number",
                "example": 0.2,
                "description": "新しいスクリーニングの1回限りの費用です。"
              },
              "estimated_annual_monitoring_cost_usd": {
                "type": "number",
                "example": 0.07,
                "description": "モニタリング対象となるプロファイルの年間モニタリング費用。"
              },
              "balance_sufficient": {
                "type": "boolean",
                "description": "組織の残高でスクリーニングと初年度のモニタリングを賄えるかどうか。"
              },
              "unmatched": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "このアプリケーション内のどのプロフィールにも一致しなかったリクエストの識別子。送信されたとおりの値で返されます。"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "job_id",
              "status",
              "is_enabled",
              "target_type",
              "total",
              "processed",
              "outcomes",
              "results",
              "error",
              "created_at",
              "completed_at",
              "estimate",
              "unmatched"
            ],
            "properties": {
              "job_id": {
                "type": "string",
                "format": "uuid"
              },
              "status": {
                "type": "string",
                "enum": [
                  "PENDING",
                  "PROCESSING",
                  "COMPLETED",
                  "FAILED"
                ]
              },
              "is_enabled": {
                "type": "boolean",
                "description": "ジョブがモニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
              },
              "target_type": {
                "type": "string",
                "enum": [
                  "user",
                  "business"
                ],
                "description": "ジョブが切り替えるプロファイルの種類。"
              },
              "total": {
                "type": "integer",
                "description": "ジョブが処理するプロフィール。"
              },
              "processed": {
                "type": "integer",
                "description": "これまでに処理されたプロフィール。"
              },
              "outcomes": {
                "type": "object",
                "description": "レコードごとの結果カウンターです。選択された各プロフィールは必ずいずれか1つのカウンターに集計され、黙ってスキップされるものはありません。",
                "properties": {
                  "enabled": {
                    "type": "integer",
                    "description": "既存のAMLスクリーニングでモニタリングが有効化されました。"
                  },
                  "screened_and_enabled": {
                    "type": "integer",
                    "description": "新しいAMLスクリーニングが作成され（課金対象）、そのスクリーニングでモニタリングが有効になりました。"
                  },
                  "already_enabled": {
                    "type": "integer",
                    "description": "モニタリングはすでに有効でした。何も変更されず、請求も発生していません。"
                  },
                  "disabled": {
                    "type": "integer",
                    "description": "プロファイルのすべてのAMLスクリーニングでモニタリングがオフになりました。"
                  },
                  "skipped_no_identity_data": {
                    "type": "integer",
                    "description": "スキップ: プロファイルに、スクリーニングに必要な氏名、生年月日、国(ユーザーの場合)または名称(企業の場合)がありません。"
                  },
                  "skipped_blocked": {
                    "type": "integer",
                    "description": "スキップ: ユーザーがブロックされています。"
                  },
                  "skipped_sandbox": {
                    "type": "integer",
                    "description": "スキップ: サンドボックスアプリケーションのため、スクリーニングは作成されません。"
                  },
                  "failed_provider": {
                    "type": "integer",
                    "description": "スクリーニングを完了できませんでした。後で再試行してください。"
                  },
                  "failed_insufficient_balance": {
                    "type": "integer",
                    "description": "ジョブの実行中に残高が不足しました。"
                  }
                }
              },
              "results": {
                "type": "array",
                "description": "処理されたプロファイルごとに処理順で1エントリー。ジョブの実行中に増えていき、ステータスがCOMPLETEDになった時点で完全になります。APIから開始したジョブについて記録されます。",
                "items": {
                  "type": "object",
                  "properties": {
                    "didit_internal_id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "プロファイルのDidit内部IDです。"
                    },
                    "vendor_data": {
                      "type": "string",
                      "nullable": true,
                      "description": "プロファイルに対するお客様独自の識別子です。"
                    },
                    "outcome": {
                      "type": "string",
                      "enum": [
                        "enabled",
                        "screened_and_enabled",
                        "already_enabled",
                        "disabled",
                        "skipped_no_identity_data",
                        "skipped_blocked",
                        "skipped_sandbox",
                        "failed_provider",
                        "failed_insufficient_balance"
                      ]
                    }
                  }
                }
              },
              "error": {
                "type": "string",
                "nullable": true,
                "description": "ステータスがFAILEDの場合の汎用的な失敗メッセージ。詳細な原因はプラットフォーム側で保持されます。"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "completed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "estimate": {
                "type": "object",
                "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(何も書き込まれません)。",
                "properties": {
                  "users_total": {
                    "type": "integer",
                    "description": "選択条件に一致したプロフィール。"
                  },
                  "already_enabled": {
                    "type": "integer",
                    "description": "すでにモニタリング中のプロフィール(有効化時には何も行われず、無効化するとこれらがオフになります)。"
                  },
                  "with_existing_aml": {
                    "type": "integer",
                    "description": "既存のAMLスクリーニングがモニタリング対象に切り替えられるプロファイル（新たなスクリーニングは行われません）。"
                  },
                  "needing_screening": {
                    "type": "integer",
                    "description": "AMLスクリーニングが一度も行われておらず、最初にスクリーニングが行われるプロファイル（通常のAMLスクリーニングとして請求されます）。"
                  },
                  "skipped_no_identity_data": {
                    "type": "integer",
                    "description": "本人情報が不足しているためスクリーニングできないプロフィール。"
                  },
                  "skipped_blocked": {
                    "type": "integer",
                    "description": "スキップされるブロック済みユーザーの数（企業の場合は常に0）。"
                  },
                  "estimated_screening_cost_usd": {
                    "type": "number",
                    "example": 0.2,
                    "description": "新しいスクリーニングの1回限りの費用です。"
                  },
                  "estimated_annual_monitoring_cost_usd": {
                    "type": "number",
                    "example": 0.07,
                    "description": "モニタリング対象となるプロファイルの年間モニタリング費用。"
                  },
                  "balance_sufficient": {
                    "type": "boolean",
                    "description": "組織の残高でスクリーニングと初年度のモニタリングを賄えるかどうか。"
                  }
                }
              },
              "unmatched": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "このアプリケーション内のどのプロフィールにも一致しなかったリクエストの識別子。送信されたとおりの値で返されます。これらはジョブに含まれません。"
              }
            }
          }
        ]
      },
      "AMLMonitoringJob": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "PROCESSING",
              "COMPLETED",
              "FAILED"
            ]
          },
          "is_enabled": {
            "type": "boolean",
            "description": "ジョブがモニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
          },
          "target_type": {
            "type": "string",
            "enum": [
              "user",
              "business"
            ],
            "description": "ジョブが切り替えるプロファイルの種類。"
          },
          "total": {
            "type": "integer",
            "description": "ジョブが処理するプロフィール。"
          },
          "processed": {
            "type": "integer",
            "description": "これまでに処理されたプロフィール。"
          },
          "outcomes": {
            "type": "object",
            "description": "レコードごとの結果カウンターです。選択された各プロフィールは必ずいずれか1つのカウンターに集計され、黙ってスキップされるものはありません。",
            "properties": {
              "enabled": {
                "type": "integer",
                "description": "既存のAMLスクリーニングでモニタリングが有効化されました。"
              },
              "screened_and_enabled": {
                "type": "integer",
                "description": "新しいAMLスクリーニングが作成され（課金対象）、そのスクリーニングでモニタリングが有効になりました。"
              },
              "already_enabled": {
                "type": "integer",
                "description": "モニタリングはすでに有効でした。何も変更されず、請求も発生していません。"
              },
              "disabled": {
                "type": "integer",
                "description": "プロファイルのすべてのAMLスクリーニングでモニタリングがオフになりました。"
              },
              "skipped_no_identity_data": {
                "type": "integer",
                "description": "スキップ: プロファイルに、スクリーニングに必要な氏名、生年月日、国(ユーザーの場合)または名称(企業の場合)がありません。"
              },
              "skipped_blocked": {
                "type": "integer",
                "description": "スキップ: ユーザーがブロックされています。"
              },
              "skipped_sandbox": {
                "type": "integer",
                "description": "スキップ: サンドボックスアプリケーションのため、スクリーニングは作成されません。"
              },
              "failed_provider": {
                "type": "integer",
                "description": "スクリーニングを完了できませんでした。後で再試行してください。"
              },
              "failed_insufficient_balance": {
                "type": "integer",
                "description": "ジョブの実行中に残高が不足しました。"
              }
            }
          },
          "results": {
            "type": "array",
            "description": "処理されたプロファイルごとに処理順で1エントリー。ジョブの実行中に増えていき、ステータスがCOMPLETEDになった時点で完全になります。APIから開始したジョブについて記録されます。",
            "items": {
              "type": "object",
              "properties": {
                "didit_internal_id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "プロファイルのDidit内部IDです。"
                },
                "vendor_data": {
                  "type": "string",
                  "nullable": true,
                  "description": "プロファイルに対するお客様独自の識別子です。"
                },
                "outcome": {
                  "type": "string",
                  "enum": [
                    "enabled",
                    "screened_and_enabled",
                    "already_enabled",
                    "disabled",
                    "skipped_no_identity_data",
                    "skipped_blocked",
                    "skipped_sandbox",
                    "failed_provider",
                    "failed_insufficient_balance"
                  ]
                }
              }
            }
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "ステータスがFAILEDの場合の汎用的な失敗メッセージ。詳細な原因はプラットフォーム側で保持されます。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "estimate": {
            "type": "object",
            "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(何も書き込まれません)。",
            "properties": {
              "users_total": {
                "type": "integer",
                "description": "選択条件に一致したプロフィール。"
              },
              "already_enabled": {
                "type": "integer",
                "description": "すでにモニタリング中のプロフィール(有効化時には何も行われず、無効化するとこれらがオフになります)。"
              },
              "with_existing_aml": {
                "type": "integer",
                "description": "既存のAMLスクリーニングがモニタリング対象に切り替えられるプロファイル（新たなスクリーニングは行われません）。"
              },
              "needing_screening": {
                "type": "integer",
                "description": "AMLスクリーニングが一度も行われておらず、最初にスクリーニングが行われるプロファイル（通常のAMLスクリーニングとして請求されます）。"
              },
              "skipped_no_identity_data": {
                "type": "integer",
                "description": "本人情報が不足しているためスクリーニングできないプロフィール。"
              },
              "skipped_blocked": {
                "type": "integer",
                "description": "スキップされるブロック済みユーザーの数（企業の場合は常に0）。"
              },
              "estimated_screening_cost_usd": {
                "type": "number",
                "example": 0.2,
                "description": "新しいスクリーニングの1回限りの費用です。"
              },
              "estimated_annual_monitoring_cost_usd": {
                "type": "number",
                "example": 0.07,
                "description": "モニタリング対象となるプロファイルの年間モニタリング費用。"
              },
              "balance_sufficient": {
                "type": "boolean",
                "description": "組織の残高でスクリーニングと初年度のモニタリングを賄えるかどうか。"
              }
            }
          },
          "unmatched": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このアプリケーション内のどのプロフィールにも一致しなかったリクエストの識別子。送信されたとおりの値で返されます。これらはジョブに含まれません。"
          }
        }
      },
      "OngoingMonitoringToggleRequest": {
        "type": "object",
        "required": [
          "is_enabled"
        ],
        "properties": {
          "is_enabled": {
            "type": "boolean",
            "description": "モニタリングを有効にする場合はtrue、無効にする場合はfalseです。"
          },
          "estimate_only": {
            "type": "boolean",
            "default": false,
            "description": "trueの場合、費用の見積もりを返し、書き込みは行いません。"
          },
          "update_all": {
            "type": "boolean",
            "default": false,
            "description": "アプリケーションのすべてのエンティティに適用します（filter_*パラメーターが指定されている場合はその範囲に限定されます）。"
          },
          "filter_search": {
            "type": "string"
          },
          "filter_status": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filter_country": {
            "type": "string"
          },
          "filter_date_from": {
            "type": "string",
            "format": "date"
          },
          "filter_date_to": {
            "type": "string",
            "format": "date"
          },
          "didit_internal_id_list": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "切り替える対象のエンティティ。update_allがtrueでない限り必須です。"
          }
        }
      },
      "OngoingMonitoringJob": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "PROCESSING",
              "COMPLETED",
              "FAILED"
            ]
          },
          "is_enabled": {
            "type": "boolean"
          },
          "total": {
            "type": "integer"
          },
          "processed": {
            "type": "integer"
          },
          "outcomes": {
            "type": "object",
            "description": "エンティティごとの結果カウンター。暗黙的にスキップされるものはなく、リクエストされたすべてのエンティティは必ずいずれか1つのカウンターに計上されます。",
            "properties": {
              "enabled": {
                "type": "integer",
                "description": "既存のAMLスクリーニングでモニタリングが有効化されました。"
              },
              "screened_and_enabled": {
                "type": "integer",
                "description": "新しいAMLスクリーニングが作成され（課金対象）、モニタリングが有効になりました。"
              },
              "already_enabled": {
                "type": "integer",
                "description": "モニタリングはすでに有効でした（従来の重複レコードは統合されます）。"
              },
              "disabled": {
                "type": "integer",
                "description": "エンティティのすべてのAMLレコードでモニタリングが無効化されました。"
              },
              "skipped_no_identity_data": {
                "type": "integer",
                "description": "スキップ: スクリーニングに使用できる氏名、生年月日、国がありません。"
              },
              "skipped_blocked": {
                "type": "integer",
                "description": "スキップ: ユーザーがブロックされています。"
              },
              "skipped_sandbox": {
                "type": "integer",
                "description": "スキップ: サンドボックスアプリケーションです。"
              },
              "failed_provider": {
                "type": "integer",
                "description": "スクリーニングプロバイダーの呼び出しに失敗しました。"
              },
              "failed_insufficient_balance": {
                "type": "integer",
                "description": "ジョブの途中で残高が不足しました。"
              }
            }
          },
          "error": {
            "type": "string",
            "nullable": true
          },
          "estimate": {
            "type": "object",
            "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(書き込みは行われません)。",
            "properties": {
              "users_total": {
                "type": "integer",
                "description": "選択範囲内のエンティティ。"
              },
              "already_enabled": {
                "type": "integer"
              },
              "with_existing_aml": {
                "type": "integer",
                "description": "既存のAMLスクリーニングをモニタリング対象に切り替えるエンティティ。"
              },
              "needing_screening": {
                "type": "integer",
                "description": "AMLスクリーニングが一度も実施されていないエンティティで、最初にスクリーニングされるもの（課金対象）。"
              },
              "skipped_no_identity_data": {
                "type": "integer"
              },
              "skipped_blocked": {
                "type": "integer"
              },
              "estimated_screening_cost_usd": {
                "type": "number",
                "example": 0.2
              },
              "estimated_annual_monitoring_cost_usd": {
                "type": "number",
                "example": 0.07
              },
              "balance_sufficient": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "OngoingMonitoringToggleResult": {
        "oneOf": [
          {
            "type": "object",
            "description": "費用のプレビュー。estimate_onlyがtrueの場合に直接返されます(書き込みは行われません)。",
            "properties": {
              "users_total": {
                "type": "integer",
                "description": "選択範囲内のエンティティ。"
              },
              "already_enabled": {
                "type": "integer"
              },
              "with_existing_aml": {
                "type": "integer",
                "description": "既存のAMLスクリーニングをモニタリング対象に切り替えるエンティティ。"
              },
              "needing_screening": {
                "type": "integer",
                "description": "AMLスクリーニングが一度も実施されていないエンティティで、最初にスクリーニングされるもの（課金対象）。"
              },
              "skipped_no_identity_data": {
                "type": "integer"
              },
              "skipped_blocked": {
                "type": "integer"
              },
              "estimated_screening_cost_usd": {
                "type": "number",
                "example": 0.2
              },
              "estimated_annual_monitoring_cost_usd": {
                "type": "number",
                "example": 0.07
              },
              "balance_sufficient": {
                "type": "boolean"
              }
            }
          },
          {
            "$ref": "#/components/schemas/OngoingMonitoringJob"
          }
        ]
      },
      "CaseBlueprintPresetInstallResult": {
        "type": "object",
        "properties": {
          "created": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CaseBulkUpdateResult": {
        "type": "object",
        "properties": {
          "updated": {
            "type": "integer"
          },
          "failures": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "case_uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "detail": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "RegulatoryReportList": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "description": "一致する行の数（パフォーマンスのため上限は100）。"
          },
          "next": {
            "type": "string",
            "nullable": true
          },
          "previous": {
            "type": "string",
            "nullable": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegulatoryReportDetail"
            }
          }
        }
      },
      "EntityNetworkMembershipList": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntityNetworkMembership"
            }
          }
        }
      },
      "SessionDecision": {
        "type": "object",
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "セッションの一意の識別子。"
          },
          "session_kind": {
            "type": "string",
            "enum": [
              "user",
              "business"
            ],
            "description": "このセッションがユーザー認証（KYC）か法人確認（KYB）かを示す識別子です。`user`の場合、KYC機能の配列（`id_verifications`、`nfc_verifications`、`liveness_checks`、`face_matches`、`poa_verifications`、`document_ai_documents`、`database_validations`など）が適用され、企業向けの配列は含まれません。`business`の場合、ペイロードには代わりに`registry_checks`、`document_verifications`、`key_people_checks`と共有の配列（`aml_screenings`、`phone_verifications`、`email_verifications`、`ip_analyses`、`questionnaire_responses`）が含まれます。**`include=events`を渡した場合は省略されます**。eventsの形式はユーザーセッションにのみ存在するため、そのバリアントではこの識別子が除外されます。"
          },
          "shared_from_session": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "`POST /v3/session/import-shared/`で複製されたセッションの場合：ソースアプリケーションにある元のセッションの`session_id`。その他のセッションではすべて`null`です。`include=events`を渡した場合は省略されます。"
          },
          "shared_from_session_number": {
            "type": "integer",
            "nullable": true,
            "description": "このセッションが組織内の別のアプリケーションからインポートされた場合は、インポート元セッションの`session_number`です。それ以外の場合は`null`です。"
          },
          "session_number": {
            "type": "integer",
            "description": "セッションの番号。",
            "nullable": true
          },
          "session_url": {
            "type": "string",
            "format": "uri",
            "description": "セッションのURLです。",
            "nullable": true
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Started",
              "In Progress",
              "Awaiting User",
              "In Review",
              "Approved",
              "Declined",
              "Resubmitted",
              "Expired",
              "Kyc Expired",
              "Abandoned"
            ],
            "description": "セッション全体のライフサイクルステータス。ワークフローの結果を集約したものです。終了状態の値は`Approved`、`Declined`、`In Review`、`Expired`、`Kyc Expired`、`Abandoned`です。`Not Started`、`In Progress`、`Awaiting User`、`Resubmitted`は、セッションがまだワークフローを進行中であることを示します。"
          },
          "status_override": {
            "type": "object",
            "nullable": true,
            "description": "レビュアーが`status`を手動で設定した場合に含まれます。ステータスが自動で設定されたものである場合は`null`です。手動承認と自動承認を区別するために使用します。",
            "properties": {
              "overridden_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "automatic_status": {
                "type": "string",
                "nullable": true,
                "description": "プラットフォーム自身のチェックが結論付けたステータス。"
              }
            }
          },
          "decision_trace": {
            "type": "object",
            "description": "ステータスがどのように決まったかを示します。誰が設定したか、どの警告によって設定されたかがわかります。",
            "properties": {
              "status": {
                "type": "string",
                "description": "セッションのステータス。"
              },
              "decided_by": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "manual",
                  "automatic",
                  "investigator",
                  null
                ],
                "description": "ステータスを設定した者です。セッションの判定が出ていない間は`null`です。"
              },
              "decided_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "automatic_status": {
                "type": "string",
                "nullable": true,
                "description": "プラットフォーム自身のチェックによる結論です。手動判定の後は`status`と異なります。"
              },
              "terminal_node_id": {
                "type": "string",
                "nullable": true,
                "description": "セッションを終了させたワークフローのステータスノード(該当する場合)。"
              },
              "actor": {
                "type": "object",
                "nullable": true,
                "description": "手動判定を行ったレビュアーです。",
                "properties": {
                  "user": {
                    "type": "string",
                    "nullable": true
                  },
                  "actor_type": {
                    "type": "string",
                    "nullable": true
                  }
                }
              },
              "warning_counts": {
                "type": "object",
                "description": "`log_type`（`error`、`warning`、`information`）ごとの警告数と`total`。",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "status_warnings": {
                "type": "array",
                "description": "`Declined`または`In Review`のステータスを設定した警告。",
                "items": {
                  "type": "object",
                  "properties": {
                    "risk": {
                      "type": "string"
                    },
                    "feature": {
                      "type": "string",
                      "nullable": true
                    },
                    "node_id": {
                      "type": "string",
                      "nullable": true
                    },
                    "log_type": {
                      "type": "string",
                      "nullable": true
                    },
                    "check_status": {
                      "type": "string",
                      "nullable": true
                    },
                    "source": {
                      "type": "string",
                      "description": "警告の発生元となったペイロードのリスト（例: `id_verifications`）。"
                    },
                    "short_description": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "linked_records": {
            "type": "object",
            "nullable": true,
            "description": "セッションに関連付けられたその他のレコードの概要。表示するものがない場合、および年齢保証基準を宣言しているワークフローでは`null`です。",
            "properties": {
              "same_face": {
                "type": "object",
                "nullable": true,
                "description": "このセッションのいずれかの顔検索で顔が一致した他の人物です。",
                "properties": {
                  "count": {
                    "type": "integer"
                  },
                  "best_match": {
                    "type": "object",
                    "nullable": true,
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true
                      },
                      "session_number": {
                        "type": "integer",
                        "nullable": true
                      },
                      "vendor_user_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true
                      },
                      "similarity_percentage": {
                        "type": "number",
                        "nullable": true
                      }
                    }
                  }
                }
              },
              "earlier_verifications": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "count": {
                    "type": "integer"
                  },
                  "vendor_user_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true
                  }
                }
              },
              "networks": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "count": {
                    "type": "integer"
                  },
                  "open": {
                    "type": "integer"
                  },
                  "dismissed": {
                    "type": "integer"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "network_id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "display_number": {
                          "type": "integer",
                          "nullable": true
                        },
                        "name": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "risk_score": {
                          "type": "number",
                          "nullable": true
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "description": "このセッションを生成したワークフローグループの不変の識別子。ワークフローはバージョン管理されており、この値は特定のバージョンではなくワークフロー自体を識別します。",
            "nullable": true
          },
          "features": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "セッションの機能です。"
            },
            "description": "このセッションに設定された認証機能のリストで、表示名で示されます。`ID_VERIFICATION`、`NFC`、`LIVENESS`、`FACE_MATCH`、`POA`、`PHONE`、`EMAIL_VERIFICATION`、`AML`、`IP_ANALYSIS`、`DATABASE_VALIDATION`、`QUESTIONNAIRE`、`AGE_ESTIMATION`、`FACE_SEARCH`、`GEOLOCATION`（位置情報認証）があります（法人確認 (KYB)のセッションではKYBの機能セットである`KYB_REGISTRY`、`KYB_DOCUMENTS`、`KYB_KEY_PEOPLE`、`AML`、`PHONE`、`EMAIL_VERIFICATION`、`IP_ANALYSIS`、`QUESTIONNAIRE`を使用します）。`include=events`を指定すると、各エントリはプレーンな文字列ではなくオブジェクト`{feature, node_id}`になり、メール機能の名前が変わります。イベントモードでは、ここで使用される`EMAIL_VERIFICATION`ではなく`EMAIL`として表示されます。"
          },
          "vendor_data": {
            "type": "string",
            "description": "セッションのベンダーデータ。",
            "nullable": true
          },
          "metadata": {
            "type": "object",
            "description": "セッションのメタデータです。",
            "nullable": true
          },
          "expected_details": {
            "type": "object",
            "description": "セッション作成時に指定された想定情報です。抽出データとの照合（KYC）や、法人登記検索の事前入力（KYB）に使用されます。指定されたキーのみをそのまま返し、何も指定されなかった場合は`null`になります。KYCセッションには個人のフィールドが含まれ、法人確認 (KYB)セッションには`company_name`、`registry_country`、`registration_number`が含まれます。",
            "properties": {
              "first_name": {
                "type": "string",
                "description": "ユーザーの名。例: `John`。"
              },
              "last_name": {
                "type": "string",
                "description": "ユーザーの姓。例: `Doe`。"
              },
              "date_of_birth": {
                "type": "string",
                "format": "date",
                "description": "ユーザーの生年月日（形式: YYYY-MM-DD）。例: `1990-05-15`。"
              },
              "gender": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "M",
                  "F"
                ],
                "default": null,
                "description": "ユーザーの性別。'M'、'F'、nullのいずれかである必要があります。"
              },
              "nationality": {
                "type": "string",
                "description": "申請者の出身国を示すISO 3166-1 alpha-3コード。例: `USA`。"
              },
              "country": {
                "type": "string",
                "description": "住所証明書類の国、または申請者の身分証明書類の国を示すISO 3166-1 alpha-3コード。国籍とは異なる場合があります。例: `GBR`。"
              },
              "address": {
                "type": "string",
                "description": "人が読める形式の住所。できるだけ多くの情報を含めてください。例: `123 Main St, San Francisco, CA 94105, USA`。"
              },
              "identification_number": {
                "type": "string",
                "description": "ユーザーの書類番号、個人番号、または納税者番号。例: `123456789`。"
              },
              "ip_address": {
                "type": "string",
                "format": "ipv4",
                "description": "セッションで想定されるIPアドレスです。実際のIPアドレスがこの値と異なる場合、警告がログに記録されます。例: `192.168.1.100`。"
              },
              "expected_document_types": {
                "type": "array",
                "description": "セッション作成時に本人確認ステップで受け付けるよう制限された書類種別。空または未設定の場合は制限なし。コード: `P`(パスポート)、`ID`(国民IDカード)、`DL`(運転免許証)、`RP`(在留許可証)、`HIC`(健康保険証)、`TC`(税務カード)、`SSC`(社会保障カード)。",
                "items": {
                  "type": "string",
                  "enum": [
                    "P",
                    "ID",
                    "DL",
                    "RP",
                    "HIC",
                    "TC",
                    "SSC"
                  ]
                }
              },
              "id_country": {
                "type": "string",
                "nullable": true,
                "description": "想定されるID書類の発行国（ISO 3166-1 alpha-3）です。作成時に制限した場合に含まれます。",
                "example": "ESP"
              },
              "poa_country": {
                "type": "string",
                "nullable": true,
                "description": "想定される住所証明書類の国（ISO 3166-1 alpha-3）です。作成時に制限した場合に含まれます。",
                "example": "ESP"
              },
              "company_name": {
                "type": "string",
                "description": "企業の想定される正式名称です。法人確認 (KYB)セッションのみ。"
              },
              "registry_country": {
                "type": "string",
                "description": "想定される登記国です。`XX`または`XX-YY`の形式で指定します（ISO 3166-1 alpha-2。州レベルの登記の場合はISO 3166-2の地域区分を付加できます。例: `US-CA`）。法人確認 (KYB)セッションのみ。"
              },
              "registration_number": {
                "type": "string",
                "description": "想定される法人の登記番号です。企業（KYB）セッションのみが対象です。"
              }
            },
            "nullable": true
          },
          "contact_details": {
            "type": "object",
            "description": "セッション作成時に提供された連絡先情報（通知メール、電話番号・メールアドレス検証の事前入力、コミュニケーション言語に使用）。メールアドレスと電話番号のどちらも提供されなかった場合は`null`です。",
            "properties": {
              "email": {
                "type": "string",
                "description": "メールアドレス認証ステップで使用されるユーザーのメールアドレス（例：\"john.doe@example.com\"）。指定しない場合、ユーザーは認証フロー中に入力する必要があります。"
              },
              "email_lang": {
                "type": "string",
                "description": "メール通知の言語コード（ISO 639-1）。すべてのメール連絡の言語を制御します（例：\"en\"、\"es\"、\"fr\"）。"
              },
              "send_notification_emails": {
                "type": "boolean",
                "default": false,
                "description": "trueに設定し、メールアドレスを指定した場合、ユーザー認証(KYC)または法人確認(KYB)のセッション作成時に、Diditは最初の「Verify your identity」メールを非同期で送信します。また、手動レビューが必要なセッションについては、認証ステータスの通知も指定したメールアドレスに送信します。"
              },
              "phone": {
                "type": "string",
                "nullable": true,
                "description": "利用可能な場合、E.164形式のユーザーの電話番号(例: +14155552671)。セッション作成時にメールアドレスのみが指定された場合は`null`です。注: このフィールドはセッション作成時に指定された元の電話番号を返します。番号が無効だった場合、E.164形式でない可能性があります。"
              }
            },
            "nullable": true
          },
          "callback": {
            "type": "string",
            "format": "uri",
            "description": "セッションのコールバックURL。",
            "nullable": true
          },
          "id_verifications": {
            "type": "array",
            "nullable": true,
            "description": "**本人確認(OCR)レポートの配列**。ワークフローグラフ内の本人確認書類ステップによって生成されます。常にJSON配列です。`id_verifications[0]`を読み取り、ワークフローで複数の本人確認を実行できる場合(たとえば一次確認に加えて追加確認を行う場合)は反復処理してください。少なくとも1つの本人確認ステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、抽出された書類フィールド、画像URL、品質スコア、MRZ、住所の解析結果、セッション間の一致、`warnings[]`を含みます。",
            "items": {
              "type": "object",
              "description": "1件の本人確認レポート。単一の本人確認ステップの完全なレポートです。`verification_method`は3つの方法(書類撮影、書類不要の照会、ウォレットサインイン)のうちどれで生成されたかを示し、方法固有の証拠ブロックがそれに応じて設定されます。",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "このレポートを生成したOCRステップのワークフローグラフのノードID。"
                },
                "verification_method": {
                  "type": "string",
                  "enum": [
                    "document",
                    "id_lookup",
                    "wallet"
                  ],
                  "description": "このレポートを生成した本人確認の方法。`document`：ユーザーが物理的な身分証明書を撮影しました（デフォルト値であり、他の方法が導入される前に作成されたすべてのセッションの値です）。`id_lookup`：ユーザーが国民ID番号を入力し、その国の政府登録簿またはその他の信頼できる情報源と照合されました（どの情報源かは`id_lookup.source`に示されます）。`wallet`：ユーザーが政府または銀行のデジタルIDでサインインしました。"
                },
                "assurance": {
                  "type": "string",
                  "enum": [
                    "documentary",
                    "data_match",
                    "cryptographic"
                  ],
                  "description": "`verification_method`から導出される保証レベル。`documentary`は撮影・検証された書類、`data_match`は照会先が保持する記録と一致した情報、`cryptographic`はIDプロバイダーが認証し署名した属性を示します。"
                },
                "wallet_provider": {
                  "type": "string",
                  "nullable": true,
                  "description": "`verification_method`が`wallet`の場合のカタログウォレットID（`mitid`、`bankid_se`、`itsme`など）。それ以外の場合は`null`です。"
                },
                "fallback_from": {
                  "type": "object",
                  "nullable": true,
                  "description": "書類以外の方法によってIDステップが終了した理由です。照会またはウォレットサインインが失敗し、その国のフォールバック設定が`decline`だった場合に、却下されたレポートに設定されます。それ以外の場合は`null`です。",
                  "properties": {
                    "method": {
                      "type": "string",
                      "enum": [
                        "id_lookup",
                        "wallet"
                      ],
                      "description": "失敗したメソッドです。"
                    },
                    "reason": {
                      "type": "string",
                      "description": "それを終了させた結果。例: `no_match`、`provider_error`、`cancelled`、`timeout`。"
                    },
                    "action": {
                      "type": "string",
                      "description": "実行された設定済みのアクション。例:`decline`。"
                    }
                  }
                },
                "id_lookup": {
                  "type": "object",
                  "nullable": true,
                  "description": "登記の証拠。`verification_method`が`id_lookup`の場合にのみ存在し、それ以外の場合は`null`です。",
                  "properties": {
                    "source": {
                      "type": "string",
                      "description": "照会したソースの顧客向け名称。例：`Department of Home Affairs`（政府の登録簿）、`UK credit bureau and financial services records`（政府の登録簿ではない）。これは照会の出所を示す唯一の記述です。政府のソースであると想定しないでください。"
                    },
                    "checked_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "登記簿が応答した日時。"
                    },
                    "attempts": {
                      "type": "integer",
                      "description": "このレポートの元となった試行の番号（1始まり）。"
                    },
                    "max_attempts": {
                      "type": "integer",
                      "description": "国ごとに設定された試行回数の上限(1〜5、デフォルトは1)。"
                    },
                    "outcome": {
                      "type": "string",
                      "enum": [
                        "match",
                        "partial_match",
                        "no_match",
                        "provider_error",
                        "format_rejected"
                      ],
                      "nullable": true,
                      "description": "登録機関の回答です。試行回数の上限にカウントされ、課金されるのは`match`、`partial_match`、`no_match`のみです。"
                    },
                    "comparison": {
                      "type": "array",
                      "description": "ソースが回答した比較可能なフィールドごとに1行、さらにソースのエラーごとに1行です。比較行には国ごとのリクエストフィールドキーではなく、以下の正規化されたフィールド名を使用します。複数のリクエストフィールド（名と姓、または識別子のエイリアスのいずれか）が1つの比較にまとめられるためです。失敗したソースは`field: \"provider\"`と`result: \"error\"`を持つ行を追加するため、行をフィールドの判定として扱う前に`result`を確認してください。",
                      "items": {
                        "type": "object",
                        "required": [
                          "field",
                          "label",
                          "provided",
                          "record",
                          "result"
                        ],
                        "properties": {
                          "field": {
                            "type": "string",
                            "enum": [
                              "identification_number",
                              "full_name",
                              "date_of_birth",
                              "address",
                              "provider"
                            ],
                            "description": "正規化された比較フィールド。`provider`はユーザーフィールドではなく、ソースのエラー行であることを示します。"
                          },
                          "label": {
                            "type": "string",
                            "description": "行の表示ラベルです。例：`ID number`、`Full name`、`Provider`。"
                          },
                          "provided": {
                            "type": "string",
                            "nullable": true,
                            "description": "ユーザーが入力した値です。`provider`エラー行では`null`です。"
                          },
                          "record": {
                            "type": "string",
                            "nullable": true,
                            "description": "ソースが保持していた値です。`provider`エラー行では、代わりにエラーメッセージが入ります。"
                          },
                          "result": {
                            "type": "string",
                            "enum": [
                              "match",
                              "partial",
                              "no_match",
                              "error"
                            ],
                            "description": "フィールドごとの比較結果。`error`は`provider`行にのみ表示され、そのソースが応答しなかったことを意味します。これはクエリに関する証跡として扱い、決してフィールドの不一致として扱わないでください。"
                          }
                        }
                      }
                    },
                    "registry_portrait": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "ソースが返した顔写真への有効期間の短い署名付きURL。顔写真を返す4つの政府登録簿（南アフリカ、ナイジェリア、アルゼンチン、パナマ）のみが対象です。"
                    },
                    "face_match_score": {
                      "type": "number",
                      "nullable": true,
                      "description": "セルフィーと登記所の顔写真との照合結果(0-100)です。登記所が顔写真を返す場合のみです。"
                    }
                  }
                },
                "wallet_verification": {
                  "type": "object",
                  "nullable": true,
                  "description": "クレデンシャルの証拠。`verification_method`が`wallet`の場合にのみ存在し、それ以外の場合は`null`です。",
                  "properties": {
                    "provider": {
                      "type": "string",
                      "description": "カタログウォレットID（例: `mitid`）。"
                    },
                    "provider_name": {
                      "type": "string",
                      "nullable": true,
                      "description": "エンドユーザーが認識しているウォレット名（例: `MitID`）。"
                    },
                    "issuing_authority": {
                      "type": "string",
                      "nullable": true,
                      "description": "ウォレットを提供する機関。例：`Danish Agency for Digital Government`。"
                    },
                    "issuing_country": {
                      "type": "string",
                      "description": "ウォレットが提供された国のISO 3166-1 alpha-3コード。"
                    },
                    "credential_type": {
                      "type": "string",
                      "nullable": true,
                      "description": "ウォレットが提示したクレデンシャル（例: `person_identification`）。"
                    },
                    "level_of_assurance": {
                      "type": "string",
                      "enum": [
                        "low",
                        "substantial",
                        "high"
                      ],
                      "nullable": true,
                      "description": "ウォレットが表明した保証レベルです。要求されたレベルより低いレベルを表明したサインインは、レベルを下げるのではなく失敗します。"
                    },
                    "verified_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "ウォレットでの認証日時。"
                    },
                    "signature_valid": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "ウォレットが返した署名付きアサーションが検証に成功したかどうか。"
                    },
                    "attributes": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "ウォレットが共有した属性。ウォレットのカタログエントリーに記載されたキーで格納されます。"
                    },
                    "portrait": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "ウォレットが顔写真を共有した場合の、その顔写真への有効期間の短い署名付きURL。"
                    },
                    "face_match_score": {
                      "type": "number",
                      "nullable": true,
                      "description": "セルフィーとウォレットの顔写真との照合結果(0-100)です。ウォレットが顔写真を共有する場合に限ります。"
                    }
                  }
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Expired"
                  ],
                  "description": "この本人確認ステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。"
                },
                "document_type": {
                  "type": "string",
                  "description": "本人確認書類の種類"
                },
                "document_subtype": {
                  "type": "string",
                  "nullable": true,
                  "description": "ワークフローの書類設定で受け付ける書類サブタイプのコードです（該当する場合は書類の地域を含みます）。例：`ID_CARD_GENERIC`、`QUEENSLAND_DRIVER_LICENSE_GENERIC`。"
                },
                "document_number": {
                  "type": "string",
                  "description": "書類の識別番号"
                },
                "personal_number": {
                  "type": "string",
                  "description": "個人識別番号"
                },
                "portrait_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "顔写真画像のURL"
                },
                "front_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "書類表面画像のURL"
                },
                "front_video": {
                  "type": "string",
                  "format": "uri",
                  "description": "書類表面の動画のURL"
                },
                "back_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "書類裏面画像のURL"
                },
                "back_video": {
                  "type": "string",
                  "format": "uri",
                  "description": "書類裏面の動画のURL"
                },
                "full_front_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "書類表面全体の画像のURL"
                },
                "full_back_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "書類裏面全体の画像のURL"
                },
                "front_image_camera_front": {
                  "type": "string",
                  "format": "uri",
                  "description": "前面カメラで撮影された書類表面画像のURL"
                },
                "back_image_camera_front": {
                  "type": "string",
                  "format": "uri",
                  "description": "前面カメラで撮影された書類裏面画像のURL"
                },
                "date_of_birth": {
                  "type": "string",
                  "format": "date",
                  "description": "書類記載の生年月日"
                },
                "age": {
                  "type": "integer",
                  "description": "生年月日から算出された年齢"
                },
                "expiration_date": {
                  "type": "string",
                  "format": "date",
                  "description": "書類の有効期限"
                },
                "date_of_issue": {
                  "type": "string",
                  "format": "date",
                  "description": "書類の発行日"
                },
                "issuing_state": {
                  "type": "string",
                  "description": "発行国のISOコード"
                },
                "issuing_state_name": {
                  "type": "string",
                  "description": "発行国の正式名称"
                },
                "first_name": {
                  "type": "string",
                  "description": "書類に記載された名"
                },
                "last_name": {
                  "type": "string",
                  "description": "書類から取得した姓"
                },
                "full_name": {
                  "type": "string",
                  "description": "書類上の氏名"
                },
                "gender": {
                  "type": "string",
                  "description": "書類上の性別"
                },
                "address": {
                  "type": "string",
                  "description": "書類から取得した生の住所"
                },
                "formatted_address": {
                  "type": "string",
                  "description": "整形済みの完全な住所"
                },
                "place_of_birth": {
                  "type": "string",
                  "description": "書類に記載された出生地"
                },
                "marital_status": {
                  "type": "string",
                  "description": "書類に記載された婚姻状況"
                },
                "nationality": {
                  "type": "string",
                  "description": "国籍のISOコード"
                },
                "extra_fields": {
                  "type": "object",
                  "description": "追加の書類フィールド。書類固有の属性（例：`dl_categories`、`blood_group`、`sponsor`、`employer`、`dl_class_code_b_from`、`dl_class_code_b_to`）が含まれます。運転免許証の区分ごとの有効日は`dl_class_code_<class>_from`および`dl_class_code_<class>_to`として、区分ごとの制限/情報コード（例：英国の免許証の12欄）は`dl_class_code_<class>_notes`として返されます。書類に氏名、住所、出生地が複数の文字体系で記載されている場合、このオブジェクトにはそれらのフィールドの別の文字体系版も含まれます。ワークフロー設定の`preferred_characters`（`latin`または`non_latin`）によって、トップレベルのフィールド（`first_name`、`last_name`、`full_name`、`address`、`place_of_birth`）にどの文字体系が入るかが決まります。もう一方の文字体系は、`preferred_characters`が`latin`の場合は`first_name_non_latin` / `last_name_non_latin` / `full_name_non_latin` / `middle_name_non_latin` / `address_non_latin` / `place_of_birth_non_latin`としてここに入り、`preferred_characters`が`non_latin`の場合は`_latin`サフィックス付きで入ります。キーは、OCRが実際に別の文字体系の値を抽出した場合にのみ表示されます。別の文字体系の値が優先設定と同じ文字体系であるフィールド（例えば、キリル文字のラベルが付いたフィールドで、OCRの値がラテン文字のホモグリフで返された場合）はスキップされます。`preferred_characters`が`latin`でも書類に非ラテン文字のテキストしかない場合、Diditは抽出した値を翻字し、フォールバックとして`first_name_latin` / `last_name_latin`などを提供します。",
                  "additionalProperties": true,
                  "properties": {
                    "dl_categories": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "blood_group": {
                      "type": "string",
                      "nullable": true
                    },
                    "first_name_non_latin": {
                      "type": "string",
                      "description": "`preferred_characters=latin`で書類に非ラテン文字表記がある場合の、非ラテン文字表記の名です（例：キルギスのIDの`Айна`）。"
                    },
                    "last_name_non_latin": {
                      "type": "string",
                      "description": "`preferred_characters=latin`で、書類に非ラテン文字の表記がある場合の、非ラテン文字表記の姓。"
                    },
                    "middle_name_non_latin": {
                      "type": "string",
                      "description": "`preferred_characters=latin`で、書類に非ラテン文字の表記がある場合の、非ラテン文字表記のミドルネーム／父称。"
                    },
                    "full_name_non_latin": {
                      "type": "string",
                      "description": "非ラテン文字で構成された氏名。名と姓の両方が利用可能な場合は、個々の構成要素から再構成されます。"
                    },
                    "address_non_latin": {
                      "type": "string",
                      "description": "`preferred_characters=latin`で、書類に非ラテン文字の表記がある場合の、非ラテン文字表記の住所。"
                    },
                    "place_of_birth_non_latin": {
                      "type": "string",
                      "description": "`preferred_characters=latin`で、書類に非ラテン文字の表記がある場合の、非ラテン文字表記の出生地。"
                    },
                    "first_name_latin": {
                      "type": "string",
                      "description": "ラテン文字表記の名です。`preferred_characters=non_latin`で書類にラテン文字表記がある場合、または音訳によるフォールバックとして、`preferred_characters=latin`で書類に非ラテン文字のテキストしかない場合に設定されます。"
                    },
                    "last_name_latin": {
                      "type": "string",
                      "description": "ラテン文字表記の姓。`first_name_latin`と同じルールが適用されます。"
                    },
                    "middle_name_latin": {
                      "type": "string",
                      "description": "ラテン文字表記のミドルネーム／父称。ルールは`first_name_latin`と同じです。"
                    },
                    "full_name_latin": {
                      "type": "string",
                      "description": "ラテン文字で構成された氏名。名と姓の両方が利用可能な場合は、常に個々の構成要素から再構成されます。"
                    },
                    "address_latin": {
                      "type": "string",
                      "description": "ラテン文字表記の住所。`first_name_latin`と同じルールが適用されます。"
                    },
                    "place_of_birth_latin": {
                      "type": "string",
                      "description": "ラテン文字表記の出生地。`first_name_latin`と同じルールが適用されます。"
                    }
                  }
                },
                "mrz": {
                  "type": "object",
                  "nullable": true,
                  "description": "書類から抽出された機械読み取りゾーン(MRZ)の解析済みフィールド。MRZが検出されなかった場合は`null`です。",
                  "properties": {
                    "surname": {
                      "type": "string",
                      "example": "MARTINEZ<SANCHEZ"
                    },
                    "name": {
                      "type": "string",
                      "example": "ELENA"
                    },
                    "country": {
                      "type": "string",
                      "example": "ESP"
                    },
                    "nationality": {
                      "type": "string",
                      "example": "ESP"
                    },
                    "birth_date": {
                      "type": "string",
                      "example": "850315"
                    },
                    "expiry_date": {
                      "type": "string",
                      "example": "220821"
                    },
                    "sex": {
                      "type": "string",
                      "example": "F"
                    },
                    "document_type": {
                      "type": "string",
                      "example": "ID"
                    },
                    "document_number": {
                      "type": "string",
                      "example": "YZA123456"
                    },
                    "optional_data": {
                      "type": "string",
                      "example": "X9876543L"
                    },
                    "optional_data_2": {
                      "type": "string",
                      "example": ""
                    },
                    "birth_date_hash": {
                      "type": "string",
                      "example": "7"
                    },
                    "expiry_date_hash": {
                      "type": "string",
                      "example": "4"
                    },
                    "document_number_hash": {
                      "type": "string",
                      "example": "9"
                    },
                    "final_hash": {
                      "type": "string",
                      "example": "2"
                    },
                    "personal_number": {
                      "type": "string",
                      "example": "X9876543L"
                    },
                    "warnings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "mrz_type": {
                      "type": "string",
                      "example": "TD1"
                    },
                    "mrz_string": {
                      "type": "string",
                      "example": "IDESPMARTINEZ<SANCHEZ<<<<<<<<<<\nYZA123456<9ESP8503157F3208214<X9876543L<<<<<<<2\nMARTINEZ<SANCHEZ<<ELENA<<<<<<<<<<"
                    },
                    "mrz_key": {
                      "type": "string",
                      "example": "YZA123456985031573208214"
                    }
                  }
                },
                "parsed_address": {
                  "type": "object",
                  "description": "構造化された住所の詳細",
                  "properties": {
                    "city": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "region": {
                      "type": "string"
                    },
                    "country": {
                      "type": "string",
                      "description": "2文字の国コード"
                    },
                    "category": {
                      "type": "string",
                      "description": "住所の区分（例：Residential、Commercial）"
                    },
                    "street_1": {
                      "type": "string"
                    },
                    "street_2": {
                      "type": "string",
                      "nullable": true
                    },
                    "is_verified": {
                      "type": "boolean",
                      "description": "住所が検証済みかどうか"
                    },
                    "postal_code": {
                      "type": "string"
                    },
                    "raw_results": {
                      "type": "object",
                      "properties": {
                        "types": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "geometry": {
                          "type": "object",
                          "properties": {
                            "location": {
                              "type": "object",
                              "properties": {
                                "lat": {
                                  "type": "number"
                                },
                                "lng": {
                                  "type": "number"
                                }
                              }
                            },
                            "viewport": {
                              "type": "object",
                              "properties": {
                                "northeast": {
                                  "type": "object",
                                  "properties": {
                                    "lat": {
                                      "type": "number"
                                    },
                                    "lng": {
                                      "type": "number"
                                    }
                                  }
                                },
                                "southwest": {
                                  "type": "object",
                                  "properties": {
                                    "lat": {
                                      "type": "number"
                                    },
                                    "lng": {
                                      "type": "number"
                                    }
                                  }
                                }
                              }
                            },
                            "location_type": {
                              "type": "string"
                            }
                          }
                        },
                        "place_id": {
                          "type": "string"
                        },
                        "formatted_address": {
                          "type": "string"
                        },
                        "navigation_points": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "location": {
                                "type": "object",
                                "properties": {
                                  "latitude": {
                                    "type": "number"
                                  },
                                  "longitude": {
                                    "type": "number"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "address_components": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "types": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "long_name": {
                                "type": "string"
                              },
                              "short_name": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "address_type": {
                      "type": "string"
                    },
                    "document_location": {
                      "type": "object",
                      "properties": {
                        "latitude": {
                          "type": "number"
                        },
                        "longitude": {
                          "type": "number"
                        }
                      }
                    },
                    "formatted_address": {
                      "type": "string"
                    }
                  }
                },
                "extra_files": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uri"
                  },
                  "description": "書類認証の追加ファイル"
                },
                "front_image_camera_front_face_match_score": {
                  "type": "number",
                  "nullable": true,
                  "description": "表面の書類画像から抽出した顔写真とフロントカメラ画像との顔照合スコア"
                },
                "back_image_camera_front_face_match_score": {
                  "type": "number",
                  "nullable": true,
                  "description": "裏面の書類画像から抽出した顔写真とフロントカメラ画像との顔照合スコア"
                },
                "document_selfie_face_matches": {
                  "type": "array",
                  "description": "書類撮影中にフロントカメラが撮影したセルフィーと顔が一致した過去のセッションまたは顔ブロックリストのエントリ(Silent Capture Face Search)。エントリの形式は`liveness_checks[].matches`と同じです。このフィールドが存在する前に作成されたセッション、または検索が実行されなかった場合は`null`です。検索が実行されて何も見つからなかった場合は空の配列です。`match_image_url`は有効期限のある署名付きURLです。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true,
                        "description": "一致した顔のセッションID。`source`が`imported`、`list_entry`、`retained_template`の場合は`null`です。"
                      },
                      "session_number": {
                        "type": "integer",
                        "nullable": true
                      },
                      "similarity_percentage": {
                        "type": "number",
                        "description": "2つの画像間の顔の類似度。0～100の範囲に制限されます。"
                      },
                      "vendor_data": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッション、またはインポートされた顔および保持されたテンプレートの顔の場合は紐付けられたユーザーの`vendor_data`です。"
                      },
                      "vendor_user_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true,
                        "description": "`imported`および`retained_template`の一致と、ユーザーにリンクされたセッションの一致における、リンクされたユーザーのID。リストエントリおよびユーザーのないセッションの場合は`null`。"
                      },
                      "biometric_template_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true,
                        "description": "保持された生体認証テンプレートのID。`source`が`retained_template`の場合のみ設定され、それ以外の場合は`null`です。"
                      },
                      "verification_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "一致する顔が撮影された日時、または保持されたテンプレートが作成された日時。リストのエントリでは`null`です。"
                      },
                      "user_details": {
                        "type": "object",
                        "nullable": true,
                        "description": "一致したセッションまたはインポートされたユーザープロフィールの本人データ。`retained_template`および`list_entry`の一致では常に`null`です。",
                        "properties": {
                          "full_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "document_type": {
                            "type": "string",
                            "nullable": true
                          },
                          "document_number": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      },
                      "match_image_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true,
                        "description": "画像に基づく一致の基準画像。保持されたテンプレートには画像が含まれないため、`retained_template`の一致では常に`null`です。"
                      },
                      "status": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッションのライフサイクルステータス。セッション以外のソースの場合は`null`。"
                      },
                      "is_blocklisted": {
                        "type": "boolean",
                        "description": "一致した顔がブロックリストに登録されているかどうか。"
                      },
                      "is_allowlisted": {
                        "type": "boolean",
                        "description": "一致した顔が許可リストに登録されているかどうか。"
                      },
                      "api_service": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッションのスタンドアロンAPIサービス（例: `PASSIVE_LIVENESS`、`FACE_MATCH`）。ワークフローセッションおよびセッション以外のソースでは`null`です。"
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "session",
                          "imported",
                          "list_entry",
                          "retained_template"
                        ],
                        "description": "一致した顔の出所です：`session`、`imported`（ユーザーの顔アップロード）、`list_entry`（許可リスト/ブロックリスト）、または`retained_template`（ユーザーに保存された画像を含まない生体認証テンプレートで、`/v3/biometric-templates/`に一覧表示されます）。"
                      }
                    }
                  },
                  "nullable": true
                },
                "front_image_quality_score": {
                  "type": "object",
                  "nullable": true,
                  "description": "書類表面画像の品質指標。各サブスコアの範囲は0から100です。",
                  "properties": {
                    "focus_score": {
                      "type": "number",
                      "description": "上位10%の局所ラプラシアン分散で測定した画像の鮮明度。大きな均一背景を持つ書類にも頑健です。値が高いほど、ぼやけの少ない鮮明な画像であることを示します。"
                    },
                    "brightness_score": {
                      "type": "number",
                      "description": "画像の明るさの度合い。暗すぎる画像や露出過多の画像は減点され、理想的な明るさは中間程度です。"
                    },
                    "brightness_issue": {
                      "type": "string",
                      "enum": [
                        "ok",
                        "too_dark",
                        "too_bright"
                      ],
                      "description": "brightness_scoreが低い場合に、明るさの問題の方向を示します。'ok'は明るさが許容範囲であること、'too_dark'は画像が露出不足であること、'too_bright'は画像が露出過多であることを意味します。"
                    },
                    "is_document_fully_visible": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "書類の四隅すべてが画像フレーム内に完全に収まっている場合はtrue、いずれかの角が切れている場合はfalseです。角の座標が利用できない場合はnullです。"
                    },
                    "resolution_score": {
                      "type": "number",
                      "description": "総ピクセル数に基づく画像の実効解像度。"
                    },
                    "overall_score": {
                      "type": "number",
                      "description": "サブスコアの加重合成値（フォーカス45%、明るさ30%、解像度25%）。"
                    }
                  }
                },
                "back_image_quality_score": {
                  "type": "object",
                  "nullable": true,
                  "description": "書類裏面画像の品質指標。front_image_quality_scoreと同じ構造です。",
                  "properties": {
                    "focus_score": {
                      "type": "number",
                      "description": "上位10%の局所ラプラシアン分散で測定した画像の鮮明度。大きな均一背景を持つ書類にも頑健です。値が高いほど、ぼやけの少ない鮮明な画像であることを示します。"
                    },
                    "brightness_score": {
                      "type": "number",
                      "description": "画像の明るさの度合い。暗すぎる画像や露出過多の画像は減点され、理想的な明るさは中間程度です。"
                    },
                    "brightness_issue": {
                      "type": "string",
                      "enum": [
                        "ok",
                        "too_dark",
                        "too_bright"
                      ],
                      "description": "brightness_scoreが低い場合に、明るさの問題の方向を示します。'ok'は明るさが許容範囲であること、'too_dark'は画像が露出不足であること、'too_bright'は画像が露出過多であることを意味します。"
                    },
                    "is_document_fully_visible": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "書類の四隅すべてが画像フレーム内に完全に収まっている場合はtrue、いずれかの角が切れている場合はfalseです。角の座標が利用できない場合はnullです。"
                    },
                    "resolution_score": {
                      "type": "number",
                      "description": "総ピクセル数に基づく画像の実効解像度。"
                    },
                    "overall_score": {
                      "type": "number",
                      "description": "サブスコアの加重合成値（フォーカス45%、明るさ30%、解像度25%）。"
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です（例: `ID_VERIFICATION`、`NFC`、`LIVENESS`）。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われますが、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true,
                        "description": "警告に関する追加のコンテキストデータ"
                      },
                      "log_type": {
                        "type": "string",
                        "description": "ログの種類：情報、警告、またはエラー"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID(グラフベースのワークフローの場合)"
                      }
                    }
                  },
                  "description": "書類検証の警告"
                },
                "matches": {
                  "type": "array",
                  "description": "重複/ブロックリスト検出で見つかった一致する書類（最大5件）",
                  "items": {
                    "type": "object",
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "description": "一致した書類のセッションID"
                      },
                      "session_number": {
                        "type": "integer",
                        "description": "一致した書類のセッション番号"
                      },
                      "vendor_data": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッションに関連付けられたベンダーデータ"
                      },
                      "verification_date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "一致したセッションが認証された日付"
                      },
                      "user_details": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "一致した書類上の氏名"
                          },
                          "document_type": {
                            "type": "string",
                            "description": "一致した書類の種類"
                          },
                          "document_number": {
                            "type": "string",
                            "description": "一致した書類の書類番号"
                          }
                        }
                      },
                      "status": {
                        "type": "string",
                        "description": "一致したセッションのステータス"
                      },
                      "is_blocklisted": {
                        "type": "boolean",
                        "description": "一致した書類がブロックリストに登録されているかどうか"
                      },
                      "api_service": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致するセッションのAPIサービスタイプ"
                      },
                      "front_image_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true,
                        "description": "一致した書類の表面画像のURL"
                      }
                    }
                  }
                },
                "document_liveness": {
                  "type": "object",
                  "nullable": true,
                  "description": "不正の種類ごとの書類ライブネススコアです。警告が発生したかどうかにかかわらず報告されるため、承認済みの書類も監査できます。チェックが実行されなかった場合は`null`です。",
                  "properties": {
                    "portrait_replace": {
                      "type": "object",
                      "nullable": true,
                      "properties": {
                        "score": {
                          "type": "number",
                          "nullable": true,
                          "description": "この不正タイプについて書類が本物である可能性（0〜100、値が高いほど本物である可能性が高い）。2つの面のうち低い方の値で、判定に使用された値です。どちらの面からも有効なスコアが得られなかった場合は`null`。"
                        },
                        "front": {
                          "type": "number",
                          "nullable": true,
                          "description": "表面のスコア。撮影されていない場合、またはスコアが除外された場合は`null`です。"
                        },
                        "back": {
                          "type": "number",
                          "nullable": true,
                          "description": "裏面のスコア。撮影されていない場合、またはスコアが除外された場合は`null`です。"
                        },
                        "decline_threshold": {
                          "type": "number",
                          "nullable": true,
                          "description": "この書類が評価された時点で保存された却下のしきい値です。その後ワークフローを編集しても変更されません。過去の評価エビデンスが利用できない場合はnullです。"
                        },
                        "review_threshold": {
                          "type": "number",
                          "nullable": true,
                          "description": "この書類が評価された時点で保存されたレビューしきい値です。その後ワークフローを編集しても変更されません。過去の評価エビデンスが利用できない場合はnullです。"
                        },
                        "bucket": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "approve",
                            "review",
                            "decline",
                            null
                          ],
                          "description": "評価時に保存された不正タイプの区分です。利用可能なスコアがない場合、チェックが適用されなかった場合、または過去の評価の根拠データが利用できない場合はnullです。後からワークフローを編集しても変更されません。"
                        }
                      }
                    },
                    "printed_copy": {
                      "type": "object",
                      "nullable": true,
                      "properties": {
                        "score": {
                          "type": "number",
                          "nullable": true,
                          "description": "この不正タイプについて書類が本物である可能性（0〜100、値が高いほど本物である可能性が高い）。2つの面のうち低い方の値で、判定に使用された値です。どちらの面からも有効なスコアが得られなかった場合は`null`。"
                        },
                        "front": {
                          "type": "number",
                          "nullable": true,
                          "description": "表面のスコア。撮影されていない場合、またはスコアが除外された場合は`null`です。"
                        },
                        "back": {
                          "type": "number",
                          "nullable": true,
                          "description": "裏面のスコア。撮影されていない場合、またはスコアが除外された場合は`null`です。"
                        },
                        "decline_threshold": {
                          "type": "number",
                          "nullable": true,
                          "description": "この書類が評価された時点で保存された却下のしきい値です。その後ワークフローを編集しても変更されません。過去の評価エビデンスが利用できない場合はnullです。"
                        },
                        "review_threshold": {
                          "type": "number",
                          "nullable": true,
                          "description": "この書類が評価された時点で保存されたレビューしきい値です。その後ワークフローを編集しても変更されません。過去の評価エビデンスが利用できない場合はnullです。"
                        },
                        "bucket": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "approve",
                            "review",
                            "decline",
                            null
                          ],
                          "description": "評価時に保存された不正タイプの区分です。利用可能なスコアがない場合、チェックが適用されなかった場合、または過去の評価の根拠データが利用できない場合はnullです。後からワークフローを編集しても変更されません。"
                        }
                      }
                    },
                    "screen_replay": {
                      "type": "object",
                      "nullable": true,
                      "properties": {
                        "score": {
                          "type": "number",
                          "nullable": true,
                          "description": "この不正タイプについて書類が本物である可能性（0〜100、値が高いほど本物である可能性が高い）。2つの面のうち低い方の値で、判定に使用された値です。どちらの面からも有効なスコアが得られなかった場合は`null`。"
                        },
                        "front": {
                          "type": "number",
                          "nullable": true,
                          "description": "表面のスコア。撮影されていない場合、またはスコアが除外された場合は`null`です。"
                        },
                        "back": {
                          "type": "number",
                          "nullable": true,
                          "description": "裏面のスコア。撮影されていない場合、またはスコアが除外された場合は`null`です。"
                        },
                        "decline_threshold": {
                          "type": "number",
                          "nullable": true,
                          "description": "この書類が評価された時点で保存された却下のしきい値です。その後ワークフローを編集しても変更されません。過去の評価エビデンスが利用できない場合はnullです。"
                        },
                        "review_threshold": {
                          "type": "number",
                          "nullable": true,
                          "description": "この書類が評価された時点で保存されたレビューしきい値です。その後ワークフローを編集しても変更されません。過去の評価エビデンスが利用できない場合はnullです。"
                        },
                        "bucket": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "approve",
                            "review",
                            "decline",
                            null
                          ],
                          "description": "評価時に保存された不正タイプの区分です。利用可能なスコアがない場合、チェックが適用されなかった場合、または過去の評価の根拠データが利用できない場合はnullです。後からワークフローを編集しても変更されません。"
                        }
                      }
                    }
                  }
                },
                "address_validation": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/AddressValidationResult"
                    }
                  ],
                  "nullable": true,
                  "description": "この書類に記載された住所の住所検証（Address Validation）です。住所が存在するかどうかと、書類から読み取った正規化された形式を示します（後から`address`を修正しても再実行されません）。この本人確認ステップでAddress Validationアドオンが有効化された場合に存在し、それ以外の場合は`null`です。"
                },
                "region": {
                  "type": "string",
                  "nullable": true,
                  "description": "書類で特定されている場合の、書類の発行国の地域または州。"
                },
                "extracted_data": {
                  "type": "object",
                  "nullable": true,
                  "additionalProperties": true,
                  "description": "本人に確認のため提示された、書類から抽出されたデータのスナップショットです。確認済みの値と並べて保持されるため、読み取られた内容と本人が確認した内容を比較できます。本人に確認が求められなかった場合は`null`です。"
                },
                "barcodes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "書類のバーコードから読み取られたデータ。書類にバーコードがない場合、または読み取れなかった場合は空になります。"
                }
              }
            }
          },
          "nfc_skip_reason": {
            "type": "string",
            "nullable": true,
            "enum": [
              "USER_SKIPPED",
              "DOCUMENT_WITHOUT_CHIP",
              "CHIP_CERTIFICATE_UNAVAILABLE",
              "DEVICE_WITHOUT_NFC",
              "INTEGRATION_WITHOUT_NFC_ACCESS",
              "MRZ_KEY_UNAVAILABLE",
              "JPKI_UNAVAILABLE"
            ],
            "description": "NFCチップ検証が実行されなかった理由です。ワークフローにNFCステップが含まれる場合は常に設定されます。NFCが保留中の間、またはチップが実際に読み取られた場合は`null`です。値：`USER_SKIPPED` - NFC対応デバイスでユーザーがスキップを選択した（`allow_nfc_skip`で許可されている場合）；`DOCUMENT_WITHOUT_CHIP` - 書類に読み取り可能なNFCチップがない（ICAO 9303の電子書類ではない）；`CHIP_CERTIFICATE_UNAVAILABLE` - 書類の発行期間をカバーする発行国の署名証明書（CSCA）が利用できないため、チップの署名を検証できない；`DEVICE_WITHOUT_NFC` - デバイスがNFCリーダーを搭載していないと報告した；`INTEGRATION_WITHOUT_NFC_ACCESS` - ネイティブSDKを使わずに（例：Webブラウザで）認証が実行されたため、スマートフォンのNFCリーダーにアクセスできない；`MRZ_KEY_UNAVAILABLE` - 書類のMRZからチップのアクセスキーを導出できなかった；`JPKI_UNAVAILABLE` - 書類が日本のマイナンバーカードで、そのチップはJPKI経由で読み取られるが、この認証ではJPKIが利用できなかった（有効化されていない、またはアプリのネイティブSDKがマイナンバーカードを読み取れない）。"
          },
          "nfc_verifications": {
            "type": "array",
            "nullable": true,
            "description": "**NFC / ePassportレポートの配列**。ワークフローグラフ内のNFCステップによって生成されます。**これは常にJSON配列であり、単一の`nfc`オブジェクトになることはありません**。`nfc_verifications[0]`を読み取り、ワークフローでNFCを複数回実行できる場合は反復処理してください。少なくとも1つのNFCステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、`chip_protocol`、`chip_data`、`authenticity`(SOD + DGの完全性)、`certificate_summary`、`warnings[]`を含みます。日本のマイナンバーカードはICAO 9303ではなくJPKIを通じて読み取られます。その要素は`chip_protocol: \"jpki\"`を持ち、証跡を`jpki`の下に格納し、ICAOのフィールドは`null`のままです。NFCステップが提示される前にバイパスされた場合(チップのない書類、証明書の欠落、NFC機能の報告なし、読み取れないMRZキー、マイナンバーカードでJPKIが利用できない場合)、この値は`null`のままで、`nfc_skip_reason`がその理由を示します。ステップ自体でのスキップ(ユーザーがスキップをタップした場合、またはスキャン時にリーダーが利用できないと判明した場合)でも、`is_nfc_skipped: true`を含むレポートが生成されます。",
            "items": {
              "type": "object",
              "description": "1件のNFCレポート: 1回のチップ読み取りの完全なレポートです(ICAO 9303準拠のePassportまたはeIDチップ、あるいはJPKI経由で読み取ったマイナンバーカード)。",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "このレポートを生成したNFCステップのワークフローグラフのノードID。レポートとワークフロー定義を関連付けるために使用します。"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ],
                  "description": "このNFCステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。"
                },
                "is_nfc_skipped": {
                  "type": "boolean",
                  "description": "このNFCステップが読み取られずに明示的にスキップされた場合は`true`です。理由は`skip_reason`に示されます。"
                },
                "skip_reason": {
                  "type": "string",
                  "nullable": true,
                  "enum": [
                    "USER_SKIPPED",
                    "DOCUMENT_WITHOUT_CHIP",
                    "CHIP_CERTIFICATE_UNAVAILABLE",
                    "DEVICE_WITHOUT_NFC",
                    "INTEGRATION_WITHOUT_NFC_ACCESS",
                    "MRZ_KEY_UNAVAILABLE",
                    "JPKI_UNAVAILABLE"
                  ],
                  "description": "このNFCステップがスキップされた理由。`is_nfc_skipped`が`true`の場合にのみ設定されます。セッションレベルの`nfc_skip_reason`と同じ分類ですが、そちらはNFCがレポートをまったく生成しなかったケースも対象とします。"
                },
                "chip_protocol": {
                  "type": "string",
                  "enum": [
                    "icao",
                    "jpki"
                  ],
                  "description": "NFCステップがチップを読み取る方法。`icao`：ICAO 9303準拠のePassportまたはeIDチップで、MRZから得たアクセスキーで開きます。`jpki`：日本のマイナンバーカードで、所有者がネイティブSDKでカードのPINを入力した後、カードがワンタイムチャレンジに署名します。結果は`jpki`の下に格納されます。スキップされたステップにも設定されるため、マイナンバーカードの読み取りがスキップされたことを区別できます。"
                },
                "jpki": {
                  "type": "object",
                  "nullable": true,
                  "description": "JPKIを通じて読み取った日本のマイナンバーカードによって証明された内容。`chip_protocol`が`jpki`で、カードが読み取られた場合に存在します。ICAOチップ、スキップされたステップ、およびカードを一度も読み取らずにNFCステップが終了した場合（この場合は`JPKI_SIGNATURE_INVALID`が発生します）は`null`です。証明書、そのシリアル番号、署名、12桁のマイナンバーは決して含まれません。",
                  "properties": {
                    "certificate_types": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "user_authentication",
                          "signature"
                        ]
                      },
                      "description": "読み取られたカードの証明書。`user_authentication`（4桁のPIN）は常に読み取られ、`signature`（署名用PIN）はNFCノードの`jpki_request_attributes`設定がオンの場合に読み取られます。"
                    },
                    "chain_valid": {
                      "type": "boolean",
                      "description": "読み取ったすべての証明書がJPKI認証局につながる証明書チェーンを持ち、有効期間内であり、その種類のマイナンバーカード証明書である場合は`true`です。"
                    },
                    "signature_valid": {
                      "type": "boolean",
                      "description": "ワンタイムチャレンジに対してカードが作成したすべての署名の検証に成功した場合は`true`です。カードはPINが入力された後にのみ署名するため、これによりカードの所持とPINの知識が証明されます。"
                    },
                    "revocation_status": {
                      "type": "string",
                      "enum": [
                        "good",
                        "revoked",
                        "unchecked"
                      ],
                      "description": "失効確認ですべての証明書が有効と確認された場合は`good`、いずれかの証明書が失効している場合（例: 紛失届が出されたカード）は`revoked`、失効確認の回答が得られなかった場合は`unchecked`です。`unchecked`が`good`として扱われることはありません。結果はNFCノードの`jpki_revocation_unchecked_action`で決まります（デフォルトは`REVIEW`）。"
                    },
                    "ca_generation": {
                      "type": "string",
                      "nullable": true,
                      "description": "証明書を発行したJPKI認証局の世代（例：`2023`）。いずれの証明書もその認証局に連鎖しない場合は`null`です。"
                    },
                    "certificate_expires_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "読み取った証明書のうち、最も早い有効期限です。"
                    },
                    "certificates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "カードから読み取った1つの証明書が証明した内容です。証明書そのものやそのシリアル番号が含まれることはありません。",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "user_authentication",
                              "signature"
                            ],
                            "description": "このエントリが表すカード証明書。"
                          },
                          "chain_valid": {
                            "type": "boolean",
                            "description": "証明書がその種類のJPKI認証局につながる証明書チェーンを持ち、有効期間内であり、その種類のマイナンバーカード証明書である場合は`true`です。"
                          },
                          "signature_valid": {
                            "type": "boolean",
                            "description": "ワンタイムチャレンジに対するカードの署名がこの証明書で検証に成功した場合は`true`です。"
                          },
                          "ca_generation": {
                            "type": "string",
                            "nullable": true,
                            "description": "証明書を発行したJPKI認証局の世代（例：`2023`）。信頼できる発行者が見つからない場合は`null`です。"
                          },
                          "not_valid_before": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "証明書の有効期間の開始日時です。証明書を読み取れなかった場合は`null`です。"
                          },
                          "not_valid_after": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "証明書の有効期間の終了日時。証明書を読み取れなかった場合は`null`です。"
                          },
                          "failure": {
                            "type": "string",
                            "nullable": true,
                            "enum": [
                              "unreadable_certificate",
                              "untrusted_issuer",
                              "expired",
                              "not_yet_valid",
                              "wrong_policy",
                              "key_usage",
                              null
                            ],
                            "description": "`chain_valid`が`false`である理由です：`unreadable_certificate`、`untrusted_issuer`（その種類のJPKI認証局によって発行されていない）、`expired`、`not_yet_valid`、`wrong_policy`（その種類のマイナンバーカード証明書ではない）、または`key_usage`（その鍵は署名に使用できない）。チェーンが有効な場合は`null`です。"
                          }
                        }
                      },
                      "description": "証明書ごとの結果。読み取った証明書1件につき1エントリ。"
                    },
                    "attributes": {
                      "type": "object",
                      "nullable": true,
                      "description": "署名用電子証明書のチェーンが有効になった時点での、署名用電子証明書から得た名義人のデータです。署名用電子証明書がリクエストされなかった場合、またはJPKI認証局までチェーンをたどれなかった場合は`null`です。",
                      "properties": {
                        "full_name": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記上の名称。通常は日本語表記です。"
                        },
                        "date_of_birth": {
                          "type": "string",
                          "format": "date",
                          "nullable": true,
                          "description": "生年月日（`YYYY-MM-DD`）。登録された日付が不完全な場合は`null`です。"
                        },
                        "gender": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "M",
                            "F",
                            null
                          ],
                          "description": "`M`、`F`、または登録されていない場合は`null`です。"
                        },
                        "address": {
                          "type": "string",
                          "nullable": true,
                          "description": "登記住所。"
                        },
                        "name_substitute_characters": {
                          "type": "string",
                          "nullable": true,
                          "description": "元の文字が標準の文字セットに含まれないため代替文字に置き換えられた`full_name`の文字を示す位置文字列。置き換えがない場合は`null`です。"
                        },
                        "address_substitute_characters": {
                          "type": "string",
                          "nullable": true,
                          "description": "`address`内の代替文字を示す位置文字列。`name_substitute_characters`と同様です。"
                        }
                      }
                    },
                    "attributes_match_ocr": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "属性が同じカードの写真から読み取ったデータと一致する場合は`true`、いずれかの属性が異なる場合は`false`（`JPKI_AND_OCR_DATA_NOT_SAME`）、何も比較できなかった場合は`null`です。`attributes`が`null`の場合も、比較できなかった場合に含まれます。"
                    },
                    "mismatched_attributes": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "full_name",
                          "date_of_birth",
                          "gender",
                          "address"
                        ]
                      },
                      "description": "写真データと異なる属性の名前です。値は決して含まれません。比較したすべての項目が一致する場合は空です。"
                    }
                  }
                },
                "portrait_image": {
                  "type": "string",
                  "format": "uri",
                  "nullable": true,
                  "description": "チップから読み取った顔写真（ICAO DG2）の署名付きURL。JPKIによる読み取り（`chip_protocol: \"jpki\"`）およびスキップされたステップでは`null`です。"
                },
                "signature_image": {
                  "type": "string",
                  "format": "uri",
                  "nullable": true,
                  "description": "チップから読み取った所持者の署名画像（ICAO DG7）の署名付きURL。チップに保存されている場合に含まれます。JPKIによる読み取り（`chip_protocol: \"jpki\"`）およびスキップされたステップでは`null`です。"
                },
                "chip_data": {
                  "type": "object",
                  "nullable": true,
                  "description": "ICAOチップのデータグループから解析された個人データ。JPKIの読み取り(`chip_protocol: \"jpki\"`)およびスキップされたステップでは`null`です。",
                  "properties": {
                    "document_type": {
                      "type": "string"
                    },
                    "issuing_country": {
                      "type": "string"
                    },
                    "document_number": {
                      "type": "string"
                    },
                    "expiration_date": {
                      "type": "string",
                      "format": "date"
                    },
                    "first_name": {
                      "type": "string"
                    },
                    "last_name": {
                      "type": "string"
                    },
                    "birth_date": {
                      "type": "string",
                      "format": "date"
                    },
                    "gender": {
                      "type": "string"
                    },
                    "nationality": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "place_of_birth": {
                      "type": "string"
                    }
                  }
                },
                "authenticity": {
                  "type": "object",
                  "nullable": true,
                  "description": "ICAOパッシブ認証: SOD署名（`sod_integrity`）とData Groupのハッシュ（`dg_integrity`）。JPKIの読み取りでは`null`となり、その証明は`jpki`で報告されます。",
                  "properties": {
                    "sod_integrity": {
                      "type": "boolean"
                    },
                    "dg_integrity": {
                      "type": "boolean"
                    }
                  }
                },
                "certificate_summary": {
                  "type": "object",
                  "nullable": true,
                  "description": "ICAOのDocument Signer Certificate（書類署名者証明書）の概要。JPKIの読み取り（`chip_protocol: \"jpki\"`）およびスキップされたステップでは`null`です。",
                  "properties": {
                    "issuer": {
                      "type": "string"
                    },
                    "subject": {
                      "type": "string"
                    },
                    "serial_number": {
                      "type": "string"
                    },
                    "not_valid_after": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "not_valid_before": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  }
                }
              }
            }
          },
          "liveness_checks": {
            "type": "array",
            "nullable": true,
            "description": "**ライブネスレポートの配列**。ワークフローグラフ内のライブネスステップによって生成されます。常にJSON配列であり、単一の`liveness`オブジェクトになることはありません。少なくとも1つのライブネスステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、`method`、`score`、`reference_image`、`video_url`、任意の`age_estimation`、セッション間の`matches[]`、`warnings[]`を含みます。",
            "items": {
              "type": "object",
              "description": "ライブネスレポート1件。1回のライブネス判定の完全なレポートです。",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "このレポートを生成したライブネスステップのワークフローグラフのノードID。"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ],
                  "description": "このライブネス検知ステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。"
                },
                "method": {
                  "type": "string",
                  "description": "ライブネス検知に使用された方式"
                },
                "score": {
                  "type": "number",
                  "description": "ライブネスチェックの信頼度スコア"
                },
                "reference_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "使用された参照画像のURL"
                },
                "video_url": {
                  "type": "string",
                  "format": "uri",
                  "description": "ライブネスチェック動画のURL"
                },
                "age_estimation": {
                  "type": "number",
                  "description": "人物の推定年齢"
                },
                "matches": {
                  "type": "array",
                  "description": "重複顔検索で見つかった類似の顔です(上位の一致結果で、ブロックリスト・許可リストに登録されたエントリが先に並びます)。各エントリの`source`は、一致した顔の出所を示します。`session`(別の認証セッション)、`imported`(ベンダーユーザーに対してアップロードされた顔)、`list_entry`(組織が管理する許可リスト・ブロックリストの顔)、`retained_template`(Userに保存された画像を含まない生体認証テンプレートで、`/v3/biometric-templates/`に一覧表示されます)のいずれかです。セッション以外のソースでは、`session_id`、`session_number`、`status`、`api_service`は`null`になります。`imported`の一致でも、ベンダーユーザーのレコードから`vendor_data`、`verification_date`、さらにベンダーユーザーの氏名が登録されている場合は`user_details`(`full_name`のみ)が設定されます。`retained_template`の一致では`vendor_user_id`、`vendor_data`、`biometric_template_id`、`verification_date`が設定され、画像および本人情報のフィールドは`null`になります。`list_entry`の一致では、これらすべてが`null`で返されます。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true,
                        "description": "一致した顔のセッションID。`source`が`imported`、`list_entry`、`retained_template`の場合は`null`です。"
                      },
                      "session_number": {
                        "type": "integer",
                        "nullable": true
                      },
                      "similarity_percentage": {
                        "type": "number",
                        "description": "2つの画像間の顔の類似度。0～100の範囲に制限されます。"
                      },
                      "vendor_data": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッション、またはインポートされた顔および保持されたテンプレートの顔の場合は紐付けられたユーザーの`vendor_data`です。"
                      },
                      "vendor_user_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true,
                        "description": "`imported`および`retained_template`の一致と、ユーザーにリンクされたセッションの一致における、リンクされたユーザーのID。リストエントリおよびユーザーのないセッションの場合は`null`。"
                      },
                      "biometric_template_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true,
                        "description": "保持された生体認証テンプレートのID。`source`が`retained_template`の場合のみ設定され、それ以外の場合は`null`です。"
                      },
                      "verification_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "一致する顔が撮影された日時、または保持されたテンプレートが作成された日時。リストのエントリでは`null`です。"
                      },
                      "user_details": {
                        "type": "object",
                        "nullable": true,
                        "description": "一致したセッションまたはインポートされたユーザープロフィールの本人データ。`retained_template`および`list_entry`の一致では常に`null`です。",
                        "properties": {
                          "full_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "document_type": {
                            "type": "string",
                            "nullable": true
                          },
                          "document_number": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      },
                      "match_image_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true,
                        "description": "画像に基づく一致の基準画像。保持されたテンプレートには画像が含まれないため、`retained_template`の一致では常に`null`です。"
                      },
                      "status": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッションのライフサイクルステータス。セッション以外のソースの場合は`null`。"
                      },
                      "is_blocklisted": {
                        "type": "boolean",
                        "description": "一致した顔がブロックリストに登録されているかどうか。"
                      },
                      "is_allowlisted": {
                        "type": "boolean",
                        "description": "一致した顔が許可リストに登録されているかどうか。"
                      },
                      "api_service": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッションのスタンドアロンAPIサービス（例: `PASSIVE_LIVENESS`、`FACE_MATCH`）。ワークフローセッションおよびセッション以外のソースでは`null`です。"
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "session",
                          "imported",
                          "list_entry",
                          "retained_template"
                        ],
                        "description": "一致した顔の出所です：`session`、`imported`（ユーザーの顔アップロード）、`list_entry`（許可リスト/ブロックリスト）、または`retained_template`（ユーザーに保存された画像を含まない生体認証テンプレートで、`/v3/biometric-templates/`に一覧表示されます）。"
                      }
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  }
                },
                "face_quality": {
                  "type": "number",
                  "nullable": true,
                  "description": "顔画像の品質スコア（0-100%）。パッシブライブネスでのみ利用できます。"
                },
                "face_luminance": {
                  "type": "number",
                  "nullable": true,
                  "description": "顔の輝度/明るさスコア（0-100%）。パッシブライブネスでのみ利用できます。"
                }
              }
            }
          },
          "face_matches": {
            "type": "array",
            "nullable": true,
            "description": "**顔照合レポートの配列**。ワークフローグラフ内の顔照合ステップによって生成されます。常にJSON配列であり、単一の`face_match`オブジェクトになることはありません。少なくとも1つの顔照合ステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、類似度の`score`、`source_image`、`target_image`、`warnings[]`を含みます。",
            "items": {
              "type": "object",
              "description": "顔照合レポート1件。完全なレポートです。",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "このレポートを生成した顔照合ステップのワークフローグラフのノードID。"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ],
                  "description": "この顔照合ステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。"
                },
                "score": {
                  "type": "number",
                  "description": "顔照合の信頼度スコア"
                },
                "source_image_session_id": {
                  "type": "string",
                  "format": "uuid",
                  "nullable": true,
                  "description": "ソース（参照）ポートレートが保存されているセッションID。生体認証フローでは、これはセッション自身のIDです（送信されたポートレートは新しいセッションに保存されます）。ソース画像が同じセッションの書類のポートレートである場合は`null`です。"
                },
                "source_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "比較に使用されたソース画像のURL"
                },
                "target_image": {
                  "type": "string",
                  "format": "uri",
                  "description": "比較に使用されたターゲット画像のURL"
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  },
                  "description": "顔照合の検証に関する警告"
                },
                "face_coverage": {
                  "type": "object",
                  "nullable": true,
                  "description": "撮影画像で目、口、顔が覆われているかどうか。`GET /v3/session/{sessionId}/decision/`でのみ返され、Webhookペイロードには含まれません。覆われ具合の読み取り値が存在しない場合は`null`です。",
                  "properties": {
                    "eyes": {
                      "type": "object",
                      "properties": {
                        "covered": {
                          "type": "boolean",
                          "nullable": true
                        },
                        "calibrated": {
                          "type": "boolean",
                          "nullable": true,
                          "description": "`false`は、その読み取り値がシャドーエビデンスにすぎず、どの警告もそれに基づいて作動しないことを意味します。"
                        },
                        "visibility_score": {
                          "type": "number",
                          "nullable": true
                        }
                      }
                    },
                    "mouth": {
                      "type": "object",
                      "properties": {
                        "covered": {
                          "type": "boolean",
                          "nullable": true
                        },
                        "calibrated": {
                          "type": "boolean",
                          "nullable": true,
                          "description": "`false`は、その読み取り値がシャドーエビデンスにすぎず、どの警告もそれに基づいて作動しないことを意味します。"
                        },
                        "visibility_score": {
                          "type": "number",
                          "nullable": true
                        }
                      }
                    },
                    "face": {
                      "type": "object",
                      "properties": {
                        "covered": {
                          "type": "boolean",
                          "nullable": true
                        },
                        "calibrated": {
                          "type": "boolean",
                          "nullable": true,
                          "description": "`false`は、その読み取り値がシャドーエビデンスにすぎず、どの警告もそれに基づいて作動しないことを意味します。"
                        },
                        "visibility_score": {
                          "type": "number",
                          "nullable": true
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "phone_verifications": {
            "type": "array",
            "nullable": true,
            "description": "**電話番号検証レポートの配列**。常にJSON配列であり、単一の`phone`オブジェクトになることはありません。少なくとも1つの電話番号ステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、電話番号と国のメタデータ、`lifecycle[]`、`matches[]`、`warnings[]`を含みます。",
            "items": {
              "type": "object",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "ワークフローグラフ内のこの電話番号検証ステップの一意の識別子。"
                },
                "status": {
                  "type": "string",
                  "description": "この電話番号検証ステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Expired"
                  ]
                },
                "phone_number_prefix": {
                  "type": "string",
                  "description": "国際電話の国番号プレフィックス"
                },
                "phone_number": {
                  "type": "string",
                  "description": "国番号を除いた電話番号"
                },
                "full_number": {
                  "type": "string",
                  "description": "国番号付きの完全な電話番号"
                },
                "country_code": {
                  "type": "string",
                  "description": "2文字の国コード（ISO 3166-1 alpha-2）"
                },
                "country_name": {
                  "type": "string",
                  "description": "国の正式名称"
                },
                "carrier": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "電話通信事業者の名称"
                    },
                    "type": {
                      "type": "string",
                      "description": "電話回線の種類（携帯電話、固定電話など）"
                    }
                  }
                },
                "is_disposable": {
                  "type": "boolean",
                  "description": "電話番号が使い捨てサービスのものかどうか"
                },
                "is_virtual": {
                  "type": "boolean",
                  "description": "電話番号が仮想番号かどうか"
                },
                "verification_method": {
                  "type": "string",
                  "description": "電話番号の検証に使用された方式"
                },
                "verification_attempts": {
                  "type": "integer",
                  "description": "実行された認証の試行回数"
                },
                "verified_at": {
                  "type": "string",
                  "format": "date-time",
                  "description": "電話番号が検証された日時"
                },
                "lifecycle": {
                  "type": "array",
                  "description": "電話番号検証のライフサイクルにおけるイベントの時系列リストです。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string"
                      },
                      "timestamp": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "details": {
                        "type": "object",
                        "nullable": true,
                        "description": "イベント固有のペイロードです。送信イベントには`status`、`reason`、`channel`、`actual_channel`が、配信イベントには`channel`、`status`が、コード確認イベントには`code_tried`、`status`が、最終ステータスイベントには`reason`が含まれます。報告する理由がない場合(例: `PHONE_VERIFICATION_APPROVED`)は`null`になります。",
                        "properties": {
                          "status": {
                            "type": "string"
                          },
                          "reason": {
                            "type": "string",
                            "nullable": true
                          },
                          "channel": {
                            "type": "string",
                            "nullable": true
                          },
                          "actual_channel": {
                            "type": "string",
                            "nullable": true
                          },
                          "code_tried": {
                            "type": "string"
                          }
                        }
                      },
                      "fee": {
                        "type": "number"
                      }
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "description": "電話番号検証に関する警告のリスト",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  }
                },
                "matches": {
                  "type": "array",
                  "description": "この電話番号で見つかった一致です。各一致には`source`があります。`session`（アプリケーション内の別の認証セッションが同じ番号で一致したもの。`session_id`/`session_number`/`vendor_data`/`verification_date`とともに返されます）または`list_entry`（番号が組織で管理する許可リスト/ブロックリストに登録されているもの。`/management-api/lists/overview`を参照）のいずれかです。セッション間の一致は異なる`vendor_data`を使用し、上限は5件です。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true
                      },
                      "session_number": {
                        "type": "integer",
                        "nullable": true
                      },
                      "vendor_data": {
                        "type": "string",
                        "nullable": true
                      },
                      "verification_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "phone_number": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "nullable": true
                      },
                      "is_blocklisted": {
                        "type": "boolean"
                      },
                      "api_service": {
                        "type": "string",
                        "nullable": true
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "session",
                          "list_entry"
                        ],
                        "description": "この一致の発生元です。`session`は、アプリケーション内の別の認証セッションがこの値で一致したことを意味します。`list_entry`は、組織が管理するリスト（許可リスト/ブロックリスト）に対してこの値がヒットしたことを意味します。これらのリストの管理方法については、`/management-api/lists/overview`のManagement APIのリスト概要を参照してください。"
                      }
                    }
                  }
                },
                "phone_intelligence": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PhoneIntelligence"
                    }
                  ],
                  "description": "電話番号インテリジェンスのシグナル。この番号に対して電話番号インテリジェンスのアドオンが実行された場合にのみ含まれます。"
                },
                "phone_social": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PhoneSocialFootprint"
                    }
                  ],
                  "description": "番号のソーシャルフットプリント。この番号に対してソーシャルフットプリントアドオンが実行された場合にのみ含まれます。"
                }
              }
            }
          },
          "email_verifications": {
            "type": "array",
            "nullable": true,
            "description": "**メールアドレス認証レポートの配列**。常にJSON配列であり、単一の`email`オブジェクトになることはありません。少なくとも1つのメールステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、メールアドレス、漏洩データ、`lifecycle[]`、`matches[]`、`warnings[]`を含みます。",
            "items": {
              "type": "object",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "ワークフローグラフ内のこのメールアドレス認証ステップの一意の識別子。"
                },
                "status": {
                  "type": "string",
                  "description": "このメールアドレス認証ステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Expired"
                  ]
                },
                "email": {
                  "type": "string",
                  "description": "認証対象のメールアドレス"
                },
                "is_breached": {
                  "type": "boolean",
                  "description": "メールアドレスが既知のデータ侵害で見つかったかどうかを示します"
                },
                "breaches": {
                  "type": "array",
                  "description": "このメールアドレスが含まれていた既知の情報漏えいのリスト",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "description": "漏洩事案の名称"
                      },
                      "domain": {
                        "type": "string",
                        "description": "漏洩の影響を受けたドメイン"
                      },
                      "logo_path": {
                        "type": "string",
                        "description": "漏洩したサービスのロゴへのURL"
                      },
                      "breach_date": {
                        "type": "string",
                        "format": "date",
                        "description": "データ侵害が発生した日付"
                      },
                      "description": {
                        "type": "string",
                        "description": "違反の説明"
                      },
                      "is_verified": {
                        "type": "boolean",
                        "description": "漏えいが検証済みかどうか"
                      },
                      "data_classes": {
                        "type": "array",
                        "description": "漏えいで流出したデータの種類",
                        "items": {
                          "type": "string"
                        }
                      },
                      "breach_emails_count": {
                        "type": "integer",
                        "description": "データ侵害で影響を受けたメールアドレスの数"
                      }
                    }
                  }
                },
                "is_disposable": {
                  "type": "boolean",
                  "description": "メールアドレスが使い捨てプロバイダーのものかどうかを示します"
                },
                "is_undeliverable": {
                  "type": "boolean",
                  "description": "メールアドレスが配信不能かどうかを示します"
                },
                "verification_attempts": {
                  "type": "integer",
                  "description": "このメールアドレスの認証試行回数"
                },
                "verified_at": {
                  "type": "string",
                  "format": "date-time",
                  "description": "メールアドレスが認証された日時"
                },
                "warnings": {
                  "type": "array",
                  "description": "メールアドレス認証に関する警告のリスト",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  }
                },
                "lifecycle": {
                  "type": "array",
                  "description": "メールアドレス認証のライフサイクルにおけるイベントの時系列リストです。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string"
                      },
                      "timestamp": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "details": {
                        "type": "object",
                        "nullable": true,
                        "description": "イベント固有のペイロードです。送信イベントには`status`、`reason`が、コード確認イベントには`code_tried`、`status`が、最終ステータスイベントには`reason`が含まれます。報告する理由がない場合(例: `EMAIL_VERIFICATION_APPROVED`)は`null`になります。",
                        "properties": {
                          "status": {
                            "type": "string"
                          },
                          "reason": {
                            "type": "string",
                            "nullable": true
                          },
                          "code_tried": {
                            "type": "string"
                          }
                        }
                      },
                      "fee": {
                        "type": "number"
                      }
                    }
                  }
                },
                "matches": {
                  "type": "array",
                  "description": "このメールアドレスで見つかった一致です。各一致には`source`があります。`session`（アプリケーション内の別の認証セッションが同じメールアドレスで一致したもの。`session_id`/`session_number`/`vendor_data`/`verification_date`とともに返されます）または`list_entry`（メールアドレスが組織で管理する許可リスト/ブロックリストに登録されているもの。`/management-api/lists/overview`を参照）のいずれかです。セッション間の一致は異なる`vendor_data`を使用し、上限は5件です。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "nullable": true
                      },
                      "session_number": {
                        "type": "integer",
                        "nullable": true
                      },
                      "vendor_data": {
                        "type": "string",
                        "nullable": true
                      },
                      "verification_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "email": {
                        "type": "string",
                        "format": "email"
                      },
                      "status": {
                        "type": "string",
                        "nullable": true
                      },
                      "is_blocklisted": {
                        "type": "boolean"
                      },
                      "api_service": {
                        "type": "string",
                        "nullable": true
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "session",
                          "list_entry"
                        ],
                        "description": "この一致の発生元です。`session`は、アプリケーション内の別の認証セッションがこの値で一致したことを意味します。`list_entry`は、組織が管理するリスト（許可リスト/ブロックリスト）に対してこの値がヒットしたことを意味します。これらのリストの管理方法については、`/management-api/lists/overview`のManagement APIのリスト概要を参照してください。"
                      }
                    }
                  }
                },
                "email_intelligence": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/EmailIntelligence"
                    }
                  ],
                  "description": "メールインテリジェンスのシグナル。このアドレスに対してメールインテリジェンスのアドオンが実行された場合にのみ含まれます。"
                },
                "email_social": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/EmailSocialFootprint"
                    }
                  ],
                  "description": "住所のソーシャルフットプリント。この住所に対してソーシャルフットプリントアドオンが実行された場合にのみ含まれます。"
                }
              }
            }
          },
          "poa_verifications": {
            "type": "array",
            "nullable": true,
            "description": "**住所証明(POA)レポートの配列**。常にJSON配列であり、単一の`poa`オブジェクトになることはありません。少なくとも1つのPOAステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、書類ファイルのURL、発行者、日付、解析済みの住所、`warnings[]`を含みます。",
            "items": {
              "type": "object",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "ワークフローグラフ内のこのPOAステップの一意の識別子。"
                },
                "status": {
                  "type": "string",
                  "description": "この住所証明ステップの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ]
                },
                "document_file": {
                  "type": "string",
                  "format": "uri",
                  "description": "住所証明書類のURL"
                },
                "issuing_state": {
                  "type": "string",
                  "description": "発行国の2文字の国コード"
                },
                "document_type": {
                  "type": "string",
                  "description": "住所証明書類の種類"
                },
                "document_subtype": {
                  "type": "string",
                  "nullable": true,
                  "description": "`document_type`内での住所証明書類のより具体的な分類で、検出された場合に設定されます。それ以外の場合は`null`です。"
                },
                "document_language": {
                  "type": "string",
                  "description": "書類の言語コード"
                },
                "document_metadata": {
                  "type": "object",
                  "properties": {
                    "file_size": {
                      "type": "integer",
                      "description": "書類のサイズ"
                    },
                    "content_type": {
                      "type": "string",
                      "description": "書類のコンテンツタイプ"
                    },
                    "creation_date": {
                      "type": "string",
                      "format": "date",
                      "description": "書類の作成日"
                    },
                    "modified_date": {
                      "type": "string",
                      "format": "date",
                      "description": "書類の更新日"
                    },
                    "overlay_manipulation": {
                      "type": "object",
                      "nullable": true,
                      "description": "オーバーレイテキストによる改ざんが疑われる場合のPDFフォレンジック分析。オーバーレイによる改ざんの証拠が見つからなかった場合、または書類がPDFでなかった場合はnullです。",
                      "properties": {
                        "detected": {
                          "type": "boolean",
                          "description": "オーバーレイテキストによる改ざんの痕跡が検出されたかどうかです。"
                        },
                        "analyzed": {
                          "type": "boolean",
                          "description": "PDFを解析できたかどうか。"
                        },
                        "signals": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "検出されたフォレンジックシグナル（duplicate_font_subsetやglyph_fragmentationなど）。"
                        },
                        "manipulated_regions": {
                          "type": "array",
                          "description": "改ざんが疑われる領域（PDFページ座標）。",
                          "items": {
                            "type": "object",
                            "properties": {
                              "page": {
                                "type": "integer"
                              },
                              "x": {
                                "type": "number"
                              },
                              "y": {
                                "type": "number"
                              },
                              "width": {
                                "type": "number"
                              },
                              "height": {
                                "type": "number"
                              },
                              "page_width": {
                                "type": "number"
                              },
                              "page_height": {
                                "type": "number"
                              }
                            }
                          }
                        }
                      }
                    },
                    "creator": {
                      "type": "string",
                      "nullable": true,
                      "description": "書類のメタデータに記録された作成元アプリケーション。"
                    },
                    "producer": {
                      "type": "string",
                      "nullable": true,
                      "description": "PDFメタデータに記録された作成ソフトウェア(Producer)。"
                    },
                    "software": {
                      "type": "string",
                      "nullable": true,
                      "description": "ファイルのメタデータに記録された編集・加工ソフトウェア。"
                    },
                    "encryption": {
                      "type": "string",
                      "nullable": true,
                      "description": "暗号化されている場合の、書類の暗号化方式。"
                    },
                    "is_signed": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "PDFにデジタル署名が付与されているかどうか。"
                    },
                    "is_tampered": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "署名検証により、ファイルが署名後に変更されたことが示されているかどうかです。"
                    },
                    "signature_info": {
                      "type": "object",
                      "nullable": true,
                      "description": "デジタル署名が存在する場合、その詳細。"
                    },
                    "exif_original_date": {
                      "type": "string",
                      "nullable": true,
                      "description": "画像アップロードにおけるEXIFのオリジナル撮影日時。"
                    },
                    "exif_digitized_date": {
                      "type": "string",
                      "nullable": true,
                      "description": "画像アップロードにおけるEXIFのデジタル化日時。"
                    },
                    "processed_by_known_editor": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "ファイルのメタデータが、既知の書類編集ソフトによる処理を示しているかどうか。"
                    },
                    "has_different_creation_mod_date": {
                      "type": "boolean",
                      "nullable": true,
                      "description": "作成日と更新日が異なるかどうか。改ざんの一般的な兆候です。"
                    }
                  },
                  "description": "アップロードされた住所証明書類から抽出されたファイルフォレンジックのメタデータ。常に以下のキーを含みます(該当しない場合、たとえばPDFのEXIF日付などは値が`null`になります)。メタデータを抽出できなかった場合は`null`です。",
                  "nullable": true
                },
                "issuer": {
                  "type": "string",
                  "description": "書類発行者の名称"
                },
                "issue_date": {
                  "type": "string",
                  "format": "date",
                  "description": "書類の発行日"
                },
                "expiration_date": {
                  "type": "string",
                  "format": "date",
                  "nullable": true,
                  "description": "書類の有効期限（利用可能な場合）"
                },
                "poa_address": {
                  "type": "string",
                  "description": "住所証明書類から取得した生の住所"
                },
                "poa_formatted_address": {
                  "type": "string",
                  "description": "住所証明書類から整形された住所"
                },
                "poa_parsed_address": {
                  "type": "object",
                  "properties": {
                    "address_type": {
                      "type": "string",
                      "description": "住所の種類（Street、Avenueなど）"
                    },
                    "street_1": {
                      "type": "string",
                      "description": "主たる住所(番地)"
                    },
                    "street_2": {
                      "type": "string",
                      "nullable": true,
                      "description": "住所（2行目）"
                    },
                    "city": {
                      "type": "string",
                      "description": "都市名"
                    },
                    "region": {
                      "type": "string",
                      "description": "地域または州の名称"
                    },
                    "country": {
                      "type": "string",
                      "description": "2文字の国コード"
                    },
                    "postal_code": {
                      "type": "string",
                      "description": "郵便番号"
                    },
                    "document_location": {
                      "type": "object",
                      "properties": {
                        "latitude": {
                          "type": "number",
                          "description": "緯度"
                        },
                        "longitude": {
                          "type": "number",
                          "description": "経度座標"
                        }
                      }
                    }
                  }
                },
                "name_on_document": {
                  "type": "string",
                  "nullable": true,
                  "description": "POA書類から抽出された口座名義人または宛名の氏名で、氏名照合に使用されます。氏名を抽出できなかった場合は`null`です。"
                },
                "name_match_score_expected_details": {
                  "type": "number",
                  "nullable": true,
                  "description": "`name_on_document`と、セッション作成時に指定された想定氏名との類似度スコア(0〜100)。いずれかが欠けている場合は`null`です。"
                },
                "name_match_score_id_verification": {
                  "type": "number",
                  "nullable": true,
                  "description": "`name_on_document`と、本人確認ステップで抽出された氏名との類似度スコア(0〜100)。いずれかが欠けている場合は`null`です。"
                },
                "expected_details_address": {
                  "type": "string",
                  "nullable": true,
                  "description": "検証用の想定される未加工の住所"
                },
                "expected_details_formatted_address": {
                  "type": "string",
                  "nullable": true,
                  "description": "検証用の想定される整形済み住所"
                },
                "expected_details_parsed_address": {
                  "type": "object",
                  "description": "検証用の想定される解析済み住所の詳細"
                },
                "extra_fields": {
                  "type": "object",
                  "description": "書類から抽出された追加の銀行情報および連絡先情報。",
                  "properties": {
                    "bank_account_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "bank_iban": {
                      "type": "string",
                      "nullable": true
                    },
                    "bank_sort_code": {
                      "type": "string",
                      "nullable": true
                    },
                    "bank_routing_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "bank_swift_bic": {
                      "type": "string",
                      "nullable": true
                    },
                    "bank_branch_name": {
                      "type": "string",
                      "nullable": true
                    },
                    "bank_branch_address": {
                      "type": "string",
                      "nullable": true
                    },
                    "document_phone_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "additional_names": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "extra_files": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uri"
                  },
                  "description": "住所証明の追加ファイル"
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  }
                },
                "detected_codes": {
                  "type": "array",
                  "description": "書類の処理済みのすべてのページで検出されたQRコードとバーコード。見つからない場合は空です。位置は特定できたもののデコードできないQRコードは`parsed_payload: null`となります。",
                  "items": {
                    "$ref": "#/components/schemas/DocumentAIDetectedCode"
                  }
                },
                "address_validation": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/AddressValidationResult"
                    }
                  ],
                  "nullable": true,
                  "description": "この住所証明に記載された住所の住所検証（Address Validation）です。住所が存在するかどうかと、書類から読み取った正規化された形式を示します（後から`poa_address`を修正しても再実行されません）。この住所証明ステップでAddress Validationアドオンが有効化され、アップロードが書類チェックを通過した場合に存在し、それ以外の場合は`null`です。"
                }
              }
            }
          },
          "document_ai_documents": {
            "type": "array",
            "nullable": true,
            "description": "**ワークフローノードごとにグループ化されたDocument AIレポート**。常にJSON配列で、単一のオブジェクトになることはありません。少なくとも1つのDocument AIステップがデータを生成するまでは`null`です。`session_kind = user`の場合にのみ含まれます。各項目はノードグループで、集計された`status`、`node_id`、書類ごとの結果（設定したフィールドキーをキーとする抽出データ）を格納する`items[]`配列、および`warnings`を含みます。",
            "items": {
              "type": "object",
              "description": "ワークフローノードごとにグループ化されたDocument AIの結果。",
              "properties": {
                "status": {
                  "type": "string",
                  "description": "このノードのDocument AIの集約ステータスで、`items[]`から集計されます。",
                  "enum": [
                    "Approved",
                    "Declined",
                    "In Review",
                    "Not Finished"
                  ]
                },
                "node_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "ワークフローグラフ内のこのDocument AIステップの一意の識別子。"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "node_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "この書類を生成したワークフローグラフのノード。"
                      },
                      "document_key": {
                        "type": "string",
                        "description": "このファイルに対応する、設定済みのDocument AI書類のキー。"
                      },
                      "original_filename": {
                        "type": "string",
                        "nullable": true,
                        "description": "ユーザーがアップロードした際のファイル名。"
                      },
                      "file_size": {
                        "type": "integer",
                        "nullable": true,
                        "description": "ファイルサイズ(バイト)。"
                      },
                      "file_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true,
                        "description": "アップロードされたファイルへの有効期間の短い署名付きリンク。"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "Approved",
                          "Declined",
                          "In Review",
                          "Not Finished"
                        ],
                        "description": "書類ごとのDocument AIステータス。"
                      },
                      "extracted_data": {
                        "type": "object",
                        "additionalProperties": true,
                        "nullable": true,
                        "description": "Document AIが抽出した値で、設定されたフィールドの`key`をキーとします。各値は文字列、数値、または`null`です。"
                      },
                      "detected_codes": {
                        "type": "array",
                        "description": "処理済みのすべてのページで検出されたQRコードとバーコード。見つからない場合は空です。位置は特定できたもののデコードできないQRコードは`parsed_payload: null`となります。",
                        "items": {
                          "$ref": "#/components/schemas/DocumentAIDetectedCode"
                        }
                      },
                      "fields": {
                        "type": "array",
                        "description": "この書類に設定された抽出フィールド。",
                        "items": {
                          "type": "object",
                          "properties": {
                            "key": {
                              "type": "string",
                              "description": "`extracted_data`のキーとして使用される固定のフィールドキー。"
                            },
                            "name": {
                              "type": "string",
                              "description": "人が読めるフィールド名。"
                            },
                            "instruction": {
                              "type": "string",
                              "description": "モデルに提示される抽出指示。"
                            },
                            "type": {
                              "type": "string",
                              "enum": [
                                "text",
                                "number",
                                "date"
                              ],
                              "description": "抽出フィールドの想定される値の型です。"
                            },
                            "required": {
                              "type": "boolean",
                              "description": "Whether this field is required."
                            }
                          }
                        }
                      },
                      "document_metadata": {
                        "type": "object",
                        "nullable": true,
                        "description": "アップロードされた書類から抽出されたファイルフォレンジックのメタデータ(例:`is_tampered`)。何も抽出できなかった場合は`null`です。"
                      },
                      "cross_check_result": {
                        "type": "object",
                        "nullable": true,
                        "description": "抽出した書類フィールドと他のセッションデータとの照合結果。照合が実行されなかった場合は`null`です。"
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time"
                      }
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "nullable": true,
                  "items": {
                    "type": "object"
                  },
                  "description": "このDocument AIノードで発生した警告ログ。"
                }
              }
            }
          },
          "questionnaire_responses": {
            "type": "array",
            "nullable": true,
            "description": "**アンケート回答レポートの配列**。常にJSON配列であり、単一の`questionnaire`オブジェクトになることはありません。少なくとも1つのアンケートステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、アンケートのメタデータ、フォーム要素を含むセクション、ユーザーの回答を含みます。",
            "items": {
              "type": "object",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "ワークフローグラフ内のこのアンケートステップの一意の識別子。"
                },
                "questionnaire_id": {
                  "type": "string",
                  "description": "アンケートの一意の識別子"
                },
                "title": {
                  "type": "string",
                  "description": "アンケートのタイトル"
                },
                "description": {
                  "type": "string",
                  "description": "アンケートの説明"
                },
                "languages": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "対応言語"
                },
                "default_language": {
                  "type": "string",
                  "description": "デフォルト言語"
                },
                "is_active": {
                  "type": "boolean",
                  "description": "アンケートが有効かどうか"
                },
                "is_simple_questionnaire": {
                  "type": "boolean",
                  "description": "アンケートが単純な直線形式のフォーム(分岐グラフなし)かどうか。"
                },
                "questionnaire_group_id": {
                  "type": "string",
                  "format": "uuid",
                  "nullable": true,
                  "description": "バージョンをまたいで不変のアンケートグループの識別子。"
                },
                "version": {
                  "type": "integer",
                  "nullable": true,
                  "description": "回答されたアンケートのバージョン番号。"
                },
                "published_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "このアンケートのバージョンが公開された日時。"
                },
                "sections": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "title": {
                        "type": "string",
                        "nullable": true,
                        "description": "セクションのタイトル"
                      },
                      "description": {
                        "type": "string",
                        "nullable": true,
                        "description": "セクションの説明"
                      },
                      "items": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "description": "アイテムの一意の識別子"
                            },
                            "value": {
                              "type": "string",
                              "nullable": true,
                              "description": "アンケートのグラフ内におけるこのフォーム要素の安定したノード識別子。"
                            },
                            "element_type": {
                              "type": "string",
                              "description": "アンケート要素の種類"
                            },
                            "is_required": {
                              "type": "boolean",
                              "description": "項目が必須かどうか"
                            },
                            "title": {
                              "type": "string",
                              "description": "項目のタイトル"
                            },
                            "description": {
                              "type": "string",
                              "nullable": true,
                              "description": "項目の説明"
                            },
                            "placeholder": {
                              "type": "string",
                              "nullable": true,
                              "description": "プレースホルダーテキスト"
                            },
                            "choices": {
                              "type": "array",
                              "nullable": true,
                              "items": {
                                "type": "object",
                                "properties": {
                                  "label": {
                                    "type": "string"
                                  },
                                  "value": {
                                    "type": "string"
                                  },
                                  "requires_text_input": {
                                    "type": "boolean",
                                    "description": "この選択肢で追加のテキスト入力が必要かどうか",
                                    "nullable": true
                                  }
                                },
                                "required": [
                                  "label",
                                  "value"
                                ]
                              },
                              "description": "ドロップダウンまたは単一選択要素の選択肢"
                            },
                            "max_files": {
                              "type": "integer",
                              "description": "許可される最大ファイル数",
                              "nullable": true
                            },
                            "answer": {
                              "type": "object",
                              "description": "項目に対して提供された回答",
                              "properties": {
                                "value": {
                                  "type": "string",
                                  "nullable": true
                                },
                                "text": {
                                  "type": "string",
                                  "nullable": true
                                },
                                "files": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "nullable": true
                                }
                              }
                            },
                            "required_if": {
                              "type": "object",
                              "nullable": true,
                              "description": "特定の回答に対してのみ要素が必須となる場合の条件付き必須ルール。"
                            },
                            "repeatable_config": {
                              "type": "object",
                              "nullable": true,
                              "description": "該当する場合の、繰り返し可能な要素グループの設定。"
                            }
                          },
                          "required": [
                            "uuid",
                            "value",
                            "element_type",
                            "is_required",
                            "title"
                          ]
                        }
                      }
                    }
                  }
                },
                "status": {
                  "type": "string",
                  "description": "アンケートのステータス"
                }
              }
            }
          },
          "bank_verifications": {
            "type": "array",
            "nullable": true,
            "description": "ユーザー認証および法人確認における銀行口座認証の結果で、銀行口座認証ステップごとに1項目です。ステップが結果を生成するまでは`null`です。各項目の`method`は口座の認証方法を示します。`open_banking`（銀行へのサインイン）または`account_lookup`（口座照会）、フォールバックとしての`statement`または`microdeposits`のいずれかで、いずれの試行も評価される前に本人が銀行を使わずに続行した場合（`continued_without_bank`）は`none`です。詳細は[銀行口座認証の方法](/ja/core-technology/bank-verification/verification-methods)を参照してください。銀行口座認証は本番環境ではまだ有効化されていないため、有効化されるまで本番環境のセッションではこの値は`null`のままです。",
            "items": {
              "$ref": "#/components/schemas/BankVerificationResult"
            }
          },
          "signatures": {
            "type": "array",
            "description": "ユーザー認証および法人確認における電子署名の結果で、署名者と署名ステップごとに1項目です。ワークフローに電子署名ステップがある場合にのみ存在し、署名者がそのステップに到達するまでは空の配列です。[電子署名レポート](/ja/core-technology/electronic-signature/report-electronic-signature)を参照してください。",
            "items": {
              "$ref": "#/components/schemas/SignatureResult"
            }
          },
          "aml_screenings": {
            "type": "array",
            "nullable": true,
            "description": "**AMLスクリーニングレポートの配列**。常にJSON配列であり、単一の`aml`オブジェクトになることはありません。少なくとも1つのAMLステップがデータを生成するまでは`null`です。各項目は完全なレポートで、`node_id`、機能レベルの`status`、`total_hits`、`entity_type`、`hits[]`、`score`、`screened_data`、`is_ongoing_monitoring_enabled`、`warnings[]`を含みます。",
            "items": {
              "$ref": "#/components/schemas/AMLScreening"
            }
          },
          "ip_analyses": {
            "type": "array",
            "nullable": true,
            "description": "**デバイス・IP分析レポートの配列**。常にJSON配列であり、単一の`ip_analysis`オブジェクトになることはありません。少なくとも1つのIP分析ステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、IPおよび位置情報データ、デバイスフィンガープリント、`warnings[]`を含みます。`(node_id, ip_address, device_fingerprint)`が重複するエントリは、サーバー側で重複排除されます。",
            "items": {
              "type": "object",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "ワークフローグラフ内のこのデバイス・IP分析ステップの一意の識別子。"
                },
                "status": {
                  "type": "string",
                  "description": "このデバイス・IP分析エントリーの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ]
                },
                "device_brand": {
                  "type": "string",
                  "description": "使用されたデバイスのブランド"
                },
                "device_model": {
                  "type": "string",
                  "description": "使用されたデバイスの機種"
                },
                "browser_family": {
                  "type": "string",
                  "description": "使用されたブラウザファミリー"
                },
                "os_family": {
                  "type": "string",
                  "description": "オペレーティングシステムのファミリー"
                },
                "platform": {
                  "type": "string",
                  "description": "プラットフォームの種類(mobile、desktopなど)"
                },
                "device_fingerprint": {
                  "type": "string",
                  "nullable": true,
                  "description": "一意のデバイスフィンガープリント識別子"
                },
                "ip_country": {
                  "type": "string",
                  "description": "IPから検出された国"
                },
                "ip_country_code": {
                  "type": "string",
                  "description": "IPから判定した2文字の国コード"
                },
                "ip_state": {
                  "type": "string",
                  "description": "IPから検出された州・地域"
                },
                "ip_city": {
                  "type": "string",
                  "description": "IPから検出された都市"
                },
                "latitude": {
                  "type": "number",
                  "description": "IPの位置情報の緯度"
                },
                "longitude": {
                  "type": "number",
                  "description": "IP位置情報の経度座標"
                },
                "ip_address": {
                  "type": "string",
                  "description": "IPアドレス"
                },
                "isp": {
                  "type": "string",
                  "nullable": true,
                  "description": "インターネットサービスプロバイダー"
                },
                "organization": {
                  "type": "string",
                  "nullable": true,
                  "description": "IPに関連付けられた組織"
                },
                "is_vpn_or_tor": {
                  "type": "boolean",
                  "description": "IPがVPNまたはTorネットワークからのものかどうか"
                },
                "is_data_center": {
                  "type": "boolean",
                  "description": "IPがデータセンターからのものかどうか"
                },
                "time_zone": {
                  "type": "string",
                  "description": "IPから検出されたタイムゾーン"
                },
                "time_zone_offset": {
                  "type": "string",
                  "description": "タイムゾーンのオフセット"
                },
                "ip": {
                  "type": "object",
                  "description": "このエントリのIPジオロケーションと、本人確認書類の住所および住所証明書類の住所までの大圏距離（km）。いずれか一方の位置を特定できない場合、距離は`null`になります。",
                  "properties": {
                    "location": {
                      "type": "object",
                      "nullable": true,
                      "properties": {
                        "latitude": {
                          "type": "number",
                          "example": 41.2706327
                        },
                        "longitude": {
                          "type": "number",
                          "example": 1.9770097
                        }
                      },
                      "description": "座標。利用できない場合は`null`。"
                    },
                    "distance_from_id_document": {
                      "type": "number",
                      "nullable": true,
                      "example": 23.4
                    },
                    "distance_from_poa_document": {
                      "type": "number",
                      "nullable": true,
                      "example": 12.3
                    }
                  }
                },
                "id_document": {
                  "type": "object",
                  "description": "身分証明書の住所から抽出された位置情報と、IPジオロケーションおよび住所証明書類の住所までの距離（km）。書類の住所をジオコーディングできなかった場合、`location`は`null`です。",
                  "properties": {
                    "location": {
                      "type": "object",
                      "nullable": true,
                      "properties": {
                        "latitude": {
                          "type": "number",
                          "example": 41.2706327
                        },
                        "longitude": {
                          "type": "number",
                          "example": 1.9770097
                        }
                      },
                      "description": "座標。利用できない場合は`null`。"
                    },
                    "distance_from_ip": {
                      "type": "number",
                      "nullable": true,
                      "example": 23.4
                    },
                    "distance_from_poa_document": {
                      "type": "number",
                      "nullable": true,
                      "example": 18.7
                    }
                  }
                },
                "poa_document": {
                  "type": "object",
                  "description": "住所証明書類から抽出された位置情報と、IPジオロケーションおよび身分証明書の住所までの距離（km）。セッションに住所証明のステップがない場合、または住所をジオコーディングできなかった場合、`location`は`null`です。",
                  "properties": {
                    "location": {
                      "type": "object",
                      "nullable": true,
                      "properties": {
                        "latitude": {
                          "type": "number",
                          "example": 41.2706327
                        },
                        "longitude": {
                          "type": "number",
                          "example": 1.9770097
                        }
                      },
                      "description": "座標。利用できない場合は`null`。"
                    },
                    "distance_from_ip": {
                      "type": "number",
                      "nullable": true,
                      "example": 12.3
                    },
                    "distance_from_id_document": {
                      "type": "number",
                      "nullable": true,
                      "example": 18.7
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  }
                },
                "matches": {
                  "type": "array",
                  "description": "このエントリーのIPアドレスまたはデバイスIDについて見つかったセッション間の一致。各一致は、アプリケーション内で同じ値を共有する別の認証セッション（`source`は常に`session`）であり、常に現在のセッションとは異なるベンダーユーザー/`vendor_data`に属します。一致はコレクターごとに最大5件です（`device_fingerprint`はそれぞれ個別に上限が設定された2つのコレクターの合計のため、最大10件になる場合があります）。すべての項目に`match_source`、`confidence`、`match_mode`、`device_info`、`location_info`が含まれ、`recovery_similarity`、`tls_ja4_corroborated`、`recovery_gate_reason`のキーは`match_source`が`recovered_high`の場合にのみ存在します。",
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "session_id": {
                        "type": "string",
                        "format": "uuid",
                        "description": "一致したセッションのセッションID。"
                      },
                      "session_number": {
                        "type": "integer",
                        "description": "一致したセッションの連番。"
                      },
                      "vendor_data": {
                        "type": "string",
                        "nullable": true,
                        "description": "該当するセッションの`vendor_data`です。常に現在のセッションのベンダーユーザーとは異なります。"
                      },
                      "verification_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "一致したセッションの作成日（`YYYY-MM-DDTHH:MM:SSZ`）。"
                      },
                      "match_type": {
                        "type": "string",
                        "enum": [
                          "ip_address",
                          "device_fingerprint"
                        ],
                        "description": "一致がIPアドレスとデバイスフィンガープリントのどちらによるものか"
                      },
                      "match_source": {
                        "type": "string",
                        "enum": [
                          "ip_address",
                          "persistent_id",
                          "legacy_fp",
                          "recovered_high"
                        ],
                        "description": "この一致がどのように得られたか。`ip_address`（共有IPアドレス。ネットワーク上の同居を示すもので、デバイスの同一性を主張するものではありません）、`persistent_id`（保存された永続的なデバイス識別子との完全一致）、`legacy_fp`（従来の`didit-fp-*`デバイスフィンガープリントハッシュ）、または`recovered_high`（高信頼度のファジーなフィンガープリント復元によるヒット）のいずれかです。信頼度の低い復元候補はリスク警告としてのみ表示され、この配列に含まれることはありません。"
                      },
                      "matched_value": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致した値。共有IPアドレス、永続的なデバイス識別子またはレガシーのフィンガープリントハッシュ、`recovered_high`の場合は復元されたデバイスのUUIDです。"
                      },
                      "status": {
                        "type": "string",
                        "description": "一致したセッションのライフサイクルステータス。"
                      },
                      "is_blocklisted": {
                        "type": "boolean",
                        "description": "一致した値がブロックリストに登録されているかどうか。デバイス/IPの一致では、現在は常に`false`です。"
                      },
                      "api_service": {
                        "type": "string",
                        "nullable": true,
                        "description": "一致したセッションのスタンドアロンAPIサービス。ワークフローセッションでは`null`です。"
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "session"
                        ],
                        "description": "デバイス/IPの一致では常に`session`です。一致はすべて、お使いのアプリケーション内の別の認証セッションです。"
                      },
                      "device_info": {
                        "type": "object",
                        "description": "一致したセッションで観測されたデバイスの詳細です。",
                        "properties": {
                          "device_brand": {
                            "type": "string",
                            "nullable": true
                          },
                          "device_model": {
                            "type": "string",
                            "nullable": true
                          },
                          "browser_family": {
                            "type": "string",
                            "nullable": true
                          },
                          "os_family": {
                            "type": "string",
                            "nullable": true
                          },
                          "platform": {
                            "type": "string",
                            "nullable": true
                          },
                          "device_fingerprint": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      },
                      "location_info": {
                        "type": "object",
                        "description": "一致したセッションで観測されたネットワークおよび位置情報の詳細。",
                        "properties": {
                          "ip_address": {
                            "type": "string",
                            "nullable": true
                          },
                          "ip_country": {
                            "type": "string",
                            "nullable": true
                          },
                          "ip_country_code": {
                            "type": "string",
                            "nullable": true
                          },
                          "ip_state": {
                            "type": "string",
                            "nullable": true
                          },
                          "ip_city": {
                            "type": "string",
                            "nullable": true
                          },
                          "is_vpn_or_tor": {
                            "type": "boolean"
                          },
                          "is_data_center": {
                            "type": "boolean"
                          }
                        }
                      },
                      "confidence": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1,
                        "description": "サーバー側の識別信頼度で、`1 - P(false positive)`として算出されます。決定論的な一致（`persistent_id`、またはハードウェアに根差した`recovered_high`）は`1.0`、`legacy_fp`は`0.5`、`ip_address`（同一ロケーションのみ）は`0.0`、確率的な復元一致には裏付けに応じて調整された`1.0`未満の値が設定されます（TLS JA4フィンガープリントとIPの国が独立して一致する場合は高くなります）。"
                      },
                      "match_mode": {
                        "type": "string",
                        "enum": [
                          "deterministic",
                          "probabilistic",
                          "co_occurrence"
                        ],
                        "description": "一致のエビデンス区分です。`deterministic`（物理デバイス間で衝突することのない、保存済みまたはハードウェアに由来する完全一致の識別子）、`probabilistic`（曖昧なフィンガープリントのエビデンス）、`co_occurrence`（ネットワークの共有のみで、デバイスの同一性は主張しない）のいずれかです。"
                      },
                      "recovery_similarity": {
                        "type": "number",
                        "description": "フィンガープリント復元による一致のコサイン類似度(小数点以下4桁に丸め)。`match_source`が`recovered_high`の場合にのみ含まれます。"
                      },
                      "tls_ja4_corroborated": {
                        "type": "boolean",
                        "description": "2つの観測のTLS JA4フィンガープリントが一致するかどうか。ブラウザ側では偽装できない、サーバー側で観測されるシグナルです。`match_source`が`recovered_high`の場合にのみ含まれます。"
                      },
                      "recovery_gate_reason": {
                        "type": "string",
                        "description": "復旧照合が誤検知防止のハードゲートを通過した理由。`hardware_root_match`（ハードウェアに根ざしたデバイス識別子が完全一致した）、またはプローブのみの証拠を許容する設定では`exact_composite_plus_<n>_families` / `very_high_similarity_plus_<n>_families`です。`match_source`が`recovered_high`の場合にのみ含まれます。"
                      }
                    }
                  }
                },
                "browser_version": {
                  "type": "string",
                  "nullable": true
                },
                "os_version": {
                  "type": "string",
                  "nullable": true
                },
                "user_agent": {
                  "type": "string",
                  "nullable": true,
                  "description": "ブラウザのユーザーエージェント文字列。"
                },
                "accept_language": {
                  "type": "string",
                  "nullable": true,
                  "description": "ブラウザが送信した`Accept-Language`ヘッダーです。"
                },
                "session_identifier": {
                  "type": "string",
                  "nullable": true,
                  "description": "検証が実行されたブラウジングセッションの識別子。"
                },
                "session_age_ms": {
                  "type": "integer",
                  "nullable": true,
                  "description": "ステップ実行時点での、そのブラウジングセッションの経過時間（ミリ秒）。"
                },
                "coords_accuracy": {
                  "type": "number",
                  "nullable": true,
                  "description": "デバイスが報告した座標の精度半径（メートル単位）。"
                },
                "raw_device_data": {
                  "type": "object",
                  "nullable": true,
                  "additionalProperties": true,
                  "description": "このステップで収集された生のデバイスシグナル。"
                }
              }
            }
          },
          "geolocation_checks": {
            "type": "array",
            "nullable": true,
            "description": "**位置情報検証結果の配列**。位置情報検証ステップごとに1件で、そのステップで受理された試行が入ります。位置情報検証ステップがデータを生成するまでは`null`です。同じステップの以前の試行は`geolocation_attempts`にあります。",
            "items": {
              "$ref": "#/components/schemas/GeolocationCheck"
            }
          },
          "geolocation_attempts": {
            "type": "array",
            "nullable": true,
            "description": "このセッションのすべての位置情報検証ステップにおける全試行を古い順に示します。再提出によって置き換えられた試行は含まれません。レスポンス属性で`geolocation_checks`を非表示にしているワークフローでは、このリストも非表示になります。",
            "items": {
              "$ref": "#/components/schemas/GeolocationAttempt"
            }
          },
          "database_validations": {
            "type": "array",
            "nullable": true,
            "description": "**データベース検証レポートの配列**：常にJSON配列であり、単一の`database_validation`オブジェクトになることはありません。少なくとも1つのDB検証ステップがデータを生成するまでは`null`です。各要素は完全なレポートで、`node_id`、機能レベルの`status`、`screened_data`、サービスごとの`validations[]`（それぞれに登録機関の`source_data`を含む）、`warnings[]`を含みます。`screened_data`と`source_data`のフィールドは国によって異なります。\n\n**ARG（アルゼンチン）**：screened_data: {document_number, selfie, gender, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name, date_of_birth, date_of_death, tax_id, tax_id_type, face_match_score, sit_1_since, banks, last_position, highest_position, rejected_checks}。RENAPERの生体顔照合による検証を使用します。書類に性別が記載されていない場合（運転免許証など）、性別は顔分析または名から自動的に推定されます。\n\n**BOL（ボリビア）**：screened_data: {document_number, date_of_birth, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name, date_of_birth, gender}\n\n**BRA（ブラジル）**：screened_data: {tax_number, first_name, last_name, date_of_birth}。CPFの照合に成功した場合、source_dataには常に{identification_number, first_name, last_name, date_of_birth, lgpd_minor, minor_under_18, minor_under_16}が含まれます。成人の照会に成功した場合、これらのフラグはfalseに設定されます。Receita FederalのConsulta CPFサービスは、LGPDにより開示が保留されたデータとともにHTTP 422（18歳未満の未成年者）または451（16歳未満）を返す場合があります。その場合、source_dataでは該当する未成年者フラグがtrueに設定され、上流のHTTPステータスが含まれ、フィールドレベルの検証はno_matchになります。コードの全一覧は、Database Validation Outcome Codesリファレンスのブラジルのセクションを参照してください。\n\n**CHL（チリ）**：screened_data: {personal_number, first_name, last_name, date_of_birth}。source_data: {identification_number, first_name, last_name, date_of_birth, gender}\n\n**COL（コロンビア）**：screened_data: {document_number, document_type, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name, date_of_birth, document_type}\n\n**CRI（コスタリカ）**：screened_data: {personal_number, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name}\n\n**DOM（ドミニカ共和国）**：screened_data: {personal_number}。source_data: {identification_number}（有効/無効のみを返します）\n\n**ECU（エクアドル）**：screened_data: {personal_number, first_name, last_name}。source_data: {identification_number, first_name, last_name, street, formatted_address, gender, nationality, education, marital_status, spouse, mother_name, father_name, profession}\n\n**ESP（スペイン）**：screened_data: {personal_number, document_type, expiration_date, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name, document_type, expiration_date}\n\n**GTM（グアテマラ）**：screened_data: {document_number, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name}\n\n**HND（ホンジュラス）**：screened_data: {document_number, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name}\n\n**MEX（メキシコ）**：screened_data: {personal_number (CURP), first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name, date_of_birth, gender, nationality, curp_status, state_of_birth, doc_probatorio, registration_year, registration_state, registration_municipality, num_acta, crip, issuing_state_code, foreign_registry_number, folio_carta, folio_certificado}。RENAPOの住民登録を使用します。MEXでは、追加の個別検証として、別途INEの有効性確認サービスも利用できます。\n\n**PAN（パナマ）**：screened_data: {personal_number, selfie}。source_data: {identification_number}。SIBの生体認証による検証を使用します。\n\n**PER（ペルー）**：screened_data: {personal_number (DNI), first_name, last_name}。source_data: {identification_number, first_name, last_name, paternal_name, maternal_name, verification_number, verification_letter}\n\n**PRY（パラグアイ）**：screened_data: {document_number, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name}\n\n**SLV（エルサルバドル）**：screened_data: {document_number, date_of_birth, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name}\n\n**URY（ウルグアイ）**：screened_data: {personal_number, date_of_birth, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name}\n\n**VEN（ベネズエラ）**：screened_data: {document_number, first_name, last_name}。source_data: {identification_number, first_name, last_name, full_name, gender, date_of_birth, document_type}",
            "items": {
              "type": "object",
              "properties": {
                "node_id": {
                  "type": "string",
                  "description": "ワークフローグラフ内のこのデータベース検証ステップの一意の識別子。"
                },
                "issuing_state": {
                  "type": "string",
                  "description": "政府・登記機関のデータソースを照会した国のISO 3166-1 alpha-3コード(例: `BRA`、`MEX`、`ESP`、`NGA`、`IDN`)。データベース検証は、南北アメリカ、ヨーロッパ、アフリカ、中東、アジア太平洋の60+か国に加え、複数の国にまたがるグローバルなソースにも対応しています。対応範囲は定期的に拡大するため、この値は固定のenumではなく、今後も値が追加される集合として扱ってください。"
                },
                "validation_type": {
                  "type": "string",
                  "enum": [
                    "one_by_one",
                    "two_by_two",
                    "not_enabled"
                  ],
                  "description": "結果の裏付け方法：`one_by_one`（単一サービスの結果）、`two_by_two`（2つ以上の異なるサービスがそれぞれ独立して識別番号に完全一致）、または`not_enabled`（どのサービスも利用可能な一致を得られなかった場合に保存）。値が`null`になることはありません。生体認証専用の2x2検証モードは現在`ECU`と`PER`で利用できます。"
                },
                "screened_data": {
                  "type": "object",
                  "description": "検証に使用する入力データです。フィールドは国によって異なります。国別の形式については、データベース検証のドキュメント(`/core-technology/database-validation/overview`)を参照してください。",
                  "properties": {
                    "last_name": {
                      "type": "string"
                    },
                    "first_name": {
                      "type": "string"
                    },
                    "tax_number": {
                      "type": "string",
                      "description": "ブラジル：CPF（11桁）"
                    },
                    "personal_number": {
                      "type": "string",
                      "description": "チリ: RUT、DOM: Cédula（11桁）、ECU: Cédula（10桁）、ESP: DNI/NIE、MEX: CURP（18文字）、PER: DNI（8桁）、URY: CI"
                    },
                    "document_number": {
                      "type": "string",
                      "description": "ARG: DNI、BOL: CI、COL: Cédula、GTM: DPI、HND: DNI、PAN: Cédula、PRY: CI、SLV: DUI、VEN: Cédula"
                    },
                    "date_of_birth": {
                      "type": "string",
                      "format": "date"
                    },
                    "document_type": {
                      "type": "string",
                      "description": "COL:CC/CE/TI/NIT、ESP:ID/PASSPORT"
                    },
                    "expiration_date": {
                      "type": "string",
                      "format": "date",
                      "description": "ESPでは必須"
                    }
                  }
                },
                "validations": {
                  "type": "array",
                  "description": "検証ペイロードを返した登記サービスごとに1エントリー。各エントリーはサービス（`service_id`、`service_name`）を識別し、フィールドごとの`validation`比較、報告された場合はサービスの`outcome_code` / `outcome_detail`、および`source_data`内の正規化された登記レコードを含みます。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "service_id": {
                        "type": "string",
                        "description": "この検証結果を生成したレジストリサービスの識別子。",
                        "example": "bra_cpf"
                      },
                      "service_name": {
                        "type": "string",
                        "description": "登記サービスの人が読める名前。",
                        "example": "Brazil - CPF status check"
                      },
                      "validation": {
                        "type": "object",
                        "description": "フィールド検証の結果です。",
                        "properties": {
                          "full_name": {
                            "type": "string",
                            "description": "氏名の照合結果（例: 'full_match'、'partial_match'、'no_match'）。"
                          },
                          "date_of_birth": {
                            "type": "string",
                            "description": "生年月日の照合結果。"
                          },
                          "identification_number": {
                            "type": "string",
                            "description": "識別番号の照合結果。"
                          }
                        }
                      },
                      "outcome_code": {
                        "type": "string",
                        "nullable": true,
                        "description": "登記照会の機械可読な結果（例: `MATCH`、`NO_MATCH`、`PARTIAL_MATCH`、`INCONCLUSIVE`、ソース固有のコード）。サービスが結果を報告した場合に含まれます。"
                      },
                      "outcome_detail": {
                        "type": "string",
                        "nullable": true,
                        "description": "`outcome_code`を人が読める形で説明したもの（サービスから提供される場合）。"
                      },
                      "source_data": {
                        "type": "object",
                        "description": "政府データベースから返されたデータ。共通フィールド:identification_number、first_name、last_name、full_name、date_of_birth、gender。国ごとの追加フィールド:BRAでは、CPFの照合に成功した場合は常にlgpd_minor、minor_under_18、minor_under_16が含まれます。また、LGPDに基づいてCPFデータが開示されない場合(HTTP 422/451)は、上流のHTTPステータスも含まれます。ECUではstreet、formatted_address、nationality、education、marital_status、spouse、mother_name、father_name、professionが追加されます。PERではpaternal_name、maternal_name、verification_number、verification_letterが追加されます。ESPではdocument_type、expiration_dateが追加されます。VEN/COLではdocument_typeが追加されます。",
                        "additionalProperties": true
                      }
                    }
                  }
                },
                "errors": {
                  "type": "array",
                  "description": "検証中に登記サービスから返されたエラー。それぞれに、エラーを生成した`service_id`のタグが付きます。**エラーがない場合、このキー自体が省略されます。**",
                  "items": {
                    "type": "object",
                    "description": "上流サービスのエラーオブジェクトをそのまま展開したもの（キーはサービスによって異なり、一般的にはメッセージやコード、プロバイダー固有の詳細を含みます）に、エラーが発生したサービスを示す`service_id`を加えたもの。",
                    "properties": {
                      "service_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "エラーが発生したレジストリサービスの識別子。"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "match_type": {
                  "type": "string",
                  "enum": [
                    "no_match",
                    "partial_match",
                    "full_match"
                  ],
                  "nullable": true,
                  "description": "照会したサービス全体での総合的な照合結果。検証が評価されるまでは`null`です。"
                },
                "status": {
                  "type": "string",
                  "description": "このデータベース検証の機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ]
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": {
                        "type": "string",
                        "enum": [
                          "ID_VERIFICATION",
                          "NFC",
                          "LIVENESS",
                          "FACEMATCH",
                          "PROOF_OF_ADDRESS",
                          "PHONE",
                          "EMAIL",
                          "AML",
                          "LOCATION",
                          "DATABASE_VALIDATION",
                          "QUESTIONNAIRE",
                          "DOCUMENT_AI",
                          "KYB_REGISTRY",
                          "KYB_DOCUMENTS",
                          "KYB_KEY_PEOPLE",
                          "GEOLOCATION",
                          "SIGNATURE"
                        ],
                        "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                      },
                      "risk": {
                        "type": "string"
                      },
                      "additional_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "log_type": {
                        "type": "string"
                      },
                      "short_description": {
                        "type": "string"
                      },
                      "long_description": {
                        "type": "string"
                      },
                      "node_id": {
                        "type": "string",
                        "description": "この警告を生成したワークフローグラフのノードID"
                      }
                    }
                  },
                  "description": "データベース検証に関する警告。"
                }
              }
            }
          },
          "database_validation_not_performed_reason": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "設定済みのデータベース検証で結果が得られなかった理由で、`{code, message}`とコンテキストフィールドで表されます。ステップを含むワークフローで`database_validations`が`null`の場合にのみ存在するため、「登記機関の情報と一致した」場合と「何も実行されなかった」場合を区別できます。それ以外の場合は`null`です。",
            "properties": {
              "code": {
                "type": "string",
                "description": "安定した機械可読の理由。"
              },
              "message": {
                "type": "string",
                "description": "人が読める説明文。"
              }
            }
          },
          "reviews": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "user": {
                  "type": "string",
                  "description": "レビューを実行した者です。通常はコンソールのレビュアーの識別子（メールアドレス）ですが、APIキーで行われたステータス更新では値が`\"API Client\"`、実行者を特定できなかった場合は`\"Unknown\"`になります。そのため、このフィールドをメールアドレスとして解析しないでください。"
                },
                "new_status": {
                  "type": "string"
                },
                "comment": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "assignee": {
            "type": "object",
            "nullable": true,
            "description": "セッションが割り当てられているConsoleのレビュアー。誰も担当していない場合は`null`です。",
            "properties": {
              "email": {
                "type": "string",
                "format": "email"
              },
              "assigned_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              }
            }
          },
          "waiting_since": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "セッションがレビュー待ちになった日時。セッションが`In Review`で、かつアプリケーションにレビュー期限が設定されている場合を除き`null`です。"
          },
          "sla_due_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "レビューの期限。セッションが`In Review`で、かつアプリケーションにレビュー期限が設定されている場合を除き`null`です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "セッションが作成された日時(ISO 8601、UTC)。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このセッションの有効期限が切れる予定の日時です。作成時に有効期限が設定された場合(または`Approved`ステータスによってKYCの有効期限の計算がトリガーされた時点で)、ユーザー認証 (KYC)セッションに設定されます。有効期限が設定されていないセッション、および有効期限を使用しない種類(例:`expires_at`を一度も受け取っていない法人確認 (KYB)セッション)では`null`です。"
          },
          "registry_checks": {
            "type": "array",
            "nullable": true,
            "description": "法人登記チェック。`session_kind = business`の場合にのみ含まれます。各項目は法人登記のペイロード全体をラップします。",
            "items": {
              "type": "object",
              "description": "法人登記チェック1件。所有構造と警告で補強された法人登記ペイロード全体です。`session_kind = business`の場合にのみ存在します。",
              "properties": {
                "status": {
                  "type": "string",
                  "description": "機能のライフサイクルステータス。"
                },
                "node_id": {
                  "type": "string",
                  "nullable": true
                },
                "data_resolved": {
                  "type": "boolean"
                },
                "company": {
                  "type": "object",
                  "description": "企業の完全な登記ペイロード（登記レコードに、ユーザーが提供したデータやコンソールで編集されたデータを統合したもの）。",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "node_id": {
                      "type": "string",
                      "nullable": true
                    },
                    "status": {
                      "type": "string"
                    },
                    "registry_status": {
                      "type": "string",
                      "nullable": true
                    },
                    "data_resolved": {
                      "type": "boolean"
                    },
                    "company_name": {
                      "type": "string"
                    },
                    "registration_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "country_code": {
                      "type": "string",
                      "description": "設立国（ISO 3166-1 alpha-2、例: `GB`、`DE`、`US`）。"
                    },
                    "region": {
                      "type": "string",
                      "nullable": true,
                      "description": "該当する場合のISO 3166-2地域区分コード（例: 米国の州を表す`CA`、`NY`）。"
                    },
                    "company_type": {
                      "type": "string",
                      "nullable": true
                    },
                    "incorporation_date": {
                      "type": "string",
                      "format": "date",
                      "nullable": true
                    },
                    "registered_address": {
                      "type": "string",
                      "nullable": true
                    },
                    "tax_number": {
                      "type": "string",
                      "nullable": true
                    },
                    "risk_level": {
                      "type": "string",
                      "enum": [
                        "LOW",
                        "MEDIUM",
                        "HIGH"
                      ],
                      "nullable": true
                    },
                    "verification_status": {
                      "type": "string",
                      "nullable": true
                    },
                    "is_from_registry": {
                      "type": "boolean"
                    },
                    "fetch_status": {
                      "type": "string",
                      "nullable": true
                    },
                    "alternative_names": {
                      "type": "string",
                      "nullable": true,
                      "description": "報告されている場合の、別名、商号、旧社名、または原語表記の企業名（テキスト）です。"
                    },
                    "nature_of_business": {
                      "type": "string",
                      "nullable": true
                    },
                    "registered_capital": {
                      "type": "string",
                      "nullable": true
                    },
                    "registered_capital_amount": {
                      "type": "string",
                      "format": "decimal",
                      "nullable": true,
                      "description": "登録資本金・株式資本の金額を10進数の文字列で表したもの（例: `\"100.00\"`）。登記申告書から解析されます。取得できない場合は`null`です。"
                    },
                    "registered_capital_currency": {
                      "type": "string",
                      "nullable": true,
                      "description": "`registered_capital_amount`のISO 4217通貨コード（例: `\"GBP\"`）。取得できない場合は`null`です。"
                    },
                    "website": {
                      "type": "string",
                      "nullable": true
                    },
                    "email": {
                      "type": "string",
                      "format": "email",
                      "nullable": true
                    },
                    "phone": {
                      "type": "string",
                      "nullable": true
                    },
                    "legal_entity_identifier": {
                      "type": "string",
                      "nullable": true
                    },
                    "location_of_registration": {
                      "type": "string",
                      "nullable": true
                    },
                    "vat_number": {
                      "type": "string",
                      "nullable": true,
                      "description": "EUのVAT番号。ホスト型の登記ステップで収集された場合、またはその後に編集された場合に設定されます。"
                    },
                    "vat_validation_status": {
                      "type": "string",
                      "enum": [
                        "valid",
                        "invalid",
                        "format_valid",
                        "invalid_format",
                        "could_not_validate",
                        "not_applicable"
                      ],
                      "description": "登記の送信時に、VAT番号（ない場合は`tax_number`）を検証した結果。`valid` / `invalid`：その国の公式登記（EU VIES、ノルウェー、スイス、ブラジル、コロンビア、コスタリカ、エクアドル、パラグアイ。ポーランドは国内のVAT登録簿でも判定）によって判定されます。`format_valid` / `invalid_format`：照会できる登記がない場合に、その国の形式およびチェックディジットのルールによって判定されます。`could_not_validate`：登記を利用できませんでした。`not_applicable`：番号がない、登記もルールもない国である、またはサンドボックスのセッションです。"
                    },
                    "vat_validated_number": {
                      "type": "string",
                      "nullable": true,
                      "description": "確認された番号で、ソース側で認識されている形式のもの（例: フランスのSIRENやオランダのRSINから導出されたVAT番号）。確認が実行されなかった場合は`null`です。"
                    },
                    "vat_validation_source": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        "eu_vies",
                        "pl_vat_white_list",
                        "no_brreg",
                        "ch_uid_register",
                        "br_receita_federal",
                        "co_rues",
                        "cr_hacienda",
                        "ec_sri",
                        "py_dnit",
                        "format_rules",
                        null
                      ],
                      "description": "`vat_validation_status`を決定したソース。公式の登記簿、または`format_rules`です。チェックが実行されなかった場合は`null`です。"
                    },
                    "vat_validated_name": {
                      "type": "string",
                      "nullable": true,
                      "description": "番号を検証したソースに登録されている名義（ソースが開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                    },
                    "vat_validated_address": {
                      "type": "string",
                      "nullable": true,
                      "description": "番号を検証した情報源に登録されている住所（情報源が開示している場合）。ステータスが`valid`の場合にのみ設定されます。"
                    },
                    "vat_checked_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "チェックの日時。チェックが実行されなかった場合は`null`です。"
                    },
                    "financial_summary": {
                      "type": "object",
                      "nullable": true
                    },
                    "officers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "type": "string"
                          },
                          "designation": {
                            "type": "string",
                            "nullable": true
                          },
                          "role": {
                            "type": "string",
                            "nullable": true
                          },
                          "nationality": {
                            "type": "string",
                            "nullable": true
                          },
                          "is_active": {
                            "type": "boolean"
                          },
                          "kyc_status": {
                            "type": "string",
                            "enum": [
                              "Approved",
                              "Declined",
                              "Pending"
                            ],
                            "nullable": true
                          },
                          "kyc_session_url": {
                            "type": "string",
                            "format": "uri",
                            "nullable": true
                          },
                          "first_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記機関が明示的に報告した場合の名。氏名からは推測されません。"
                          },
                          "last_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記簿で明示的に報告されている場合の姓。"
                          },
                          "address": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記簿に記載されている役員の住所。"
                          },
                          "appointment_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "役員の就任日。",
                            "format": "date"
                          },
                          "termination_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "役職の終了日（報告されている場合）。",
                            "format": "date"
                          },
                          "date_of_birth": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記で報告された完全な生年月日。生年または生年月のみが判明している場合はnullです。",
                            "format": "date"
                          },
                          "date_of_birth_year": {
                            "type": "integer",
                            "nullable": true,
                            "minimum": 1,
                            "maximum": 9999,
                            "description": "登記所が報告した生まれ年。完全な日付が取得できない場合も含みます。"
                          },
                          "date_of_birth_month": {
                            "type": "integer",
                            "nullable": true,
                            "minimum": 1,
                            "maximum": 12,
                            "description": "登記所が報告した生まれ月。年のみ判明している場合はnullです。"
                          }
                        }
                      }
                    },
                    "beneficial_owners": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "type": "string"
                          },
                          "first_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "last_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "entity_type": {
                            "type": "string",
                            "enum": [
                              "person",
                              "company"
                            ]
                          },
                          "roles": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "ownership_min_shares": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記簿が報告する所有比率の下限。自由形式の文字列（例: `\"25.00\"`、`\"50\"`）です。解析済みの数値には`effective_ownership_percent`を使用してください。"
                          },
                          "ownership_max_shares": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記機関が報告した所有比率の上限値。自由形式の文字列です。解析済みの数値が必要な場合は`effective_ownership_percent`を使用してください。"
                          },
                          "is_active": {
                            "type": "boolean"
                          },
                          "kyc_status": {
                            "type": "string",
                            "enum": [
                              "Approved",
                              "Declined",
                              "Pending"
                            ],
                            "nullable": true
                          },
                          "kyc_session_url": {
                            "type": "string",
                            "format": "uri",
                            "nullable": true
                          },
                          "effective_ownership_percent": {
                            "type": "number",
                            "nullable": true
                          },
                          "company_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "registration_number": {
                            "type": "string",
                            "nullable": true
                          },
                          "country_of_birth": {
                            "type": "string",
                            "nullable": true
                          },
                          "email": {
                            "type": "string",
                            "nullable": true
                          },
                          "nationality": {
                            "type": "string",
                            "nullable": true
                          },
                          "designation": {
                            "type": "string",
                            "nullable": true
                          },
                          "voting_min_shares": {
                            "type": "string",
                            "nullable": true
                          },
                          "voting_max_shares": {
                            "type": "string",
                            "nullable": true
                          },
                          "date_of_birth": {
                            "type": "string",
                            "nullable": true,
                            "description": "報告されている場合の完全な生年月日。",
                            "format": "date"
                          },
                          "appointment_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "報告されている場合の任命日。",
                            "format": "date"
                          },
                          "shareholding": {
                            "$ref": "#/components/schemas/KYBRegistryShareholding"
                          }
                        }
                      }
                    },
                    "addresses": {
                      "type": "array",
                      "nullable": true,
                      "description": "登記簿に記載されているすべての住所を、1つの標準形式で示します。記載がない場合はnullです。",
                      "items": {
                        "$ref": "#/components/schemas/KYBRegistryAddress"
                      }
                    },
                    "industries": {
                      "type": "array",
                      "nullable": true,
                      "description": "登記上で会社が分類されている事業活動。単一の正規化された形式です。登記に記載がない場合はnullです。",
                      "items": {
                        "$ref": "#/components/schemas/KYBRegistryIndustry"
                      }
                    },
                    "accounts": {
                      "type": "object",
                      "nullable": true,
                      "additionalProperties": true,
                      "description": "登記申告の日付（取得できる場合）。年次報告書と株主総会にはlast_annual_return_dateとlast_agm_dateを使用し、これらは財務諸表とは区別されます。"
                    },
                    "registry_data": {
                      "$ref": "#/components/schemas/KYBRegistryData"
                    },
                    "user_provided_data": {
                      "type": "object",
                      "description": "エンドユーザーが確認または編集したデータ。"
                    },
                    "confirmed_by_user_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    },
                    "last_console_edit_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    },
                    "is_editable": {
                      "type": "boolean"
                    },
                    "ownership": {
                      "$ref": "#/components/schemas/KYBRegistryOwnership"
                    },
                    "registry_tier": {
                      "type": "string",
                      "nullable": true,
                      "description": "ワークフローが指定した登記のレベル: `basic`、`shareholders`または`ubo`。`ownership.tier_requested`にも含まれます。"
                    },
                    "registry_tier_delivered": {
                      "type": "string",
                      "nullable": true,
                      "description": "登記機関が提供し、請求対象となるレベル。`ownership.tier_delivered`にも含まれます。"
                    },
                    "registry_ownership_status": {
                      "type": "string",
                      "nullable": true,
                      "description": "`not_requested`、`pending`、`delivered`、`not_held`または`unavailable`。`ownership.status`にも含まれます。"
                    },
                    "registry_monitoring": {
                      "type": "object",
                      "nullable": true,
                      "description": "その企業の最新の登記モニターです。存在しない場合は`null`です。",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "status": {
                          "type": "string"
                        },
                        "unavailable_reason": {
                          "type": "string",
                          "nullable": true
                        },
                        "enrolled_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true
                        },
                        "cancelled_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true
                        },
                        "last_bill_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true
                        },
                        "next_bill_date": {
                          "type": "string",
                          "format": "date",
                          "nullable": true
                        },
                        "last_event_at": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true
                        },
                        "events_count": {
                          "type": "integer"
                        },
                        "watched_fields": {
                          "description": "モニターが監視する企業フィールド。"
                        }
                      }
                    }
                  }
                },
                "ownership_structure": {
                  "$ref": "#/components/schemas/KYBOwnershipStructure"
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "key_people_checks": {
            "type": "array",
            "nullable": true,
            "description": "主要人物チェックの集約。`session_kind = business`の場合にのみ含まれます。各項目は2つのバケットからなる形式（`registry`、`submitted`、`ubo_kyc_summary`）を使用します。",
            "items": {
              "type": "object",
              "description": "企業の役員とUBOに対する集約チェック。`registry` / `submitted`の形式を使用します。session_kind = businessの場合にのみ含まれます。",
              "properties": {
                "status": {
                  "type": "string"
                },
                "node_id": {
                  "type": "string",
                  "nullable": true
                },
                "registry": {
                  "type": "object",
                  "description": "法人登記の照会で見つかった関係者。",
                  "properties": {
                    "officers": {
                      "type": "array",
                      "description": "登記チェックで判明した役員。各役員には、その役員のために生成された子KYCセッションおよびAMLスクリーニングのステータスが付加されます。",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "type": "string",
                            "description": "登記簿に記録されている役員の氏名。"
                          },
                          "designation": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記上の自由記述の役職名（例: `Director`、`Company Secretary`）。"
                          },
                          "role": {
                            "type": "string",
                            "enum": [
                              "director",
                              "non_executive_director",
                              "secretary",
                              "chairman",
                              "ubo",
                              "shareholder",
                              "representative",
                              "founder",
                              "legal_advisor",
                              "authorized_signatory",
                              "trustee",
                              "beneficiary",
                              "settlor",
                              "protector",
                              "company_officer",
                              "investor",
                              "other"
                            ],
                            "description": "正規化された役員の役割。"
                          },
                          "nationality": {
                            "type": "string",
                            "nullable": true
                          },
                          "appointment_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "役員の就任日。",
                            "format": "date"
                          },
                          "termination_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "役職の終了日（報告されている場合）。",
                            "format": "date"
                          },
                          "is_active": {
                            "type": "boolean"
                          },
                          "address": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記簿に記載されている役員の住所。"
                          },
                          "aml_status": {
                            "type": "string",
                            "enum": [
                              "Not Finished",
                              "Approved",
                              "Declined",
                              "In Review",
                              "Resub Requested"
                            ],
                            "nullable": true,
                            "description": "この役員に対して実行されたAMLスクリーニングのステータスです。AMLスクリーニングが実行されていない場合は`null`です。"
                          },
                          "kyc_status": {
                            "type": "string",
                            "enum": [
                              "Not Started",
                              "In Progress",
                              "Approved",
                              "Declined",
                              "In Review",
                              "Expired",
                              "Abandoned",
                              "Kyc Expired",
                              "Resubmitted",
                              "Awaiting User"
                            ],
                            "nullable": true,
                            "description": "この役員に対して生成された子KYCセッションの、生のライフサイクルステータス。セッションステータスの完全なenumです（Approved/Declined/Pendingに絞り込んだセットではありません）。子KYCセッションが存在しない場合は`null`です。"
                          },
                          "kyc_session_url": {
                            "type": "string",
                            "format": "uri",
                            "nullable": true,
                            "description": "子KYCセッションの共有可能なURL。子セッションが存在しない場合は`null`。"
                          },
                          "kyc_session_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "子KYCセッションのセッションID。同じ判定エンドポイントに渡すと、その人物の完全なKYCレポートを取得できます。子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_type": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションのワークフローのベースワークフロータイプです（例: `kyc`）。グラフベースのワークフローの場合、または子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "子セッションが使用するワークフローID。子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_label": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションのワークフローの人が読めるラベル。未設定の場合は`null`です。"
                          },
                          "verification_workflow_features": {
                            "type": "array",
                            "nullable": true,
                            "description": "子検証セッションの機能ごとの進捗。例：`[{\"feature\": \"ID_VERIFICATION\", \"status\": \"Approved\"}]`。子セッションに解決可能な機能リストがない場合は`null`。",
                            "items": {
                              "type": "object",
                              "properties": {
                                "feature": {
                                  "type": "string",
                                  "description": "機能の表示名（例: `ID_VERIFICATION`、`LIVENESS`、`AML`）。"
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "Not Finished",
                                    "Approved",
                                    "Declined",
                                    "In Review",
                                    "Resub Requested"
                                  ],
                                  "description": "子セッション内の機能レベルのステータスです。"
                                }
                              }
                            }
                          },
                          "didit_internal_id": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションの背後にある認証済み個人の不変の内部識別子。セッション間の紐付けに役立ちます。子セッションが存在しない場合、またはユーザーがまだ特定されていない場合は`null`です。"
                          },
                          "kyc_document_type": {
                            "type": "string",
                            "nullable": true,
                            "description": "子KYCセッションで提示された書類種別(例: `P`、`ID`、`DL`)。子セッションに本人確認の結果が出るまでは`null`。"
                          },
                          "kyc_nationality": {
                            "type": "string",
                            "nullable": true,
                            "description": "子KYCセッションの書類から抽出された国籍。取得できるまでは`null`です。"
                          },
                          "kyc_liveness_passed": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "子KYCセッションのライブネスチェックに合格したかどうか。ライブネスチェックが実行されていない場合は`null`です。"
                          },
                          "kyc_verified_at": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "子KYCセッションが`Approved`に到達した日時。子セッションがそれ以外のステータスの間は`null`。"
                          },
                          "kyc_aml_categories": {
                            "type": "object",
                            "nullable": true,
                            "description": "対象者のAMLヒットから算出したカテゴリごとの概要。ヒットがない場合は`null`。",
                            "properties": {
                              "sanctions": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              },
                              "pep": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              },
                              "adverse_media": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              },
                              "warnings": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              }
                            }
                          },
                          "kyc_notification_sent_at": {
                            "type": "string",
                            "nullable": true,
                            "description": "この人物の子セッションに対して最後に送信された認証招待通知のISO 8601タイムスタンプ。送信されていない場合は`null`です。"
                          },
                          "first_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記機関が明示的に報告した場合の名。氏名からは推測されません。"
                          },
                          "last_name": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記簿で明示的に報告されている場合の姓。"
                          },
                          "date_of_birth": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記で報告された完全な生年月日。生年または生年月のみが判明している場合はnullです。",
                            "format": "date"
                          },
                          "date_of_birth_year": {
                            "type": "integer",
                            "nullable": true,
                            "minimum": 1,
                            "maximum": 9999,
                            "description": "登記所が報告した生まれ年。完全な日付が取得できない場合も含みます。"
                          },
                          "date_of_birth_month": {
                            "type": "integer",
                            "nullable": true,
                            "minimum": 1,
                            "maximum": 12,
                            "description": "登記所が報告した生まれ月。年のみ判明している場合はnullです。"
                          }
                        }
                      }
                    },
                    "beneficial_owners": {
                      "type": "array",
                      "description": "登記照会で判明した実質的支配者です。それぞれについて、生成された子KYCセッションおよびAMLスクリーニングのステータスが付加されています。",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "type": "string",
                            "description": "実質的支配者の氏名（法人のUBOの場合は会社名）。"
                          },
                          "first_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "last_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "date_of_birth": {
                            "type": "string",
                            "nullable": true,
                            "description": "報告されている場合の完全な生年月日。",
                            "format": "date"
                          },
                          "country_of_birth": {
                            "type": "string",
                            "nullable": true
                          },
                          "email": {
                            "type": "string",
                            "nullable": true
                          },
                          "company_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "registration_number": {
                            "type": "string",
                            "nullable": true
                          },
                          "entity_type": {
                            "type": "string",
                            "enum": [
                              "person",
                              "company"
                            ]
                          },
                          "nationality": {
                            "type": "string",
                            "nullable": true
                          },
                          "designation": {
                            "type": "string",
                            "nullable": true
                          },
                          "roles": {
                            "type": "array",
                            "description": "この所有者が持つ役割名。例: `[\"ubo\", \"shareholder\"]`。",
                            "items": {
                              "type": "string"
                            }
                          },
                          "ownership_min_shares": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記簿が報告する所有比率の下限。自由形式の文字列（例: `\"25\"`、`\"25-50%\"`）です。解析済みの数値には`effective_ownership_percent`を使用してください。"
                          },
                          "ownership_max_shares": {
                            "type": "string",
                            "nullable": true,
                            "description": "登記機関が報告した所有比率の上限値。自由形式の文字列です。解析済みの数値が必要な場合は`effective_ownership_percent`を使用してください。"
                          },
                          "is_active": {
                            "type": "boolean"
                          },
                          "aml_status": {
                            "type": "string",
                            "enum": [
                              "Not Finished",
                              "Approved",
                              "Declined",
                              "In Review",
                              "Resub Requested"
                            ],
                            "nullable": true,
                            "description": "この実質的支配者に対して実行されたAMLスクリーニングのステータスです。AMLスクリーニングが実行されていない場合は`null`です。"
                          },
                          "kyc_status": {
                            "type": "string",
                            "enum": [
                              "Not Started",
                              "In Progress",
                              "Approved",
                              "Declined",
                              "In Review",
                              "Expired",
                              "Abandoned",
                              "Kyc Expired",
                              "Resubmitted",
                              "Awaiting User"
                            ],
                            "nullable": true,
                            "description": "この実質的支配者に対して生成された子KYCセッションの、生のライフサイクルステータス。セッションステータスの完全なenumです（Approved/Declined/Pendingに絞り込んだセットではありません）。子KYCセッションが存在しない場合は`null`です。"
                          },
                          "kyc_session_url": {
                            "type": "string",
                            "format": "uri",
                            "nullable": true,
                            "description": "子KYCセッションの共有可能なURL。子セッションが存在しない場合は`null`。"
                          },
                          "kyc_session_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "子KYCセッションのセッションID。同じ判定エンドポイントに渡すと、その人物の完全なKYCレポートを取得できます。子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_type": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションのワークフローのベースワークフロータイプです（例: `kyc`）。グラフベースのワークフローの場合、または子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "子セッションが使用するワークフローID。子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_label": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションのワークフローの人が読めるラベル。未設定の場合は`null`です。"
                          },
                          "verification_workflow_features": {
                            "type": "array",
                            "nullable": true,
                            "description": "子検証セッションの機能ごとの進捗。例：`[{\"feature\": \"ID_VERIFICATION\", \"status\": \"Approved\"}]`。子セッションに解決可能な機能リストがない場合は`null`。",
                            "items": {
                              "type": "object",
                              "properties": {
                                "feature": {
                                  "type": "string",
                                  "description": "機能の表示名（例: `ID_VERIFICATION`、`LIVENESS`、`AML`）。"
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "Not Finished",
                                    "Approved",
                                    "Declined",
                                    "In Review",
                                    "Resub Requested"
                                  ],
                                  "description": "子セッション内の機能レベルのステータスです。"
                                }
                              }
                            }
                          },
                          "didit_internal_id": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションの背後にある認証済み個人の不変の内部識別子。セッション間の紐付けに役立ちます。子セッションが存在しない場合、またはユーザーがまだ特定されていない場合は`null`です。"
                          },
                          "kyc_document_type": {
                            "type": "string",
                            "nullable": true,
                            "description": "子KYCセッションで提示された書類種別(例: `P`、`ID`、`DL`)。子セッションに本人確認の結果が出るまでは`null`。"
                          },
                          "kyc_nationality": {
                            "type": "string",
                            "nullable": true,
                            "description": "子KYCセッションの書類から抽出された国籍。取得できるまでは`null`です。"
                          },
                          "kyc_liveness_passed": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "子KYCセッションのライブネスチェックに合格したかどうか。ライブネスチェックが実行されていない場合は`null`です。"
                          },
                          "kyc_verified_at": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "子KYCセッションが`Approved`に到達した日時。子セッションがそれ以外のステータスの間は`null`。"
                          },
                          "kyc_aml_categories": {
                            "type": "object",
                            "nullable": true,
                            "description": "対象者のAMLヒットから算出したカテゴリごとの概要。ヒットがない場合は`null`。",
                            "properties": {
                              "sanctions": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              },
                              "pep": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              },
                              "adverse_media": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              },
                              "warnings": {
                                "type": "string",
                                "enum": [
                                  "match",
                                  "clear"
                                ]
                              }
                            }
                          },
                          "kyc_notification_sent_at": {
                            "type": "string",
                            "nullable": true,
                            "description": "この人物の子セッションに対して最後に送信された認証招待通知のISO 8601タイムスタンプ。送信されていない場合は`null`です。"
                          },
                          "child_beneficial_owners": {
                            "type": "array",
                            "description": "法人UBOの場合：所有する法人自体の実質的支配者で、法人登記から抽出された生のオブジェクトです。該当しない場合は空の配列です。",
                            "items": {
                              "type": "object"
                            }
                          },
                          "effective_ownership_percent": {
                            "type": "number",
                            "nullable": true,
                            "description": "解析済みの数値の所有割合。上限値がある場合は上限値、ない場合は下限値です。どちらの値も解析できなかった場合は`null`です。"
                          },
                          "voting_min_shares": {
                            "type": "string",
                            "nullable": true
                          },
                          "voting_max_shares": {
                            "type": "string",
                            "nullable": true
                          },
                          "appointment_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "報告されている場合の任命日。",
                            "format": "date"
                          }
                        }
                      }
                    }
                  }
                },
                "submitted": {
                  "type": "object",
                  "description": "主要人物フローで企業の管理者が提出した関係者（source=USERのBusinessParty行）。",
                  "properties": {
                    "parties": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "主要人物フローを通じて企業の管理者が提出した関係者（source=USER）。",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "entity_type": {
                            "type": "string",
                            "enum": [
                              "person",
                              "company"
                            ]
                          },
                          "source": {
                            "type": "string",
                            "enum": [
                              "USER"
                            ],
                            "description": "ここでは常に`USER`です。このバケットには、主要人物フローでエンドユーザーが入力または確認した当事者のみが含まれます（登記から検出された人物は`registry`の下に表示されます）。"
                          },
                          "name": {
                            "type": "string"
                          },
                          "first_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "last_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "company_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "registration_number": {
                            "type": "string",
                            "nullable": true
                          },
                          "email": {
                            "type": "string",
                            "format": "email",
                            "nullable": true
                          },
                          "nationality": {
                            "type": "string",
                            "nullable": true,
                            "description": "個人の場合は国籍、企業の当事者の場合は設立国。"
                          },
                          "phone_number": {
                            "type": "string",
                            "nullable": true
                          },
                          "date_of_birth": {
                            "type": "string",
                            "format": "date",
                            "nullable": true
                          },
                          "position": {
                            "type": "string",
                            "nullable": true,
                            "description": "自由記述の役職・ポジション（個人のみ）。"
                          },
                          "custom_fields": {
                            "type": "object",
                            "description": "この当事者について収集された、ワークフローで定義されたカスタムフィールド。キーはワークフローの主要人物フィールド記述子で定義されます。"
                          },
                          "is_active": {
                            "type": "boolean"
                          },
                          "is_skipped": {
                            "type": "boolean",
                            "description": "エンドユーザーがこの関係者の認証をスキップした場合はtrue（役割でスキップが許可されている場合のみ可能）。"
                          },
                          "requires_verification": {
                            "type": "boolean",
                            "description": "役割の設定と所有構造のしきい値に基づき、この関係者に子KYC / KYBサブセッションが必要な場合はtrue。"
                          },
                          "roles": {
                            "type": "array",
                            "description": "この当事者が保有するすべての役割です。役割ごとに独自の所有比率と議決権比率があります。当事者自体にはスカラー値の`role`/`ownership_percent`はありません。",
                            "items": {
                              "type": "object",
                              "properties": {
                                "role": {
                                  "type": "string",
                                  "enum": [
                                    "director",
                                    "non_executive_director",
                                    "secretary",
                                    "chairman",
                                    "ubo",
                                    "shareholder",
                                    "representative",
                                    "founder",
                                    "legal_advisor",
                                    "authorized_signatory",
                                    "trustee",
                                    "beneficiary",
                                    "settlor",
                                    "protector",
                                    "company_officer",
                                    "investor",
                                    "other"
                                  ]
                                },
                                "ownership_percent": {
                                  "type": "number",
                                  "nullable": true
                                },
                                "voting_percent": {
                                  "type": "number",
                                  "nullable": true
                                }
                              }
                            }
                          },
                          "kyc_session_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "検証が必要な個人の当事者向けの子KYCセッションID。それ以外の場合は`null`です。"
                          },
                          "kyc_session_status": {
                            "type": "string",
                            "enum": [
                              "Not Started",
                              "In Progress",
                              "Approved",
                              "Declined",
                              "In Review",
                              "Expired",
                              "Abandoned",
                              "Kyc Expired",
                              "Resubmitted",
                              "Awaiting User"
                            ],
                            "nullable": true,
                            "description": "子KYCセッションのライフサイクルステータス。子KYCセッションが存在しない場合は`null`。"
                          },
                          "kyc_session_url": {
                            "type": "string",
                            "format": "uri",
                            "nullable": true
                          },
                          "kyb_sub_session_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "検証が必要な法人の当事者向けの子KYBサブセッションID。それ以外の場合は`null`です。"
                          },
                          "kyb_sub_session_status": {
                            "type": "string",
                            "enum": [
                              "Not Started",
                              "In Progress",
                              "Approved",
                              "Declined",
                              "In Review",
                              "Expired",
                              "Abandoned",
                              "Kyc Expired",
                              "Resubmitted",
                              "Awaiting User"
                            ],
                            "nullable": true,
                            "description": "子KYBサブセッションのライフサイクルステータス。サブセッションが存在しない場合は`null`。"
                          },
                          "kyb_sub_session_url": {
                            "type": "string",
                            "format": "uri",
                            "nullable": true,
                            "description": "子KYBサブセッションの共有可能なURL。サブセッションが存在しない場合は`null`。"
                          },
                          "verification_workflow_type": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションのワークフローのベースワークフロータイプです（KYCセッションを優先し、ない場合はKYBサブセッションにフォールバックします）。グラフベースのワークフローの場合、または子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_id": {
                            "type": "string",
                            "format": "uuid",
                            "nullable": true,
                            "description": "子セッションが使用するワークフローID。子セッションが存在しない場合は`null`です。"
                          },
                          "verification_workflow_label": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションのワークフローの人が読めるラベル。未設定の場合は`null`です。"
                          },
                          "verification_workflow_features": {
                            "type": "array",
                            "nullable": true,
                            "description": "子検証セッションの機能ごとの進捗。例：`[{\"feature\": \"ID_VERIFICATION\", \"status\": \"Approved\"}]`。子セッションに解決可能な機能リストがない場合は`null`。",
                            "items": {
                              "type": "object",
                              "properties": {
                                "feature": {
                                  "type": "string",
                                  "description": "機能の表示名（例: `ID_VERIFICATION`、`LIVENESS`、`AML`）。"
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "Not Finished",
                                    "Approved",
                                    "Declined",
                                    "In Review",
                                    "Resub Requested"
                                  ],
                                  "description": "子セッション内の機能レベルのステータスです。"
                                }
                              }
                            }
                          },
                          "didit_internal_id": {
                            "type": "string",
                            "nullable": true,
                            "description": "子セッションの背後にある認証済み個人の不変の内部識別子。特定されていない場合は`null`です。"
                          }
                        }
                      }
                    }
                  }
                },
                "ubo_kyc_summary": {
                  "type": "object",
                  "nullable": true,
                  "description": "UBOのKYC進捗の集計。UBOに紐付いたKYCセッションがない場合はnullです。",
                  "properties": {
                    "total": {
                      "type": "integer"
                    },
                    "approved": {
                      "type": "integer"
                    },
                    "flagged": {
                      "type": "integer",
                      "description": "KYCが却下またはレビュー中のUBO。"
                    },
                    "pending": {
                      "type": "integer"
                    }
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "document_verifications": {
            "type": "array",
            "nullable": true,
            "description": "ワークフローノードごとにグループ化された書類検証チェックです。`session_kind = business`の場合にのみ含まれます。",
            "items": {
              "type": "object",
              "description": "ワークフローノードごとにグループ化された書類です。session_kind = businessの場合にのみ含まれます。",
              "properties": {
                "status": {
                  "type": "string"
                },
                "node_id": {
                  "type": "string",
                  "nullable": true
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "document_type": {
                        "type": "string",
                        "enum": [
                          "LEGAL_PRESENCE",
                          "COMPANY_DETAILS",
                          "OWNERSHIP_STRUCTURE",
                          "REPRESENTATIVES_AUTHORIZATION",
                          "OTHER"
                        ],
                        "nullable": true,
                        "description": "ファイルが分類されたKYB書類の大分類です。未分類の間は`null`です。"
                      },
                      "document_subtype": {
                        "type": "string",
                        "nullable": true,
                        "description": "OCRで検出された具体的なサブタイプ(例: `CERTIFICATE_OF_INCORPORATION`、`SHAREHOLDER_REGISTRY`)。OCRが書類を確実に分類できなかった場合は`UNKNOWN`です。"
                      },
                      "document_group": {
                        "type": "string",
                        "enum": [
                          "LEGAL_PRESENCE",
                          "COMPANY_DETAILS",
                          "OWNERSHIP_STRUCTURE",
                          "REPRESENTATIVES_AUTHORIZATION",
                          "OTHER"
                        ],
                        "nullable": true,
                        "description": "`document_type`のエイリアスです。`groups`および`required_groups`で使用されるグループ名です。"
                      },
                      "file_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true,
                        "description": "アップロードされたファイルへの有効期間の短い署名付きリンク。まだ対応されていない、アナリストが作成した書類リクエストのプレースホルダー（`is_requested = true`）では`null`です。"
                      },
                      "original_filename": {
                        "type": "string",
                        "nullable": true,
                        "description": "ユーザーまたはアナリストがアップロードした際のファイル名。"
                      },
                      "file_size": {
                        "type": "integer",
                        "nullable": true,
                        "description": "ファイルサイズ(バイト)。"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "Not Finished",
                          "Approved",
                          "Declined",
                          "In Review",
                          "Resub Requested"
                        ],
                        "description": "書類ごとの検証ステータス。"
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "cross_check_result": {
                        "type": "object",
                        "nullable": true,
                        "description": "OCRで抽出した書類フィールドと登記上の企業プロファイルとの照合結果。`critical`、`non_critical`、`people`の各セクションを持つオブジェクトで、各セクションはフィールド名（例: `company_name`、`registration_number`、`incorporation_date`、`registered_address`）を`{\"document\": \"...\", \"registry\": \"...\", \"match\": true, \"score\": 0.97}`のような比較レコードに対応付けます。書類にOCRデータがなかった場合、または比較対象となる登記上の企業がなかった場合は`null`です。"
                      },
                      "document_metadata": {
                        "type": "object",
                        "nullable": true,
                        "description": "アップロードされた法人書類から抽出されたメタデータです。メタデータの抽出に成功した場合、16個のキーは常にすべて含まれます（ファイル形式に該当しない個々の値は`null`になります）。何も抽出できなかった場合は、オブジェクト全体が`null`になります。PDFの場合、`overlay_manipulation`にはオーバーレイテキストのフォレンジック分析結果が含まれます。",
                        "properties": {
                          "file_size": {
                            "type": "integer",
                            "nullable": true,
                            "description": "書類のサイズ。"
                          },
                          "content_type": {
                            "type": "string",
                            "nullable": true,
                            "description": "書類のコンテンツタイプ。"
                          },
                          "creation_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "書類の作成日。"
                          },
                          "modified_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "書類の更新日。"
                          },
                          "creator": {
                            "type": "string",
                            "nullable": true,
                            "description": "ファイルメタデータに記録された作成ツール/ユーザー（PDFの`Creator`）。"
                          },
                          "producer": {
                            "type": "string",
                            "nullable": true,
                            "description": "ファイルを生成したソフトウェア(PDFの`Producer`)。"
                          },
                          "software": {
                            "type": "string",
                            "nullable": true,
                            "description": "ファイルのメタデータに記録された編集ソフトウェア。"
                          },
                          "encryption": {
                            "type": "string",
                            "nullable": true,
                            "description": "暗号化されている場合の、ファイルの暗号化方式。"
                          },
                          "is_signed": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "書類にデジタル署名が付与されているかどうか。"
                          },
                          "is_tampered": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "デジタル署名の検証に失敗したかどうか(署名後の変更)。"
                          },
                          "signature_info": {
                            "type": "object",
                            "nullable": true,
                            "description": "デジタル署名が存在する場合、その詳細。"
                          },
                          "exif_original_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "画像アップロードにおけるEXIFのオリジナル撮影日時。"
                          },
                          "exif_digitized_date": {
                            "type": "string",
                            "nullable": true,
                            "description": "画像アップロードにおけるEXIFのデジタル化日時。"
                          },
                          "processed_by_known_editor": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "メタデータから、ファイルが既知の画像/PDFエディターを経由したことが示されているかどうかです。"
                          },
                          "has_different_creation_mod_date": {
                            "type": "boolean",
                            "nullable": true,
                            "description": "作成日と更新日が異なるかどうかです。編集の可能性を示すシグナルですが、決定的ではありません。"
                          },
                          "overlay_manipulation": {
                            "type": "object",
                            "nullable": true,
                            "description": "オーバーレイテキストによる改ざんが疑われる場合のPDFフォレンジック分析。オーバーレイによる改ざんの証拠が見つからなかった場合、または書類がPDFでなかった場合はnullです。",
                            "properties": {
                              "detected": {
                                "type": "boolean",
                                "description": "オーバーレイテキストによる改ざんの痕跡が検出されたかどうかです。"
                              },
                              "analyzed": {
                                "type": "boolean",
                                "description": "PDFを解析できたかどうか。"
                              },
                              "signals": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "検出されたフォレンジックシグナル（duplicate_font_subsetやglyph_fragmentationなど）。"
                              },
                              "manipulated_regions": {
                                "type": "array",
                                "description": "改ざんが疑われる領域（PDFページ座標）。",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "page": {
                                      "type": "integer"
                                    },
                                    "x": {
                                      "type": "number"
                                    },
                                    "y": {
                                      "type": "number"
                                    },
                                    "width": {
                                      "type": "number"
                                    },
                                    "height": {
                                      "type": "number"
                                    },
                                    "page_width": {
                                      "type": "number"
                                    },
                                    "page_height": {
                                      "type": "number"
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "description": {
                        "type": "string",
                        "nullable": true,
                        "description": "書類リクエストに対してアナリストが指定したラベルまたは理由。通常のアップロードでは`null`です。"
                      },
                      "is_requested": {
                        "type": "boolean",
                        "description": "アナリストが作成した、アップロード待ちの書類リクエストのプレースホルダーの場合はtrue。"
                      },
                      "ocr_data": {
                        "type": "object",
                        "nullable": true
                      },
                      "is_console_upload": {
                        "type": "boolean",
                        "description": "エンドユーザーのフローではなくコンソールからアップロードされた書類の場合はtrue。コンソールからのアップロードによって機能レベルの集約ステータスが変わることはありません。"
                      },
                      "is_confirmed": {
                        "type": "boolean",
                        "description": "コンソールからのアップロードは`false`で始まり、管理者が確認すると`true`に切り替わります。エンドユーザーによるアップロードは常に`true`です。"
                      }
                    }
                  }
                },
                "groups": {
                  "type": "object",
                  "description": "グループ名（例：legal_presence、ownership_structure）をキーとする、グループごとの進捗カウンター。",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "total": {
                        "type": "integer"
                      },
                      "approved": {
                        "type": "integer"
                      },
                      "pending": {
                        "type": "integer"
                      },
                      "declined": {
                        "type": "integer"
                      },
                      "in_review": {
                        "type": "integer"
                      },
                      "other": {
                        "type": "integer"
                      },
                      "missing": {
                        "type": "integer",
                        "description": "リクエスト済みで、まだファイルがアップロードされていないプレースホルダー。"
                      }
                    }
                  }
                },
                "required_groups": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "environment": {
            "type": "string",
            "enum": [
              "live",
              "sandbox"
            ],
            "description": "セッションが本番アプリケーション(`live`)とサンドボックスアプリケーション(`sandbox`)のどちらで作成されたか。サンドボックスのセッションは無料で、完全にシミュレートされ、クレジットが課金されることはありません。"
          },
          "sandbox_scenario": {
            "type": "string",
            "nullable": true,
            "description": "セッション作成時に指定されたサンドボックスシナリオです。本番環境のセッション、およびシナリオを指定せずに作成されたサンドボックスセッションでは`null`になります。"
          },
          "resubmissions": {
            "type": "array",
            "description": "`include=resubmissions`を指定した場合にのみ、ユーザーセッションと企業セッションで返されます。再提出リクエストごとに1件のエントリーがあり、古い順に並びます。各エントリーには、リクエスト前に再提出対象のステップが返した結果が含まれるため、以前の提出内容も引き続き参照できます。セッションを削除すると、すべての提出内容が削除されます。",
            "items": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "integer",
                  "description": "セッションの1回目の再提出では1、2回目では2、以降も同様です。"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "description": "再提出がリクエストされた日時。"
                },
                "previous_status": {
                  "type": "string",
                  "description": "リクエスト直前のセッションのステータス。"
                },
                "nodes": {
                  "type": "array",
                  "description": "ユーザーに差し戻されたワークフローのステップ。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "node_id": {
                        "type": "string"
                      },
                      "feature": {
                        "type": "string"
                      }
                    }
                  }
                },
                "reasons": {
                  "type": "object",
                  "nullable": true,
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "各ステップについて示された理由。`node_id`をキーとします。"
                },
                "requested_by": {
                  "type": "object",
                  "nullable": true,
                  "description": "再提出を要求した者です。",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    }
                  }
                },
                "results": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "リクエスト前に再提出されたステップが返していた結果です。このレスポンスの現在の結果と同じキー、同じ形式で返されます（`id_verifications`、`nfc_verifications`、`liveness_checks`、`face_matches`、`poa_verifications`、`phone_verifications`、`email_verifications`、`aml_screenings`、`ip_analyses`、`database_validations`、`questionnaire_responses`、`document_ai_documents`、`geolocation_checks`。企業セッションでは`document_verifications`も含まれます）。差し戻されたステップのキーのみが含まれます。"
                }
              }
            }
          },
          "biometric_consent": {
            "type": "object",
            "nullable": true,
            "description": "顔撮影の前にセッションで明示的な生体認証の同意が必要だったかどうか、その理由、および回答の証跡。ユーザー認証(KYC)セッションのみが対象で、同じオブジェクトがセッションWebhookの`decision`にも含まれます。顔撮影のないワークフローなど、セッションが一度も評価されなかった場合は`null`です。値が記録されていないフィールドは`null`です。4.10.0未満のネイティブSDK、またはバージョンを報告しないSDKは同意ステップを表示できません。その場合、顔撮影は従来どおり実行され、同意が必要だったセッションは`status: \"pending\"`と`reason: \"BIOMETRIC_CONSENT_UNSUPPORTED_SDK\"`を報告します。[生体認証の同意](/ja/getting-started/biometric-consent)を参照してください。",
            "properties": {
              "required": {
                "type": "boolean",
                "description": "Whether the session must collect explicit biometric consent. Never goes back to `false`."
              },
              "trigger": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "declared_state",
                  "ip_state",
                  "ip_unknown",
                  "document_issuer",
                  "forced",
                  "customer_collected"
                ],
                "description": "同意が必要な理由、または同意がどのように満たされたか。`declared_state`：対象となる州を申告しました（`user_state`、または`expected_details`内の米国の住所）。`ip_state`：本人のIPが対象州（イリノイ州、テキサス州、コロラド州）にあります。`ip_unknown`：証拠から本人が米国にいることはわかるものの、州を特定できません（IPが米国内だが州が不明な場合、またはIPの位置を特定できないが、あなたが指定した情報や書類から本人が米国にいると判断される場合）。`document_issuer`：本人確認書類が対象州によって発行されています。`forced`：アプリケーションのモードがAlwaysです。`customer_collected`：セッション作成時に`biometric_consent`を送信しました。必要でない間は`null`です。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "not_required",
                  "pending",
                  "given",
                  "declined"
                ],
                "description": "`not_required`、`pending`（必須だが未取得: 本人がまだ回答していないか、`reason`に収集されなかった理由が示されます）、`given`、`declined`（拒否が記録され、セッションは`Declined`で終了しました。現在、拒否を選択できるDiditの画面はありません）。"
              },
              "given_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "同意が得られた日時。`customer_collected`の場合は、送信した`given_at`です。"
              },
              "declined_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "却下が記録された日時。"
              },
              "text_version": {
                "type": "string",
                "nullable": true,
                "description": "本人が回答した同意文、または自社が送信した同意文のバージョンID。"
              },
              "text_hash": {
                "type": "string",
                "nullable": true,
                "description": "表示された同意文そのもののSHA-256（16進数）。表示時の言語で計算します。"
              },
              "locale": {
                "type": "string",
                "nullable": true,
                "description": "同意文が表示された言語。"
              },
              "policy_url": {
                "type": "string",
                "format": "uri",
                "nullable": true,
                "description": "同意ステップがリンクしていた生体データポリシー。"
              },
              "step": {
                "type": "string",
                "nullable": true,
                "description": "本人が回答した時点でセッションが位置していたワークフローステップ（例: `LIVENESS`）。"
              },
              "node_id": {
                "type": "string",
                "nullable": true,
                "description": "本人が回答した時点でセッションが位置していたワークフローグラフのノード。"
              },
              "ip_address": {
                "type": "string",
                "nullable": true,
                "description": "回答の送信元IP。"
              },
              "ip_country_code": {
                "type": "string",
                "nullable": true,
                "description": "回答のIPが属する国を示すISO 3166-1 alpha-2コード。"
              },
              "ip_state": {
                "type": "string",
                "nullable": true,
                "description": "回答のIPアドレスのISO 3166-2地域区分。例: `US-IL`。"
              },
              "ip_city": {
                "type": "string",
                "nullable": true,
                "description": "回答のIPの都市。"
              },
              "user_agent": {
                "type": "string",
                "nullable": true,
                "description": "回答のリクエストのユーザーエージェント。"
              },
              "detected_ip_address": {
                "type": "string",
                "nullable": true,
                "description": "要件が最後に評価された際のこの人物のIPです。人物が別のデバイスで回答した場合は`ip_address`と異なることがあります。"
              },
              "detected_country_code": {
                "type": "string",
                "nullable": true,
                "description": "検出されたIPの国を示すISO 3166-1 alpha-2コード。"
              },
              "detected_state": {
                "type": "string",
                "nullable": true,
                "description": "検出されたIPアドレスのISO 3166-2地域区分。"
              },
              "detected_city": {
                "type": "string",
                "nullable": true,
                "description": "検出されたIPの都市。"
              },
              "declared_state": {
                "type": "string",
                "nullable": true,
                "description": "申告したISO 3166-2地域区分です。`user_state`、または`expected_details`内の米国の住所の州を指します。"
              },
              "document_state": {
                "type": "string",
                "nullable": true,
                "description": "身分証明書を発行したISO 3166-2地域区分。IDキャプチャ時に読み取られます。"
              },
              "jurisdictions": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "その人物が生体情報に関する法律の対象となる米国の州(USPSコード、例: `IL`)。証拠からその人物が米国にいることは示されるものの州が不明な場合は`US`です。該当するものがない場合は空です。"
              },
              "retention_months": {
                "type": "integer",
                "nullable": true,
                "description": "`jurisdictions`のうち最も短い生体データの保持期限（月数）。該当するものがない場合は`null`です。"
              },
              "reason": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "BIOMETRIC_CONSENT_UNSUPPORTED_SDK",
                  "BIOMETRIC_CONSENT_DECLINED"
                ],
                "description": "`BIOMETRIC_CONSENT_UNSUPPORTED_SDK`：同意が必須であったにもかかわらず、4.10.0未満のネイティブSDK、またはバージョンを報告しなかったネイティブSDKが、同意ステップを経ずに顔を撮影した場合です。`status`は`pending`のままとなり、本人が後でホスト型フローで同意した場合は`given`になります。`BIOMETRIC_CONSENT_DECLINED`：拒否が記録された場合です（SDKによる理由を置き換えます）。それ以外は`null`で、セッションで同意が不要だった場合は常に`null`です。"
              },
              "decline_reason": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "BIOMETRIC_CONSENT_DECLINED"
                ],
                "description": "記録された拒否によってセッションが終了した場合は`BIOMETRIC_CONSENT_DECLINED`、それ以外は`null`です。"
              },
              "face_data_deleted_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "却下によってセッションの顔画像、動画、顔テンプレートが削除された日時。却下が記録されていない場合は`null`。"
              }
            }
          },
          "investigator": {
            "$ref": "#/components/schemas/InvestigatorBlock"
          },
          "biometric_retention": {
            "$ref": "#/components/schemas/BiometricRetention"
          },
          "fraud_check": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "Fraud Check API呼び出しの結果です。それ以外のすべてのセッションでは`null`です。"
          },
          "full_session_video": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "セッション全体の録画の有効期限付きURLです。組織がセッション全体の動画を録画している場合にのみ返されます。"
          },
          "full_session_video_recorded_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "セッション全体の録画が行われた日時。組織がセッション全体の動画を録画している場合にのみ返されます。"
          }
        }
      },
      "WorkflowDetail": {
        "type": "object",
        "description": "以下のフィールドには型が定義されています。このオブジェクトには、ワークフロー設定のその他すべての列（機能の切り替え、しきい値、警告アクション、許可される書類、コールバック）も追加プロパティとして含まれます。`workflow_type`に該当しないフィールドは`null`です。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "バージョンごとの識別子（`settings_uuid`）です。ワークフローの各バージョンがそれぞれ固有の値を持ちます。"
          },
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "description": "ワークフローのすべてのバージョンで共有される不変の識別子。これを使って作成したセッションでは、公開済みの最新バージョンが使用されます。"
          },
          "workflow_label": {
            "type": "string",
            "description": "ワークフローの表示名。"
          },
          "workflow_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "kyc",
              "kyb",
              "adaptive_age_verification",
              "biometric_authentication",
              "address_verification",
              "questionnaire_verification",
              "email_verification",
              "phone_verification",
              null
            ],
            "description": "ワークフローテンプレート。テンプレートなしで作成されたグラフワークフローでは`null`です。"
          },
          "is_default": {
            "type": "boolean",
            "description": "アプリケーションのデフォルトのワークフローかどうか。"
          },
          "is_archived": {
            "type": "boolean",
            "description": "アーカイブ済みのワークフローでは新しいセッションを開始できません。"
          },
          "version": {
            "type": "integer",
            "description": "ワークフロー内のバージョン番号。"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "ドラフトバージョンは編集できます。公開済みバージョンは変更できず、新しいセッションで使用されます。"
          },
          "published_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このバージョンが公開された日時。下書きの場合は`null`です。"
          },
          "is_simple_workflow": {
            "type": "boolean",
            "description": "ワークフローにカスタムの`workflow_graph`がない場合は`true`です。"
          },
          "is_editable": {
            "type": "boolean",
            "description": "`draft`バージョンの場合のみ`true`です。"
          },
          "workflow_url": {
            "type": "string",
            "format": "uri",
            "description": "このワークフローでセッションを開始する公開URLです。"
          },
          "workflow_graph": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "ワークフローのグラフ構造(ノードとエッジ)。シンプルなワークフローでは`null`です。"
          },
          "features": {
            "type": "string",
            "description": "有効な機能を`\" + \"`で連結したものです。例: `\"OCR + LIVENESS\"`。"
          },
          "total_price": {
            "type": "number",
            "nullable": true,
            "description": "セッション1件あたりの料金。グラフ型ワークフローでは最も高い経路の料金です。"
          },
          "min_price": {
            "type": "number",
            "nullable": true,
            "description": "ワークフロー内で最も安い経路の料金。"
          },
          "max_price": {
            "type": "number",
            "nullable": true,
            "description": "ワークフロー内で最も高い経路の料金。"
          },
          "special_add_on_prices": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "組織固有のアドオン料金です。設定されていない場合は`null`です。"
          },
          "max_retry_attempts": {
            "type": "integer",
            "description": "認証が却下された後に許可される再試行回数。"
          },
          "retry_window_days": {
            "type": "integer",
            "nullable": true,
            "description": "再試行が許可される日数。"
          },
          "session_expiration_time": {
            "type": "integer",
            "description": "未完了のセッションが期限切れになるまでの秒数。"
          },
          "questionnaire": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "ワークフローに紐づくアンケート、または`null`です。"
          },
          "kyb_role_settings": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "KYBの主要人物に対する役割ごとの検証設定です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "signature_availability": {
            "type": "object",
            "description": "現在署名に使用できる電子署名のレベル。`signature_level`を設定する前に確認してください。`kyc`、`kyb`、グラフワークフローで返されます。",
            "properties": {
              "simple": {
                "type": "boolean",
                "description": "Simpleは常に利用できます。"
              },
              "aes": {
                "type": "boolean",
                "description": "Advanced（AES）で現在署名できるかどうかです。`false`の間は、`signature_level: \"aes\"`の新しいステップを保存しようとすると`aes_not_available`で拒否されます。"
              },
              "qes": {
                "type": "boolean",
                "description": "Qualified（QES）で現在署名できるかどうかです。適格プロバイダーが接続されるまでは`false`です。"
              }
            }
          },
          "is_bank_verification_enabled": {
            "type": "boolean",
            "description": "シンプルなKYCまたはKYBワークフローで銀行認証を実行するかどうかです。連絡先ステップ（および位置情報認証）の後、データベース検証、AML、IP分析の前に実行されます。銀行認証はまだ一般提供されていません。有効化されていない場合、オンにしようとしても拒否されます。"
          },
          "bank_verification_config": {
            "type": "object",
            "additionalProperties": true,
            "description": "シンプルなワークフローの銀行口座認証設定です。`BANK_VERIFICATION`ノードと同じキー（例: `bank_countries`、`bank_method_order`）を受け付けます。不明なキーは破棄されます。すべてのキーは任意で、指定しないキーはデフォルト値のままとなるため、`{}`はすべてデフォルト値であることを意味します。詳細は[銀行口座認証の設定](/ja/management-api/workflows/feature-configs#銀行口座認証)を参照してください。",
            "example": {}
          },
          "is_geolocation_enabled": {
            "type": "boolean",
            "description": "シンプルなKYCワークフローで位置情報認証を実行するかどうかです。連絡先ステップの後、銀行認証とデータベース検証の前に実行されます。企業（KYB）ワークフローでは実行できません。"
          },
          "geolocation_config": {
            "type": "object",
            "additionalProperties": true,
            "description": "シンプルなワークフローの位置情報検証設定で、`GEOLOCATION`ノードと同じキー（例: `is_geolocation_geofencing_enabled`や`geolocation_max_attempts`）を受け付けます。不明なキーは破棄されます。すべてのキーは任意で、指定しないキーはデフォルト値のままとなるため、`{}`はすべてデフォルト値を意味します。",
            "example": {}
          }
        },
        "additionalProperties": true
      },
      "UserSessionListItem": {
        "title": "KYC session row (session_kind: user)",
        "type": "object",
        "description": "ユーザー認証（KYC）セッションの概要行。本人情報フィールド（`full_name`、`country`、`document_type`、`portrait_image`、連絡先フィールド）は、ユーザーが認証ステップを完了するにつれて順次入力され、該当するステップが完了するまでは`null`です。ワークフローのレスポンス属性設定で制限されたフィールドも`null`として返されます。",
        "required": [
          "session_id",
          "session_kind",
          "session_number",
          "session_url",
          "portrait_image",
          "document_type",
          "full_name",
          "country",
          "status",
          "vendor_data",
          "didit_internal_id",
          "created_at",
          "features",
          "phone_number",
          "email_address",
          "additional_details"
        ],
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "認証セッションの一意の識別子。`GET /v3/session/{sessionId}/decision/`で使用して、判定ペイロード全体を取得します。",
            "example": "5b3720ed-d429-42ef-b67f-37ea805f48ee"
          },
          "session_kind": {
            "type": "string",
            "enum": [
              "user"
            ],
            "description": "行の識別子。KYCの行では常に`\"user\"`です。法人確認 (KYB)の行は`\"business\"`で、構造が異なります。",
            "example": "user"
          },
          "session_number": {
            "type": "integer",
            "description": "アプリケーション内のセッションのわかりやすい連番。`search`パラメーターの照合対象にもなります。",
            "example": 720
          },
          "session_url": {
            "type": "string",
            "nullable": true,
            "description": "エンドユーザーがフローを完了するために開くホスト型検証URLです。セッションにホスト型URLがない場合は`null`です。",
            "example": "https://verify.didit.me/session/CuXoBYCYVO5Y"
          },
          "portrait_image": {
            "type": "string",
            "nullable": true,
            "description": "利用可能な最良の顔写真の有効期限付き（署名付き）URLです。NFCチップの写真があればそれを、なければ身分証明書類の顔写真を、それもなければライブネスの参照画像を使用します。いずれかが存在するまでは`null`です。リンクは期限切れになるため、速やかにダウンロードしてください。",
            "example": "https://<media-host>/portraits/5b3720ed.jpg?X-Amz-Expires=3600&X-Amz-Signature=..."
          },
          "document_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Passport",
              "Identity Card",
              "Driver's License",
              "Residence Permit",
              "Health Insurance Card",
              "Tax Card"
            ],
            "description": "検証済みの本人確認書類の種類を示す、人が読める形式の値。書類の検証が完了する前は`null`で、完了後も検証済みのコードに表示用のマッピングがない場合（`SSC`、`WP`、`VISA`、`PSC`、`BC`、`OTHER`）は`null`になります。注: クエリパラメーター`document_type`は、これらの表示値ではなく短縮コード（`P`、`ID`、`DL`、`RP`、...）で絞り込みます。",
            "example": "Passport"
          },
          "full_name": {
            "type": "string",
            "nullable": true,
            "description": "セッションで利用可能な最適な氏名です。次の順序で解決されます。身分証明書類のOCR、AMLスクリーニング済みデータ、データベース検証のスクリーニング済みデータ、住所証明書類、最後にセッション作成時に指定された想定情報です。まだ利用できるものがない場合は`null`です。",
            "example": "Jane Marie Doe"
          },
          "country": {
            "type": "string",
            "nullable": true,
            "description": "セッションに関連付けられた国のISO 3166-1 alpha-3コード。身分証明書類の発行国、データベース検証の発行国、住所証明の発行国、想定される詳細情報、認証済み電話番号の国の順に解決されます。国籍とは異なる場合があります。",
            "example": "ESP"
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User"
            ],
            "description": "セッション全体のステータス。ライフサイクルについては[認証ステータス](/ja/integration/verification-statuses)ページを参照してください。",
            "example": "Approved"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "エンドユーザーに対するお客様独自の識別子で、セッション作成時に送信した値がそのまま返されます。",
            "example": "your-user-id-123"
          },
          "didit_internal_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "このセッションに紐づく認証済みユーザープロファイルのDidit内部識別子です。同じユーザーの複数のセッション間で変わらず、`didit_internal_id`クエリパラメーターでフィルターできます。",
            "example": "d9e78474-6c8d-4f2a-bb90-6f5c2f3a1147"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "セッションが作成されたUTCタイムスタンプ。",
            "example": "2026-06-09T12:26:54.328364Z"
          },
          "features": {
            "type": "array",
            "description": "セッションのワークフローに設定されたすべての検証ステップについての、機能ごとのステータス（ワークフロー順）。",
            "items": {
              "type": "object",
              "required": [
                "feature",
                "status"
              ],
              "properties": {
                "feature": {
                  "type": "string",
                  "enum": [
                    "ID_VERIFICATION",
                    "NFC",
                    "LIVENESS",
                    "FACE_MATCH",
                    "POA",
                    "QUESTIONNAIRE",
                    "EMAIL_VERIFICATION",
                    "PHONE",
                    "AML",
                    "IP_ANALYSIS",
                    "AGE_ESTIMATION",
                    "DATABASE_VALIDATION",
                    "GEOLOCATION"
                  ],
                  "description": "認証機能の識別子。",
                  "example": "ID_VERIFICATION"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "Not Finished",
                    "Approved",
                    "Declined",
                    "In Review",
                    "Resub Requested"
                  ],
                  "description": "この機能のステータスです。ステップが完了するまでは`Not Finished`です。",
                  "example": "Approved"
                }
              }
            }
          },
          "phone_number": {
            "type": "object",
            "nullable": true,
            "description": "セッションに関連付けられた電話番号。電話番号検証が実行された場合は検証済みの電話番号、それ以外の場合はセッション作成時に指定された連絡先の電話番号です。どちらも存在しない場合は`null`です。",
            "required": [
              "number",
              "is_verified"
            ],
            "properties": {
              "number": {
                "type": "string",
                "description": "E.164形式の電話番号。",
                "example": "+14155552671"
              },
              "is_verified": {
                "type": "boolean",
                "description": "電話番号検証機能がこの番号を承認した場合のみ`true`です。",
                "example": true
              }
            }
          },
          "email_address": {
            "type": "object",
            "nullable": true,
            "description": "セッションに関連付けられたメールアドレス：メールアドレス認証を実行した場合は認証済みのメールアドレス、それ以外の場合はセッション作成時に指定された連絡先メールアドレスです。いずれも存在しない場合は`null`。",
            "required": [
              "email",
              "is_verified"
            ],
            "properties": {
              "email": {
                "type": "string",
                "format": "email",
                "example": "jane@example.com"
              },
              "is_verified": {
                "type": "boolean",
                "description": "メールアドレス認証機能がこのアドレスを承認した場合のみ`true`です。",
                "example": true
              }
            }
          },
          "additional_details": {
            "type": "object",
            "nullable": true,
            "description": "機能ごとの簡潔な追加情報。データを生成した機能のみがキーとして含まれ、追加情報を生成した機能がない場合は`null`になります。ワークフローのレスポンス属性設定で除外されたフィールドは省略されます。",
            "properties": {
              "aml": {
                "type": "object",
                "description": "AMLスクリーニングが実行された場合に含まれます。",
                "properties": {
                  "total_hits": {
                    "type": "integer",
                    "description": "AMLスクリーニングのヒット件数。",
                    "example": 0
                  },
                  "entity_type": {
                    "type": "string",
                    "description": "スクリーニング対象のエンティティタイプ。",
                    "example": "person"
                  },
                  "is_adverse_media_fetched": {
                    "type": "boolean",
                    "example": false
                  },
                  "screened_data": {
                    "type": "object",
                    "description": "スクリーニングされたデータのサブセット。空でないキーのみが含まれます。",
                    "properties": {
                      "nationality": {
                        "type": "string",
                        "example": "ESP"
                      },
                      "document_number": {
                        "type": "string",
                        "example": "XX1234567"
                      },
                      "date_of_birth": {
                        "type": "string",
                        "example": "1990-05-21"
                      }
                    }
                  }
                }
              },
              "database_validation": {
                "type": "object",
                "description": "データベース検証が実行された場合に含まれます。",
                "properties": {
                  "validation_type": {
                    "type": "string",
                    "example": "DOCUMENT_VALIDATION"
                  },
                  "match_type": {
                    "type": "string",
                    "example": "FULL_MATCH"
                  },
                  "identification_number": {
                    "type": "string",
                    "description": "検証された納税者番号、個人番号、または書類番号(最初に利用可能なもの)。",
                    "example": "12345678Z"
                  }
                }
              },
              "poa": {
                "type": "object",
                "description": "住所証明が実行された場合に含まれます。",
                "properties": {
                  "document_type": {
                    "type": "string",
                    "example": "UTILITY_BILL"
                  },
                  "issuer": {
                    "type": "string",
                    "example": "Energy Co"
                  },
                  "address": {
                    "type": "string",
                    "example": "Calle Mayor 1, 28013 Madrid"
                  },
                  "name_on_document": {
                    "type": "string",
                    "example": "Jane Marie Doe"
                  }
                }
              },
              "liveness": {
                "type": "object",
                "description": "ライブネスチェックが実行された場合に含まれます。",
                "properties": {
                  "method": {
                    "type": "string",
                    "example": "PASSIVE"
                  },
                  "score": {
                    "type": "number",
                    "description": "ライブネスの信頼度スコア（小数点以下2桁に丸め）。",
                    "example": 0.98
                  }
                }
              },
              "face_match": {
                "type": "object",
                "description": "顔照合が実行された場合に含まれます。",
                "properties": {
                  "score": {
                    "type": "number",
                    "description": "顔照合の類似度スコア（小数点以下2桁に丸め）。",
                    "example": 0.95
                  },
                  "source_image": {
                    "type": "string",
                    "description": "照合元の顔画像の有効期限付き（署名付き）URLです。",
                    "example": "https://<media-host>/faces/source.jpg?X-Amz-Expires=3600&..."
                  },
                  "target_image": {
                    "type": "string",
                    "description": "照合先の顔画像の有効期限付き（署名付き）URLです。",
                    "example": "https://<media-host>/faces/target.jpg?X-Amz-Expires=3600&..."
                  }
                }
              },
              "phone_verification": {
                "type": "object",
                "description": "電話番号検証が実行された場合に含まれます。",
                "properties": {
                  "country_code": {
                    "type": "string",
                    "description": "電話番号の国を示すISO 3166-1 alpha-2コード。",
                    "example": "US"
                  },
                  "is_temporary": {
                    "type": "boolean",
                    "example": false
                  },
                  "is_ported": {
                    "type": "boolean",
                    "example": false
                  },
                  "is_blocked": {
                    "type": "boolean",
                    "example": false
                  }
                }
              },
              "email_verification": {
                "type": "object",
                "description": "メールアドレス認証が実行された場合に含まれます。",
                "properties": {
                  "is_breached": {
                    "type": "boolean",
                    "example": false
                  },
                  "is_disposable": {
                    "type": "boolean",
                    "example": false
                  },
                  "is_undeliverable": {
                    "type": "boolean",
                    "example": false
                  },
                  "is_blocklisted": {
                    "type": "boolean",
                    "example": false
                  }
                }
              }
            }
          },
          "assignee": {
            "type": "object",
            "nullable": true,
            "description": "セッションが割り当てられているConsoleのレビュアー。誰も担当していない場合は`null`です。",
            "properties": {
              "email": {
                "type": "string",
                "format": "email"
              },
              "assigned_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              }
            }
          },
          "waiting_since": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "セッションがレビュー待ちになった日時。セッションが`In Review`である場合を除き`null`です。"
          },
          "sla_due_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "レビューの期限。Consoleでアプリケーションに設定したレビュー期限に基づきます。セッションが`In Review`で、かつ期限が設定されている場合を除き`null`です。"
          },
          "top_warnings": {
            "type": "array",
            "description": "簡易なトリアージ用に、セッションの最も重要な警告を数件まで示します。完全なリストは判定に含まれます。",
            "items": {
              "type": "object",
              "properties": {
                "risk": {
                  "type": "string",
                  "description": "警告コード（例: `FACE_MATCH_LOW_SIMILARITY`）。"
                },
                "feature": {
                  "type": "string",
                  "description": "これを発生させた機能です。"
                },
                "log_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "`error`または`warning`。レガシーエントリーの場合は`null`。"
                },
                "short_description": {
                  "type": "string"
                }
              }
            }
          },
          "warnings_count": {
            "type": "integer",
            "description": "セッションの警告の数です。"
          }
        }
      },
      "BusinessSessionListItem": {
        "title": "KYB session row (session_kind: business)",
        "type": "object",
        "description": "法人確認（KYB）セッションの概要行。`session_kind`が`business`または`all`の場合にのみ返されます。",
        "required": [
          "session_id",
          "session_kind",
          "session_number",
          "status",
          "vendor_data",
          "created_at",
          "workflow_id",
          "workflow_type",
          "workflow_label",
          "company_name",
          "registration_number",
          "country"
        ],
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "法人確認セッションの一意の識別子。",
            "example": "8a1f63c2-1b9e-4f3a-9c41-2f6a1f0b7d52"
          },
          "session_kind": {
            "type": "string",
            "enum": [
              "business"
            ],
            "description": "行の識別子。KYBの行では常に`\"business\"`です。",
            "example": "business"
          },
          "session_number": {
            "type": "integer",
            "description": "アプリケーション内の企業セッションのわかりやすい連番。KYCセッションとは別に採番されます。",
            "example": 42
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User"
            ],
            "description": "セッション全体のステータス。[認証ステータス](/ja/integration/verification-statuses)ページを参照してください。",
            "example": "Approved"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "企業に対するお客様独自の識別子で、セッション作成時に送信した値がそのまま返されます。",
            "example": "your-company-id-77"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "セッションが作成されたUTCタイムスタンプ。",
            "example": "2026-06-08T09:14:02.118450Z"
          },
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "このセッションの作成に使用されたワークフローの識別子。",
            "example": "9f9b1234-aaaa-bbbb-cccc-1234567890ab"
          },
          "workflow_type": {
            "type": "string",
            "nullable": true,
            "description": "ワークフローの種類。企業向けワークフローでは`kyb`です。",
            "example": "kyb"
          },
          "workflow_label": {
            "type": "string",
            "nullable": true,
            "description": "ワークフローの表示名。",
            "example": "Standard KYB"
          },
          "company_name": {
            "type": "string",
            "nullable": true,
            "description": "認証対象企業の名称。セッションに紐付けられた法人登記の企業から取得されます。企業が選択されるまでは`null`です。",
            "example": "Acme Holdings S.L."
          },
          "registration_number": {
            "type": "string",
            "nullable": true,
            "description": "セッションに紐づく登記上の企業の登記番号。",
            "example": "B12345678"
          },
          "country": {
            "type": "string",
            "nullable": true,
            "description": "セッションに紐付けられた登記企業の国コード。",
            "example": "ES"
          }
        }
      },
      "TransactionVerificationSessionAction": {
        "title": "Verification session",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "verification_session"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "エンドユーザー向けに開くホスト型検証URLです。"
          },
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "認証セッションID。"
          },
          "session_token": {
            "type": "string",
            "description": "セッショントークン。モバイルSDKがフローをネイティブに起動する際に使用します。"
          },
          "status": {
            "type": "string",
            "description": "認証セッションのステータス。"
          }
        },
        "required": [
          "type",
          "url"
        ]
      },
      "TransactionWalletOwnershipAction": {
        "title": "Wallet ownership",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "wallet_ownership"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "ホスト型ウォレット所有権ウィジェットのURLです。実際のブラウザ画面で開いてください。モバイルではSFSafariViewControllerまたはChrome Custom Tabを使用し、埋め込みWebViewは決して使用しないでください。"
          },
          "widget_session_id": {
            "type": "string",
            "format": "uuid",
            "description": "ウォレット所有権ウィジェットのセッションID。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "ウィジェットセッションの有効期限。"
          }
        },
        "required": [
          "type",
          "url"
        ]
      },
      "TransactionRuleActionAddScore": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "add_score"
            ]
          },
          "value": {
            "type": "integer",
            "description": "取引のリスクスコアに加算されるポイント。負の値になる場合があります。"
          }
        },
        "description": "取引の累積リスクスコアにポイントを加算します。合計値に応じて、アプリケーションのレビュー/却下のしきい値に基づきステータスが決まります。"
      },
      "TransactionRuleActionChangeStatus": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "change_status"
            ]
          },
          "value": {
            "type": "string",
            "enum": [
              "APPROVED",
              "IN_REVIEW",
              "DECLINED",
              "AWAITING_USER"
            ],
            "description": "スコアに関係なく、即時に設定するステータス。エイリアスキー: status。"
          },
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "description": "値がAWAITING_USERの場合は必須です。対象者に完了を求める認証ワークフローです。エイリアスキー: remediation_workflow_id。ルールが発動すると、Diditは対象者向けにホスト型の是正セッションを作成します。"
          }
        },
        "description": "取引ステータスを直接設定します。一致した複数のルールの間では、常にDECLINEDが優先されます。"
      },
      "TransactionRuleActionAddTags": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "add_tags"
            ]
          },
          "tag_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "付与する既存のアプリケーションタグです。"
          },
          "tag_name": {
            "type": "string",
            "description": "付与するタグ名。初回使用時に作成されます(大文字で保存)。tag_uuidまたはtag_nameのいずれかを指定してください。"
          },
          "tag_color": {
            "type": "string",
            "description": "tag_nameで新しいタグを作成する際に使用する16進カラーコードです。例: #007AFE。"
          }
        },
        "description": "一致した取引にアプリケーションタグを付けます。"
      },
      "TransactionRuleActionAddNote": {
        "type": "object",
        "required": [
          "type",
          "note"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "add_note"
            ]
          },
          "note": {
            "type": "string",
            "description": "取引に添付されたメモのテキスト（作成者: Rule Engine）。エイリアスキー: value。"
          }
        },
        "description": "一致した取引に自動アナリストメモを添付します。"
      },
      "TransactionRuleActionAddToList": {
        "type": "object",
        "required": [
          "type",
          "list_id"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "add_to_list"
            ]
          },
          "list_id": {
            "type": "string",
            "format": "uuid",
            "description": "サブジェクトのvendor_dataを追加するリスト。"
          }
        },
        "description": "対象者のvendor_dataをブロックリスト、許可リスト、またはカスタムリストに追加します。"
      },
      "TransactionRuleActionOpenCase": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "open_case"
            ]
          },
          "blueprint": {
            "type": "string",
            "format": "uuid",
            "description": "ケースブループリントのUUID。デフォルトはアプリケーションのデフォルトブループリントです。"
          },
          "grouping": {
            "type": "string",
            "enum": [
              "by_applicant",
              "by_rule_and_applicant"
            ],
            "description": "繰り返しの一致を申請者ごとに1つのケースにまとめるか、ルールと申請者の組み合わせごとに1つのケースにまとめるかです。"
          },
          "attach_matched_transaction": {
            "type": "boolean",
            "description": "一致した取引をケースに添付します。"
          }
        },
        "description": "調査ケースを開きます（または既存のケースに追加します）。1つのルールでは、最初のopen_caseアクションのみが適用されます。"
      },
      "KYBRegistrySearchResults": {
        "type": "object",
        "properties": {
          "companies": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kyb_response_id": {
                  "type": "string",
                  "nullable": true,
                  "description": "この候補のハンドルです。`POST /v3/kyb/select/`に渡すと完全なプロファイルを取得できます。一時的なもので、この検索にのみ有効です。長期保存はせず、新しいハンドルが必要な場合は再検索してください。",
                  "example": "69aeeb95febb0f1704042259"
                },
                "name": {
                  "type": "string",
                  "nullable": true,
                  "description": "登記されている企業名。",
                  "example": "Tesco PLC"
                },
                "registration_number": {
                  "type": "string",
                  "nullable": true,
                  "description": "登記番号。",
                  "example": "00445790"
                },
                "status": {
                  "type": "string",
                  "nullable": true,
                  "description": "正規化された企業の登記ステータス（例: `active`、`dissolved`、`inactive`、`struck off`）。",
                  "example": "active"
                },
                "type": {
                  "type": "string",
                  "nullable": true,
                  "description": "法人登記に記載された法人形態。",
                  "example": "Public Limited Company"
                },
                "registered_address": {
                  "type": "string",
                  "nullable": true,
                  "description": "登記所から返された場合の、候補の登記住所。登記番号と併せて使用し、同名の企業を区別してください。米国では、検索した州ではなく企業が事業を行っている州で候補が登録されている場合があります。",
                  "example": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA"
                },
                "risk_level": {
                  "type": "string",
                  "nullable": true,
                  "description": "登記所が報告したリスクレベル（取得できる場合）。検索時点では通常`null`です。"
                },
                "fetch_status": {
                  "type": "string",
                  "nullable": true,
                  "description": "検索候補では常に`pending`です。企業の完全なプロファイルは、候補を選択したときにのみ取得（および課金）されます。",
                  "example": "pending"
                }
              }
            },
            "description": "重複を除いた候補リスト。`search_resolved=false`の間（Webhookモード）、または一致するものがない場合は空です。"
          },
          "pagination": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "description": "返された候補の数。"
              },
              "page": {
                "type": "integer"
              },
              "per_page": {
                "type": "integer",
                "example": 25
              }
            }
          },
          "search_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "pending",
              "resolved"
            ],
            "description": "登記検索のライフサイクルステータス。"
          },
          "search_resolved": {
            "type": "boolean",
            "description": "候補リストが確定すると`true`になります。"
          }
        }
      },
      "KYBRegistryCandidateRequest": {
        "type": "object",
        "required": [
          "kyb_response_id"
        ],
        "properties": {
          "kyb_response_id": {
            "type": "string",
            "maxLength": 1024,
            "description": "`POST /v3/kyb/search/`で得られる候補ハンドル(`kyb_registry.companies[].kyb_response_id`)。一時的なものなので、生成元の検索の直後に使用してください。ハンドルは長くなる場合があるため、切り詰めたり長さを想定したりせず、返された値をそのまま保存して送信してください。",
            "example": "69aeeb95febb0f1704042259"
          },
          "vendor_data": {
            "type": "string",
            "description": "この企業に対するお客様側の識別子です。そのまま返され、企業セッションとともに保存されます。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "企業セッションとともに保存され、そのまま返される自由形式のJSON。"
          },
          "save_api_request": {
            "type": "boolean",
            "default": true,
            "description": "`true`（デフォルト）である必要があります。KYBの法人登記の選択は、請求と取得を追跡できるよう常に保存されます。`false`を指定すると`400`が返されます。"
          }
        }
      },
      "WebhookEventEnvelope": {
        "type": "object",
        "description": "イベントタイプにかかわらず、署名付きのすべてのWebhook配信にDiditが追加するフィールド。`webhook_type`を読み取って、受信したペイロードの種類を判断してください。",
        "required": [
          "event_id",
          "webhook_type",
          "timestamp",
          "created_at",
          "application_id",
          "environment"
        ],
        "properties": {
          "event_id": {
            "type": "string",
            "format": "uuid",
            "description": "イベントの識別子。すべての送信先が同じ値を受け取り、再配信時も同じ値が維持されるため、重複排除に使用してください。"
          },
          "webhook_type": {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          "timestamp": {
            "type": "integer",
            "description": "この配信に署名したUnix時刻(秒)。`X-Timestamp`ヘッダーと同じ値です。再配信には新しい値が付与されます。"
          },
          "created_at": {
            "type": "integer",
            "description": "イベントを発生させた変更のUnix時刻(秒)。"
          },
          "application_id": {
            "type": "string",
            "format": "uuid",
            "description": "イベントが属するアプリケーション。"
          },
          "environment": {
            "type": "string",
            "enum": [
              "live",
              "sandbox"
            ],
            "description": "サンドボックスセッションおよびサンドボックスアプリケーションの場合は`sandbox`、それ以外の場合は`live`です。"
          }
        }
      },
      "SessionWebhookEventData": {
        "type": "object",
        "description": "`status.updated`および`data.updated`のセッションフィールド。該当しない任意フィールドは省略され、`null`として送信されることはありません。企業（KYB）セッションでは`business_session_id`、`session_kind`、`vendor_business_id`が追加されます。",
        "required": [
          "session_id",
          "status",
          "sandbox_scenario"
        ],
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "認証セッション。"
          },
          "business_session_id": {
            "type": "string",
            "format": "uuid",
            "description": "企業(KYB)セッションのみ:`session_id`と同じ値。"
          },
          "session_kind": {
            "type": "string",
            "enum": [
              "business"
            ],
            "description": "企業(KYB)セッションのみ。ユーザー(KYC)セッションのイベントにはトップレベルの`session_kind`が含まれないため、代わりに`decision.session_kind`を参照してください。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User"
            ],
            "description": "変更後のセッションステータス。"
          },
          "trigger": {
            "type": "string",
            "description": "イベントが検証フロー自体によって生成されたものでない場合に含まれます。例: `manual_review`、`manual_step_update`、`ongoing_monitoring`、`webhook_reconciliation`（最初の終了状態のWebhookが作成されなかったために再送された`status.updated`。すでに受け取った判定について2つ目のイベントを受け取る場合があるため、`session_id`と`status`で重複を排除してください）、`manual_webhook_recovery`、`kyb_registry_change`、`biometric_retention`（セッションで保持中の生体データがスケジュールに従って削除されたときに送信される`data.updated`）、または`console_registry_edit`、`console_key_people_skip`、`console_key_people_regenerate`などの`console_*`による編集。"
          },
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "description": "セッションのワークフロー。セッションにワークフローがない場合は省略されます。"
          },
          "workflow_version": {
            "type": "integer",
            "description": "セッションが実行したワークフローのバージョン。`workflow_id`と一緒に送信されます。"
          },
          "vendor_data": {
            "type": "string",
            "description": "セッションに対するお客様の`vendor_data`です。空の場合は省略されます。"
          },
          "vendor_business_id": {
            "type": "string",
            "description": "企業(KYB)セッションのみ:セッションが属する企業。該当する企業がない場合は省略されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true,
            "description": "セッションの`metadata`です。空の場合は省略されます。"
          },
          "decision": {
            "$ref": "#/components/schemas/SessionDecision"
          },
          "resubmit_info": {
            "type": "object",
            "description": "`status`が`Resubmitted`の場合のみ: ユーザーがやり直す必要があるステップとその理由です。",
            "required": [
              "nodes_to_resubmit",
              "reasons"
            ],
            "properties": {
              "nodes_to_resubmit": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "node_id",
                    "feature"
                  ],
                  "properties": {
                    "node_id": {
                      "type": "string",
                      "description": "セッションのワークフロー定義に記載されているノード識別子(例:`feature_ocr`、`feature_liveness`)。",
                      "example": "feature_poa"
                    },
                    "feature": {
                      "type": "string",
                      "description": "ノードの機能タイプです。例えば`OCR`、`LIVENESS`、`PROOF_OF_ADDRESS`などです。",
                      "example": "PROOF_OF_ADDRESS"
                    }
                  }
                },
                "description": "ユーザーがやり直す必要のあるワークフローステップ。[ステータスの更新](#patch-/v3/session/-sessionId-/update-status/)の`nodes_to_resubmit`と同じ`{node_id, feature}`エントリーです。"
              },
              "reasons": {
                "type": "object",
                "additionalProperties": true,
                "description": "`nodes_to_resubmit`内の`node_id`ごとの理由。"
              }
            }
          },
          "sandbox_scenario": {
            "type": "string",
            "nullable": true,
            "description": "サンドボックスセッションに設定されたシミュレーション結果、または`null`。本番環境のセッションでは常に`null`です。"
          }
        }
      },
      "SessionStatusUpdatedEvent": {
        "description": "認証セッションのステータスが変更されました。`decision`は`Approved`、`Declined`、`In Review`、`Abandoned`の場合にのみ送信されます。Webhookバージョン3(デフォルト)の送信先では`GET /v3/session/{sessionId}/decision/`と同じ形式、バージョン1または2の送信先では以前の簡略化された形式になります。企業のセッションは常にバージョン3の企業向け判定を受け取ります。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "$ref": "#/components/schemas/SessionWebhookEventData"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "status.updated"
                ],
                "description": "常に`status.updated`です。"
              }
            },
            "required": [
              "webhook_type"
            ]
          }
        ]
      },
      "SessionDataUpdatedEvent": {
        "description": "ステータスの変更を伴わずに認証セッションのデータが変更されたことを示します。たとえば、手動レビューでの編集、ステップのオーバーライド、継続的なモニタリングによる再スクリーニングの後に発生します。`decision`は`Approved`、`Declined`、`In Review`、`Abandoned`の場合にのみ送信されます。Webhookバージョン3（デフォルト）の送信先では`GET /v3/session/{sessionId}/decision/`と同じ形式、バージョン1または2の送信先では従来の簡略化された形式になります。企業セッションには常にバージョン3の企業向け判定が送信されます。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "$ref": "#/components/schemas/SessionWebhookEventData"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "data.updated"
                ],
                "description": "常に`data.updated`です。"
              }
            },
            "required": [
              "webhook_type"
            ]
          }
        ]
      },
      "UserStatusUpdatedEvent": {
        "description": "ユーザーのステータスが変更されました。ユーザーの作成時には送信されません。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "user.status.updated"
                ],
                "description": "常に`user.status.updated`です。"
              },
              "vendor_user_id": {
                "type": "string",
                "format": "uuid",
                "description": "イベントの対象となるユーザー。"
              },
              "vendor_data": {
                "type": "string",
                "nullable": true,
                "description": "ユーザーに対するお客様の`vendor_data`、または`null`です。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "IN_REVIEW",
                  "FLAGGED",
                  "BLOCKED"
                ],
                "description": "変更後のユーザーステータス。"
              },
              "previous_status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "IN_REVIEW",
                  "FLAGGED",
                  "BLOCKED"
                ],
                "description": "変更前のステータス。"
              }
            },
            "required": [
              "webhook_type",
              "vendor_user_id",
              "vendor_data",
              "status",
              "previous_status"
            ]
          }
        ]
      },
      "UserDataUpdatedEvent": {
        "description": "ユーザーのフィールドが変更されました。ユーザーの作成時には送信されません。1回の保存でステータスイベントとデータイベントの両方が発生することがあります。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "user.data.updated"
                ],
                "description": "常に`user.data.updated`です。"
              },
              "vendor_user_id": {
                "type": "string",
                "format": "uuid",
                "description": "イベントの対象となるユーザー。"
              },
              "vendor_data": {
                "type": "string",
                "nullable": true,
                "description": "ユーザーに対するお客様の`vendor_data`、または`null`です。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "IN_REVIEW",
                  "FLAGGED",
                  "BLOCKED"
                ],
                "description": "変更後のユーザーステータス。"
              },
              "changed_fields": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "vendor_data",
                    "display_name",
                    "full_name",
                    "date_of_birth",
                    "metadata",
                    "portrait_image",
                    "issuing_states",
                    "approved_emails",
                    "approved_phones",
                    "features",
                    "session_count",
                    "approved_count",
                    "declined_count",
                    "in_review_count",
                    "first_session_at",
                    "last_session_at"
                  ]
                },
                "description": "変更されたフィールドの名前。"
              },
              "changes": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "previous": {
                      "nullable": true,
                      "description": "変更前の値です。日付はISO 8601形式の文字列です。"
                    },
                    "current": {
                      "nullable": true,
                      "description": "変更後の値です。日付はISO 8601形式の文字列です。"
                    }
                  }
                },
                "description": "変更された各フィールドの変更前と現在の値。フィールド名をキーとします。値には個人データ(氏名、生年月日、顔写真のリンク、メールアドレス、電話番号)が含まれる場合があるため、適切に取り扱ってください。"
              }
            },
            "required": [
              "webhook_type",
              "vendor_user_id",
              "vendor_data",
              "status",
              "changed_fields",
              "changes"
            ]
          }
        ]
      },
      "BusinessStatusUpdatedEvent": {
        "description": "企業のステータスが変更されました。企業の作成時には送信されません。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "business.status.updated"
                ],
                "description": "常に`business.status.updated`です。"
              },
              "vendor_business_id": {
                "type": "string",
                "format": "uuid",
                "description": "イベントの対象となる企業。"
              },
              "vendor_data": {
                "type": "string",
                "nullable": true,
                "description": "企業に対するお客様の`vendor_data`、または`null`です。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "IN_REVIEW",
                  "FLAGGED",
                  "BLOCKED"
                ],
                "description": "変更後の企業ステータス。"
              },
              "previous_status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "IN_REVIEW",
                  "FLAGGED",
                  "BLOCKED"
                ],
                "description": "変更前のステータス。"
              }
            },
            "required": [
              "webhook_type",
              "vendor_business_id",
              "vendor_data",
              "status",
              "previous_status"
            ]
          }
        ]
      },
      "BusinessDataUpdatedEvent": {
        "description": "企業のフィールドが変更されました。企業の作成時には送信されません。1回の保存でステータスイベントとデータイベントの両方が発生することがあります。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "business.data.updated"
                ],
                "description": "常に`business.data.updated`です。"
              },
              "vendor_business_id": {
                "type": "string",
                "format": "uuid",
                "description": "イベントの対象となる企業。"
              },
              "vendor_data": {
                "type": "string",
                "nullable": true,
                "description": "企業に対するお客様の`vendor_data`、または`null`です。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "IN_REVIEW",
                  "FLAGGED",
                  "BLOCKED"
                ],
                "description": "変更後の企業ステータス。"
              },
              "changed_fields": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "vendor_data",
                    "display_name",
                    "metadata",
                    "legal_name",
                    "registration_number",
                    "country_code",
                    "session_count",
                    "approved_count",
                    "declined_count",
                    "in_review_count",
                    "features",
                    "first_session_at",
                    "last_session_at"
                  ]
                },
                "description": "変更されたフィールドの名前。"
              },
              "changes": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "previous": {
                      "nullable": true,
                      "description": "変更前の値です。日付はISO 8601形式の文字列です。"
                    },
                    "current": {
                      "nullable": true,
                      "description": "変更後の値です。日付はISO 8601形式の文字列です。"
                    }
                  }
                },
                "description": "変更された各フィールドの変更前と現在の値。フィールド名をキーとします。"
              }
            },
            "required": [
              "webhook_type",
              "vendor_business_id",
              "vendor_data",
              "status",
              "changed_fields",
              "changes"
            ]
          }
        ]
      },
      "TransactionCreatedEvent": {
        "description": "取引が作成され、スクリーニングされました。本番環境のアプリケーションでのみ送信されます。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "transaction.created"
                ],
                "description": "常に`transaction.created`です。"
              },
              "transaction_id": {
                "type": "string",
                "format": "uuid",
                "description": "取引のDidit識別子です。"
              },
              "txn_id": {
                "type": "string",
                "nullable": true,
                "description": "作成時に指定した`transaction_id`、または`null`。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "APPROVED",
                  "IN_REVIEW",
                  "DECLINED",
                  "AWAITING_USER"
                ],
                "description": "変更後のモニタリングステータス。"
              },
              "score": {
                "type": "integer",
                "description": "ルールによって累積されたリスクスコア。"
              },
              "severity": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "UNKNOWN",
                  "LOW",
                  "MEDIUM",
                  "HIGH",
                  "CRITICAL",
                  null
                ],
                "description": "リスクの重大度。ルールまたはプロバイダーが設定するまでは`null`です。"
              },
              "amount": {
                "type": "string",
                "description": "10進数文字列で表した取引金額。APIとは異なり正規化されないため、末尾にゼロが含まれる場合があります（小数点以下最大18桁）。"
              },
              "currency": {
                "type": "string",
                "description": "`amount`の通貨コードまたは暗号資産シンボル。"
              },
              "direction": {
                "type": "string",
                "enum": [
                  "INBOUND",
                  "OUTBOUND"
                ],
                "description": "対象者から見た方向です。"
              },
              "action_required": {
                "type": "object",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TransactionVerificationSessionAction"
                  },
                  {
                    "$ref": "#/components/schemas/TransactionWalletOwnershipAction"
                  }
                ],
                "discriminator": {
                  "propertyName": "type",
                  "mapping": {
                    "verification_session": "#/components/schemas/TransactionVerificationSessionAction",
                    "wallet_ownership": "#/components/schemas/TransactionWalletOwnershipAction"
                  }
                },
                "description": "保留中のエンドユーザーアクション、または`null`。取引の`action_required`と同じオブジェクトです。`session_token`は認証情報であるため、決してログに記録しないでください。"
              }
            },
            "required": [
              "webhook_type",
              "transaction_id",
              "txn_id",
              "status",
              "score",
              "severity",
              "amount",
              "currency",
              "direction",
              "action_required"
            ]
          }
        ]
      },
      "TransactionStatusUpdatedEvent": {
        "description": "ルール、レビュー、またはエンドユーザーのアクションによって取引のステータスが変更されました。本番環境のアプリケーションでのみ送信されます。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "transaction.status.updated"
                ],
                "description": "常に`transaction.status.updated`です。"
              },
              "transaction_id": {
                "type": "string",
                "format": "uuid",
                "description": "取引のDidit識別子です。"
              },
              "txn_id": {
                "type": "string",
                "nullable": true,
                "description": "作成時に指定した`transaction_id`、または`null`。"
              },
              "status": {
                "type": "string",
                "enum": [
                  "APPROVED",
                  "IN_REVIEW",
                  "DECLINED",
                  "AWAITING_USER"
                ],
                "description": "変更後のモニタリングステータス。"
              },
              "score": {
                "type": "integer",
                "description": "ルールによって累積されたリスクスコア。"
              },
              "severity": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "UNKNOWN",
                  "LOW",
                  "MEDIUM",
                  "HIGH",
                  "CRITICAL",
                  null
                ],
                "description": "リスクの重大度。ルールまたはプロバイダーが設定するまでは`null`です。"
              },
              "amount": {
                "type": "string",
                "description": "10進数文字列で表した取引金額。APIとは異なり正規化されないため、末尾にゼロが含まれる場合があります（小数点以下最大18桁）。"
              },
              "currency": {
                "type": "string",
                "description": "`amount`の通貨コードまたは暗号資産シンボル。"
              },
              "direction": {
                "type": "string",
                "enum": [
                  "INBOUND",
                  "OUTBOUND"
                ],
                "description": "対象者から見た方向です。"
              },
              "action_required": {
                "type": "object",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TransactionVerificationSessionAction"
                  },
                  {
                    "$ref": "#/components/schemas/TransactionWalletOwnershipAction"
                  }
                ],
                "discriminator": {
                  "propertyName": "type",
                  "mapping": {
                    "verification_session": "#/components/schemas/TransactionVerificationSessionAction",
                    "wallet_ownership": "#/components/schemas/TransactionWalletOwnershipAction"
                  }
                },
                "description": "保留中のエンドユーザーアクション、または`null`。取引の`action_required`と同じオブジェクトです。`session_token`は認証情報であるため、決してログに記録しないでください。"
              }
            },
            "required": [
              "webhook_type",
              "transaction_id",
              "txn_id",
              "status",
              "score",
              "severity",
              "amount",
              "currency",
              "direction",
              "action_required"
            ]
          }
        ]
      },
      "TravelRuleStatusUpdatedEvent": {
        "description": "トラベルルールのやり取りのステータスが変更されました。`FINISHED`、`CANCELLED`、`EXPIRED`までの（これらを含む）すべての遷移で送信され、それ以降は送信されません。本番アプリケーションに対して送信され、トラベルルールのやり取りについてはサンドボックスアプリケーション（`environment: sandbox`）にも送信されます。トップレベルの`status`はありません。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "travel_rule.status.updated"
                ],
                "description": "常に`travel_rule.status.updated`です。"
              },
              "transaction_id": {
                "type": "string",
                "format": "uuid",
                "description": "このやり取りが属する取引。"
              },
              "txn_id": {
                "type": "string",
                "nullable": true,
                "description": "作成時に指定した`transaction_id`、または`null`。"
              },
              "travel_rule_status": {
                "type": "string",
                "enum": [
                  "AWAITING_COUNTERPARTY",
                  "ON_HOLD",
                  "COMPLETED",
                  "FINISHED",
                  "CANCELLED",
                  "EXPIRED",
                  "COUNTERPARTY_MISMATCHED_DATA",
                  "COUNTERPARTY_VASP_NOT_FOUND",
                  "COUNTERPARTY_VASP_NOT_REACHABLE",
                  "UNCONFIRMED_OWNERSHIP",
                  "COUNTERPARTY_VASP_GENERAL_DECLINE",
                  "NOT_ENOUGH_COUNTERPARTY_DATA",
                  "NOT_APPLICABLE"
                ],
                "description": "変更後の交換ステータスです。"
              },
              "rail": {
                "type": "string",
                "enum": [
                  "",
                  "INTERNAL",
                  "TRP",
                  "GTR",
                  "TRUST",
                  "VERIFYVASP",
                  "SYGNA",
                  "EMAIL",
                  "TEST_VASP"
                ],
                "description": "このやり取りが行われるネットワーク。特定できなかった場合は空文字列です。`TEST_VASP`は、Didit Test VASPが応答したサンドボックスの送金です。"
              },
              "test_vasp": {
                "type": "boolean",
                "description": "Didit Test VASPが応答したサンドボックスの送金でのみ含まれ、値は`true`です。"
              },
              "test_vasp_scenario": {
                "type": "string",
                "description": "`test_vasp`の場合にのみ含まれます。結果を決定したサンドボックスのシナリオ、または空文字列です。"
              },
              "direction": {
                "type": "string",
                "enum": [
                  "INBOUND",
                  "OUTBOUND"
                ],
                "description": "送金の方向です。"
              }
            },
            "required": [
              "webhook_type",
              "transaction_id",
              "txn_id",
              "travel_rule_status",
              "rail",
              "direction"
            ]
          }
        ]
      },
      "WorkflowComplianceChangedEvent": {
        "description": "再評価の後、公開済みワークフローのコンプライアンスステータスが変更されました。ワークフローごとに1件のイベントです。トップレベルの`status`はありません。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "workflow.compliance_changed"
                ],
                "description": "常に`workflow.compliance_changed`です。"
              },
              "workflow_id": {
                "type": "string",
                "format": "uuid",
                "description": "変更されたワークフロー。"
              },
              "workflow_version": {
                "type": "integer",
                "description": "評価されたバージョン。"
              },
              "workflow_label": {
                "type": "string",
                "nullable": true,
                "description": "ワークフローの表示名。"
              },
              "transition": {
                "type": "object",
                "required": [
                  "from",
                  "to"
                ],
                "properties": {
                  "from": {
                    "type": "string",
                    "enum": [
                      "compliant",
                      "gaps_detected",
                      "pending_change",
                      "unknown_coverage",
                      "not_evaluated"
                    ],
                    "description": "再評価前のステータス。"
                  },
                  "to": {
                    "type": "string",
                    "enum": [
                      "compliant",
                      "gaps_detected",
                      "pending_change",
                      "unknown_coverage",
                      "not_evaluated"
                    ],
                    "description": "再評価後のステータス。"
                  }
                }
              },
              "severity": {
                "type": "string",
                "enum": [
                  "actionable",
                  "indicative",
                  "informative"
                ],
                "description": "ギャップが検出された場合は`actionable`、保留中の変更には`indicative`、ギャップが解消された場合は`informative`です。"
              },
              "kb_version": {
                "type": "string",
                "description": "使用された規制ナレッジベースのバージョン。"
              }
            },
            "required": [
              "webhook_type",
              "workflow_id",
              "workflow_version",
              "workflow_label",
              "transition",
              "severity",
              "kb_version"
            ]
          }
        ]
      },
      "WebhookEventPayload": {
        "description": "署名付きWebhook配信の本文。`webhook_type`で判別されます。`activity.created`は購読できますが、現在は送信されていません。それ以外の`webhook_type`は新しいイベントタイプとして扱い、生の本文を保持してください。",
        "oneOf": [
          {
            "$ref": "#/components/schemas/SessionStatusUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/SessionDataUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/UserStatusUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/UserDataUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/BusinessStatusUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/BusinessDataUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/TransactionCreatedEvent"
          },
          {
            "$ref": "#/components/schemas/TransactionStatusUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/TravelRuleStatusUpdatedEvent"
          },
          {
            "$ref": "#/components/schemas/WorkflowComplianceChangedEvent"
          },
          {
            "$ref": "#/components/schemas/TransactionRuleSuggestionsCreatedEvent"
          }
        ],
        "discriminator": {
          "propertyName": "webhook_type",
          "mapping": {
            "status.updated": "#/components/schemas/SessionStatusUpdatedEvent",
            "data.updated": "#/components/schemas/SessionDataUpdatedEvent",
            "user.status.updated": "#/components/schemas/UserStatusUpdatedEvent",
            "user.data.updated": "#/components/schemas/UserDataUpdatedEvent",
            "business.status.updated": "#/components/schemas/BusinessStatusUpdatedEvent",
            "business.data.updated": "#/components/schemas/BusinessDataUpdatedEvent",
            "transaction.created": "#/components/schemas/TransactionCreatedEvent",
            "transaction.status.updated": "#/components/schemas/TransactionStatusUpdatedEvent",
            "travel_rule.status.updated": "#/components/schemas/TravelRuleStatusUpdatedEvent",
            "workflow.compliance_changed": "#/components/schemas/WorkflowComplianceChangedEvent",
            "transaction_rule_suggestions.created": "#/components/schemas/TransactionRuleSuggestionsCreatedEvent"
          }
        }
      },
      "KYBRegistrySearchResolvedCallback": {
        "type": "object",
        "description": "登記検索が完了した時点で、`POST /v3/kyb/search/`の`webhook_url`に送信されるコールバックの本文。署名はされていません。リクエストには`X-Didit-Unsigned-Callback: true`が付与され、署名ヘッダーは一切含まれないため、`request_id`を自分が開始した検索と照合して確認してください。`webhook_type`ではなく`event_type`を使用します。",
        "required": [
          "event_id",
          "event_type",
          "request_id",
          "vendor_data",
          "metadata",
          "search_status",
          "search_resolved",
          "kyb_registry",
          "timestamp",
          "created_at"
        ],
        "properties": {
          "event_id": {
            "type": "string",
            "format": "uuid",
            "description": "コールバックの識別子。"
          },
          "event_type": {
            "type": "string",
            "enum": [
              "kyb.registry_search.resolved"
            ],
            "description": "常に`kyb.registry_search.resolved`です。"
          },
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "`POST /v3/kyb/search/`が返した`request_id`です。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "送信した`vendor_data`をそのまま返します。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "送信した`metadata`のエコー。"
          },
          "search_status": {
            "type": "string",
            "description": "現在は常に`resolved`です。"
          },
          "search_resolved": {
            "type": "boolean",
            "description": "`search_status`が`resolved`の場合は`true`です。"
          },
          "kyb_registry": {
            "$ref": "#/components/schemas/KYBRegistrySearchResults"
          },
          "timestamp": {
            "type": "integer",
            "description": "コールバックがキューに追加されたUnix時刻(秒)。"
          },
          "created_at": {
            "type": "integer",
            "description": "コールバックがキューに追加されたUnix時刻(秒)。"
          }
        }
      },
      "AMLScreening": {
        "type": "object",
        "properties": {
          "node_id": {
            "type": "string",
            "description": "ワークフローグラフ内のこのAMLステップの一意の識別子。"
          },
          "status": {
            "type": "string",
            "description": "このAMLスクリーニングの機能レベルのステータスです。トップレベルのセッションの`status`とは独立しています。個々の機能が`In Review`のままでも、セッション全体の判定が確定する場合があります。",
            "enum": [
              "Not Finished",
              "Approved",
              "Declined",
              "In Review",
              "Resub Requested"
            ]
          },
          "total_hits": {
            "type": "integer",
            "description": "見つかった一致の総数"
          },
          "entity_type": {
            "type": "string",
            "description": "スクリーニング対象のエンティティの種類：個人または法人"
          },
          "hits": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ヒットに対するDiditの安定した識別子で、`hit_`の後に16進数24文字が続きます。対象者を再度スクリーニングした場合も、一致した同じエンティティは同じ`id`を保持します。AMLヒットレビューのエンドポイントには`hit_id`として渡してください。"
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "一致のソースURL"
                },
                "match": {
                  "type": "boolean",
                  "description": "確定した一致かどうか"
                },
                "score": {
                  "type": "number",
                  "format": "float",
                  "nullable": true,
                  "minimum": 0,
                  "maximum": 1,
                  "description": "非推奨の0〜1の範囲の加重一致スコア（例: `0.73`）。代わりに`match_score`（0〜100）を使用してください。",
                  "deprecated": true
                },
                "target": {
                  "type": "boolean",
                  "nullable": true,
                  "description": "一致したエンティティが、掲載の直接の対象(関係者ではなく)かどうか。情報源が明示していない場合は`null`です。"
                },
                "caption": {
                  "type": "string",
                  "description": "一致項目のキャプションまたはタイトル"
                },
                "datasets": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "PEP",
                      "PEP Level 1",
                      "PEP Level 2",
                      "PEP Level 3",
                      "PEP Level 4",
                      "Sanctions",
                      "Adverse Media",
                      "Warnings and Regulatory Enforcement",
                      "Fitness and Probity",
                      "SIP",
                      "SIE",
                      "Insolvency",
                      "Other Lists"
                    ]
                  },
                  "description": "一致が見つかったデータセットカテゴリーのリストです。エンティティがPEPリスト（レベル付き）、制裁データベース、ネガティブメディア、警告・規制執行、またはその他のコンプライアンスデータセットに掲載されていたかを示します。エンティティのソースにこれらのカテゴリーがいずれも記載されていない場合は`Other Lists`になります。"
                },
                "features": {
                  "type": "object",
                  "nullable": true,
                  "description": "一致に関する追加の特徴"
                },
                "rca_name": {
                  "type": "string",
                  "description": "該当する場合はRCAの名前"
                },
                "last_seen": {
                  "type": "string",
                  "format": "date-time",
                  "description": "一致が最後に確認された日付"
                },
                "risk_view": {
                  "type": "object",
                  "properties": {
                    "crimes": {
                      "type": "object",
                      "properties": {
                        "score": {
                          "type": "integer"
                        },
                        "weightage": {
                          "type": "integer"
                        },
                        "risk_level": {
                          "type": "string"
                        },
                        "risk_scores": {
                          "type": "object"
                        }
                      }
                    },
                    "countries": {
                      "type": "object",
                      "properties": {
                        "score": {
                          "type": "integer"
                        },
                        "weightage": {
                          "type": "integer"
                        },
                        "risk_level": {
                          "type": "string"
                        },
                        "risk_scores": {
                          "type": "object"
                        }
                      }
                    },
                    "categories": {
                      "type": "object",
                      "properties": {
                        "score": {
                          "type": "integer"
                        },
                        "weightage": {
                          "type": "integer"
                        },
                        "risk_level": {
                          "type": "string"
                        },
                        "risk_scores": {
                          "type": "object"
                        }
                      }
                    },
                    "custom_list": {
                      "type": "object"
                    }
                  }
                },
                "first_seen": {
                  "type": "string",
                  "format": "date-time",
                  "description": "一致が最初に確認された日付"
                },
                "properties": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "alias": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "title": {
                      "type": "string",
                      "nullable": true
                    },
                    "gender": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "height": {
                      "type": "string",
                      "nullable": true
                    },
                    "topics": {
                      "type": "string",
                      "nullable": true
                    },
                    "weight": {
                      "type": "string",
                      "nullable": true
                    },
                    "address": {
                      "type": "string",
                      "nullable": true
                    },
                    "country": {
                      "type": "string",
                      "nullable": true
                    },
                    "website": {
                      "type": "string",
                      "nullable": true
                    },
                    "eyeColor": {
                      "type": "string",
                      "nullable": true
                    },
                    "keywords": {
                      "type": "string",
                      "nullable": true
                    },
                    "lastName": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "position": {
                      "type": "string",
                      "nullable": true
                    },
                    "religion": {
                      "type": "string",
                      "nullable": true
                    },
                    "birthDate": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "education": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "ethnicity": {
                      "type": "string",
                      "nullable": true
                    },
                    "firstName": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "hairColor": {
                      "type": "string",
                      "nullable": true
                    },
                    "weakAlias": {
                      "type": "string",
                      "nullable": true
                    },
                    "birthPlace": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "modifiedAt": {
                      "type": "string",
                      "nullable": true
                    },
                    "wikidataId": {
                      "type": "string",
                      "nullable": true
                    },
                    "citizenship": {
                      "type": "string",
                      "nullable": true
                    },
                    "nationality": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                },
                "match_score": {
                  "type": "number",
                  "description": "氏名の類似度、生年月日、国の一致から算出される加重アイデンティティ信頼度スコア（0-100）。ヒットが誤検知（False Positive）か一致の可能性あり（Possible Match）かの判定に使用されます。",
                  "format": "float",
                  "nullable": true
                },
                "risk_score": {
                  "type": "number",
                  "description": "エンティティのリスクスコア（0-100）。誤検知ではないヒットのうち最も高いrisk_scoreに基づいて、最終的なAMLステータス（承認済み/レビュー中/却下）を判定するために使用されます。"
                },
                "review_status": {
                  "type": "string",
                  "description": "このヒットのレビューステータス。'Unreviewed'、'Confirmed Match'、'False Positive'、'Inconclusive'のいずれかです。",
                  "enum": [
                    "Unreviewed",
                    "Confirmed Match",
                    "False Positive",
                    "Inconclusive"
                  ]
                },
                "score_breakdown": {
                  "type": "object",
                  "description": "match_scoreの算出方法の詳細な内訳。",
                  "properties": {
                    "name_score": {
                      "type": "integer",
                      "description": "名前の生の類似度パーセンテージ（0-100）。"
                    },
                    "name_weight": {
                      "type": "integer",
                      "description": "設定における氏名の元の重み（0-100）です。"
                    },
                    "name_weight_normalized": {
                      "type": "number",
                      "description": "欠損データに応じて再重み付けした後の、氏名の正規化された重み（0-100）。"
                    },
                    "name_contribution": {
                      "type": "number",
                      "description": "名前が合計スコアに寄与したポイント。"
                    },
                    "dob_score": {
                      "type": "integer",
                      "description": "生年月日の一致スコア（-100〜100）。"
                    },
                    "dob_weight": {
                      "type": "integer",
                      "description": "設定における生年月日の元の重み（0-100）です。"
                    },
                    "dob_weight_normalized": {
                      "type": "number",
                      "description": "欠損データに応じて再重み付けした後の、生年月日の正規化された重み（0-100）。"
                    },
                    "dob_contribution": {
                      "type": "number",
                      "description": "生年月日が合計スコアに寄与したポイント。"
                    },
                    "country_score": {
                      "type": "integer",
                      "description": "国の一致スコア（-100〜100）。"
                    },
                    "country_weight": {
                      "type": "integer",
                      "description": "設定における国の元の重み（0-100）です。"
                    },
                    "country_weight_normalized": {
                      "type": "number",
                      "description": "欠損データに応じて再重み付けした後の、国の正規化された重み（0-100）。"
                    },
                    "country_contribution": {
                      "type": "number",
                      "description": "国が合計スコアに寄与したポイント。"
                    },
                    "document_number_match_type": {
                      "type": "string",
                      "description": "書類番号の「Golden Key」評価の結果。",
                      "enum": [
                        "MATCH",
                        "NEUTRAL",
                        "HARD_MISMATCH"
                      ]
                    },
                    "document_number_effect": {
                      "type": "string",
                      "description": "書類番号がスコアに与える影響を人が読める形で説明したもの。"
                    },
                    "total_score": {
                      "type": "integer",
                      "description": "最終的な加重一致スコア（0-100）です。"
                    }
                  }
                },
                "pep_matches": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "aliases": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "education": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "list_name": {
                        "type": "string"
                      },
                      "publisher": {
                        "type": "string"
                      },
                      "source_url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "description": {
                        "type": "string"
                      },
                      "matched_name": {
                        "type": "string"
                      },
                      "pep_position": {
                        "type": "string"
                      },
                      "date_of_birth": {
                        "type": "string"
                      },
                      "other_sources": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "place_of_birth": {
                        "type": "string"
                      }
                    }
                  }
                },
                "linked_entities": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "active": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "status": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "details": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "relation": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "warning_matches": {
                  "type": "array",
                  "description": "警告および規制執行との一致のリストです。Warning、SIP、Warnings and Regulatory Enforcement、Fitness and Probity、SIE、Insolvencyの各カテゴリーのエントリが含まれます。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "list_name": {
                        "type": "string",
                        "description": "警告リストの公開元の名称"
                      },
                      "matched_name": {
                        "type": "string",
                        "description": "警告リストで一致した名前"
                      },
                      "description": {
                        "type": "string",
                        "description": "警告エントリの説明"
                      },
                      "publisher": {
                        "type": "string",
                        "description": "警告の発行元または情報源"
                      },
                      "source_url": {
                        "type": "string",
                        "format": "uri",
                        "description": "警告の情報源へのURL"
                      },
                      "other_sources": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "追加のソースURL"
                      },
                      "countries": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "nullable": true,
                        "description": "警告に関連する国"
                      },
                      "created_at": {
                        "type": "string",
                        "nullable": true,
                        "description": "警告エントリの作成日"
                      },
                      "updated_at": {
                        "type": "string",
                        "nullable": true,
                        "description": "警告エントリの最終更新日"
                      },
                      "additional_data": {
                        "type": "object",
                        "description": "警告ソースからの追加データ。`case_details`配列を含む`data`オブジェクトが含まれる場合があります。",
                        "properties": {
                          "data": {
                            "type": "object",
                            "properties": {
                              "case_details": {
                                "type": "array",
                                "description": "この一致に関連する警告ケースの詳細",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "case_type": {
                                      "type": "string",
                                      "description": "警告ケースの種類",
                                      "enum": [
                                        "Accusation",
                                        "Arrest",
                                        "Bribery",
                                        "Criminal",
                                        "Fraud",
                                        "Illegal Fundraising",
                                        "Non-conviction Terror",
                                        "Proclaimed Offender",
                                        "Regulatory Enforcement",
                                        "Terrorism",
                                        "Terrorism-related",
                                        "Terrorism-related listing"
                                      ]
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "sanction_matches": {
                  "type": "array",
                  "description": "このエンティティについて見つかった制裁リストとの一致のリストです。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "list_name": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "nullable": true,
                        "description": "制裁リストの名称"
                      },
                      "matched_name": {
                        "type": "string",
                        "description": "制裁リストで一致した名前"
                      },
                      "description": {
                        "type": "string",
                        "description": "制裁エントリの説明"
                      },
                      "reason": {
                        "type": "string",
                        "nullable": true,
                        "description": "エンティティが制裁対象となった理由の自由記述。制裁リストの理由エントリーを結合したものです。例: 'Executive Order 13224 (Terrorism)'、'Support for actions undermining Ukraine's sovereignty'、'Listed due to national security concerns.'"
                      },
                      "source_url": {
                        "type": "string",
                        "format": "uri",
                        "description": "制裁の情報源へのURL"
                      },
                      "other_sources": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "追加のソースURL"
                      },
                      "details": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "制裁に関する追加の詳細"
                      },
                      "legal_basis": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "制裁の法的根拠"
                      },
                      "listed_on": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "nullable": true,
                        "description": "エンティティがリストに掲載された日付"
                      },
                      "sanction_list": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "nullable": true,
                        "description": "制裁リストの識別子"
                      },
                      "sanction_program": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "エンティティが掲載されている制裁プログラム"
                      },
                      "sanctioning_authority": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "制裁を科した当局"
                      },
                      "updated_on": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "制裁エントリが最後に更新された日付"
                      },
                      "additional_data": {
                        "type": "object",
                        "description": "主要フィールドに含まれない、制裁ソースからの追加データ"
                      }
                    }
                  }
                },
                "adverse_media_details": {
                  "type": "object",
                  "properties": {
                    "sentiment": {
                      "type": "string"
                    },
                    "entity_type": {
                      "type": "string"
                    },
                    "sentiment_score": {
                      "type": "integer"
                    },
                    "adverse_keywords": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    }
                  }
                },
                "adverse_media_matches": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "country": {
                        "type": "string"
                      },
                      "summary": {
                        "type": "string"
                      },
                      "headline": {
                        "type": "string"
                      },
                      "sentiment": {
                        "type": "string"
                      },
                      "thumbnail": {
                        "type": "string",
                        "format": "uri"
                      },
                      "source_url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "author_name": {
                        "type": "string",
                        "nullable": true
                      },
                      "other_sources": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "adverse_keywords": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "sentiment_score": {
                        "type": "integer"
                      },
                      "publication_date": {
                        "type": "string",
                        "format": "date-time"
                      }
                    }
                  }
                },
                "additional_information": {
                  "type": "object"
                }
              }
            }
          },
          "score": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "minimum": 0,
            "maximum": 100,
            "description": "AMLスクリーニングの総合スコア。すべてのヒットの中で最も高いリスクスコア（float、0-100）です。算出されるまでは`null`です。"
          },
          "screened_data": {
            "type": "object",
            "properties": {
              "full_name": {
                "type": "string"
              },
              "nationality": {
                "type": "string"
              },
              "date_of_birth": {
                "type": "string",
                "format": "date"
              },
              "document_number": {
                "type": "string",
                "nullable": true
              }
            }
          },
          "is_ongoing_monitoring_enabled": {
            "type": "boolean",
            "description": "このスクリーニングで継続的なAMLモニタリングが有効かどうかです。`true`の場合、エンティティは定期的に再スクリーニングされ、新たなヒットがあればレポートが更新されます。"
          },
          "next_ongoing_monitoring_bill_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "この継続的なモニタリングのサブスクリプションが次回請求される日付（YYYY-MM-DD）。`is_ongoing_monitoring_enabled = true`の場合、最後に継続的なモニタリングが請求された日付に365日を加えて算出されます。それ以外の場合は`null`です。これは請求日であり、スクリーニング日ではありません。スクリーニング日には`last_ongoing_screening_at`を使用してください。"
          },
          "last_ongoing_screening_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "継続的なモニタリングがこのレコードの再スクリーニングを最後に完了した日時。結果が変わったかどうかは問いません。レコードが一度も再スクリーニングされていない場合は`null`で、有効化日や請求日から遡って設定されることはありません。"
          },
          "last_ongoing_screening_datasets_updated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "そのスクリーニングの時点でプロバイダーが報告した、最新のAMLデータセット更新日です。プロバイダーがデータセットの日付を報告しなかった場合は`null`となり、推定されることはありません。"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "feature": {
                  "type": "string",
                  "enum": [
                    "ID_VERIFICATION",
                    "NFC",
                    "LIVENESS",
                    "FACEMATCH",
                    "PROOF_OF_ADDRESS",
                    "PHONE",
                    "EMAIL",
                    "AML",
                    "LOCATION",
                    "DATABASE_VALIDATION",
                    "QUESTIONNAIRE",
                    "DOCUMENT_AI",
                    "KYB_REGISTRY",
                    "KYB_DOCUMENTS",
                    "KYB_KEY_PEOPLE",
                    "GEOLOCATION",
                    "SIGNATURE"
                  ],
                  "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。AMLスクリーニング内では通常`AML`ですが、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                },
                "risk": {
                  "type": "string"
                },
                "additional_data": {
                  "type": "object",
                  "nullable": true
                },
                "log_type": {
                  "type": "string"
                },
                "short_description": {
                  "type": "string"
                },
                "long_description": {
                  "type": "string"
                },
                "node_id": {
                  "type": "string",
                  "description": "この警告を生成したワークフローグラフのノードID"
                }
              }
            }
          }
        }
      },
      "MonitoringEvent": {
        "type": "object",
        "description": "一覧エンドポイントおよび対象者タイムラインエンドポイントが返す、保存済みのモニタリングイベント1件です。制限付きの証拠（ペイロード、デバイスコンテキスト、ルールの証拠）は`GET /v3/events/{event_uuid}/`でのみ返されます。",
        "required": [
          "event_uuid",
          "event_id",
          "event_category",
          "action_type",
          "occurred_at",
          "received_at",
          "status",
          "score",
          "subject_vendor_data",
          "subject_entity_type",
          "subject_uuid",
          "counterparty_vendor_data",
          "session_id",
          "device_fingerprint",
          "ip_address",
          "ip_country",
          "amount",
          "currency",
          "game_id",
          "round_id",
          "bonus_id",
          "affiliate_code",
          "payment_reference_id",
          "retention_class",
          "rules_matched_count",
          "correlation_pending",
          "is_droppable"
        ],
        "properties": {
          "event_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "イベントのDidit識別子です。取得および削除の呼び出しで`{event_uuid}`として使用します。"
          },
          "event_id": {
            "type": "string",
            "maxLength": 128,
            "description": "お客様独自の識別子で、送信した冪等性キーです。"
          },
          "event_category": {
            "type": "string",
            "enum": [
              "auth",
              "session",
              "gameplay",
              "bonus",
              "affiliate",
              "payment",
              "dispute",
              "security",
              "responsible_gambling",
              "custom"
            ],
            "description": "イベントカテゴリー。"
          },
          "action_type": {
            "type": "string",
            "maxLength": 128,
            "description": "カテゴリ内で発生した内容。送信したとおりの値です。"
          },
          "occurred_at": {
            "type": "string",
            "format": "date-time",
            "description": "お客様側でイベントが発生した日時。"
          },
          "received_at": {
            "type": "string",
            "format": "date-time",
            "description": "Diditがイベントを受け付けた日時です。"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACCEPTED",
              "APPROVED",
              "IN_REVIEW",
              "DECLINED"
            ],
            "description": "`ACCEPTED`：保存済みで、一致したルールによって状態が変わらなかったことを示します（大半のイベントでの通常の結果であり、ルールが実行されないサンドボックスアプリケーションでは常にこの結果になります）。`APPROVED`：ルールが一致し、スコアがレビューのしきい値未満にとどまりました。`IN_REVIEW`：ルールによってスコアがレビューのしきい値を超えたか、ルールがステータスを設定しました。`DECLINED`：ルールによって却下されたか、スコアが却下のしきい値を超えました。"
          },
          "score": {
            "type": "integer",
            "description": "累積ルールスコア。0から始まり、ルールの`add_score`アクションによって変動します（負の差分も使用できます）。"
          },
          "subject_vendor_data": {
            "type": "string",
            "maxLength": 255,
            "description": "イベントの`subject.vendor_data`: ユーザーまたは企業を識別するお客様のIDです。"
          },
          "subject_entity_type": {
            "type": "string",
            "description": "`individual`または`company`: `subject_vendor_data`が指す対象の種類。",
            "example": "individual"
          },
          "subject_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "イベントの解決先となったユーザー(個人)または企業のUUID。該当するレコードが存在しなくなった場合はnullです。"
          },
          "counterparty_vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "P2Pイベントのもう一方のプレイヤー（`payload.counterparty_vendor_data`から昇格）。",
            "maxLength": 255
          },
          "session_id": {
            "type": "string",
            "nullable": true,
            "description": "イベントとともに送信される`session.session_id`です。",
            "maxLength": 255
          },
          "device_fingerprint": {
            "type": "string",
            "nullable": true,
            "description": "イベントとともに送信された`device_context.fingerprint`。",
            "maxLength": 255
          },
          "ip_address": {
            "type": "string",
            "nullable": true,
            "description": "イベントのIPアドレス。サーバーレーンでは送信した`device_context.network_context.ip_address`の値そのもので、デバイスレーンではリクエストのIPです。",
            "maxLength": 64
          },
          "ip_country": {
            "type": "string",
            "nullable": true,
            "description": "IPエンリッチメントで得た`ip_address`の国コード。アドレスがエンリッチされなかった場合(欠落、プライベート、またはアドレスがまだ把握されていない低価値テレメトリ)はnullです。",
            "example": "ES"
          },
          "amount": {
            "type": "string",
            "nullable": true,
            "description": "小数点以下18桁の10進数文字列で表した金額。`transaction_context.amount`、`payload.amount`、`payload.stake_amount`の順に取得されます。",
            "example": "250.000000000000000000"
          },
          "currency": {
            "type": "string",
            "nullable": true,
            "description": "`transaction_context.currency`または`payload.currency`から取得した通貨。",
            "maxLength": 10
          },
          "game_id": {
            "type": "string",
            "nullable": true,
            "description": "`payload.game_id`から昇格されたフィールドです。",
            "maxLength": 128
          },
          "round_id": {
            "type": "string",
            "nullable": true,
            "description": "`payload.round_id`から昇格した値です。",
            "maxLength": 128
          },
          "bonus_id": {
            "type": "string",
            "nullable": true,
            "description": "`payload.bonus_id`から昇格されたフィールドです。",
            "maxLength": 128
          },
          "affiliate_code": {
            "type": "string",
            "nullable": true,
            "description": "`payload.affiliate_code`から昇格されたフィールドです。",
            "maxLength": 128
          },
          "payment_reference_id": {
            "type": "string",
            "nullable": true,
            "description": "`transaction_context.payment_reference_id`または`payload.payment_reference_id`から取得した支払い参照番号。",
            "maxLength": 255
          },
          "retention_class": {
            "type": "string",
            "enum": [
              "low_value",
              "standard",
              "risk_relevant",
              "monetary_or_compliance"
            ],
            "description": "保持クラス。支払いおよび異議申し立てのイベントは`monetary_or_compliance`、セキュリティおよび責任あるギャンブルのイベントは`risk_relevant`、`session.page_view`、`session.sdk_heartbeat`、`session.sdk_loaded`、`session.device_seen`、`session.bot_signal_observed`、`bonus.promotion_viewed`、`affiliate.referral_clicked`は`low_value`、それ以外はすべて`standard`です。有効なルールに一致したイベントは`risk_relevant`に昇格されます（降格されることはありません）。"
          },
          "rules_matched_count": {
            "type": "integer",
            "minimum": 0,
            "description": "イベントに一致したルールの数です。`TEST`モードのルール（証跡を記録しますが、アクションは適用しません）も含みます。"
          },
          "correlation_pending": {
            "type": "boolean",
            "description": "このイベントについて非同期ルール（対象者をまたぐ相関、または24時間を超えるシーケンス）がまだ実行待ちの間は`true`です。数分以内に解決し、`status`、`score`、`rules_matched_count`がその場で更新されます。"
          },
          "is_droppable": {
            "type": "boolean",
            "description": "バックプレッシャー下のSDKがこの種類のイベントを破棄してよいかどうかです。すべての`security`、`payment`、`dispute`、`responsible_gambling`イベント、および`gameplay.bet_placed`、`gameplay.bet_settled`、`gameplay.p2p_settlement`では`false`です。"
          }
        }
      },
      "MonitoringEventDetail": {
        "description": "完全なエンベロープ、エンリッチメント、ルールの根拠を含むモニタリングイベント1件。`MonitoringEvent`のすべてのフィールドに加えて、以下のフィールドを含みます。",
        "allOf": [
          {
            "$ref": "#/components/schemas/MonitoringEvent"
          },
          {
            "type": "object",
            "required": [
              "payload",
              "custom_values",
              "device_context",
              "field_sources",
              "session_sequence",
              "table_id",
              "hand_id",
              "match_id",
              "market_id",
              "side",
              "role",
              "net_result_amount",
              "payment_fingerprint",
              "instrument_reference_hash",
              "withdrawal_address_hash",
              "dispute_id",
              "chargeback_id",
              "changed_field",
              "identity_match_ref",
              "schema_version",
              "expires_at",
              "rules_evaluated_count",
              "rule_runs",
              "ip_enrichment",
              "subject_profile",
              "tags"
            ],
            "properties": {
              "payload": {
                "type": "object",
                "additionalProperties": true,
                "description": "`payload`で送信したカテゴリのフィールド。"
              },
              "custom_values": {
                "type": "object",
                "additionalProperties": true,
                "description": "送信したスカラー値の`custom_values`です。IPエンリッチメントでIPアドレスにフラグが付き、かつこれらの値を設定していない場合、Diditは`vpn_or_proxy_detected: true`または`is_data_center: true`を追加します。"
              },
              "device_context": {
                "type": "object",
                "additionalProperties": true,
                "description": "保存されたデバイスコンテキストです。送信した`device_context`（送信した場合は`fingerprint`、`persistent_device_id`、`bot_score`を含む）に加え、空のままにしたキーについてはIPエンリッチメントで補完された`network_context`（`ip_country`、`ip_country_code`、`ip_city`、`asn_number`、`asn_organization`、`is_vpn_or_tor`、`is_data_center`、`proxy_type`、`connection_type`）が含まれます。"
              },
              "field_sources": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "enum": [
                    "customer",
                    "sdk",
                    "server"
                  ]
                },
                "description": "フィールドパスと提供元の対応:`customer`(バックエンドから送信)、`sdk`(デバイス経由で送信)、`server`(`received_at`やエンリッチされたネットワークフィールドなど、Diditが導出)。一致に基づいて対応する前に確認してください。"
              },
              "session_sequence": {
                "type": "integer",
                "format": "int64",
                "nullable": true,
                "description": "イベントとともに送信される`session.sequence`です。"
              },
              "table_id": {
                "type": "string",
                "nullable": true,
                "description": "`payload.table_id`から昇格した値です。",
                "maxLength": 128
              },
              "hand_id": {
                "type": "string",
                "nullable": true,
                "description": "`payload.hand_id`から昇格されたフィールドです。",
                "maxLength": 128
              },
              "match_id": {
                "type": "string",
                "nullable": true,
                "description": "`payload.match_id`から昇格した値です。",
                "maxLength": 128
              },
              "market_id": {
                "type": "string",
                "nullable": true,
                "description": "`payload.market_id`から昇格した値です。",
                "maxLength": 128
              },
              "side": {
                "type": "string",
                "nullable": true,
                "description": "`payload.side`から昇格した値です。",
                "maxLength": 64
              },
              "role": {
                "type": "string",
                "nullable": true,
                "description": "`payload.role`から昇格した値です。",
                "maxLength": 64
              },
              "net_result_amount": {
                "type": "string",
                "nullable": true,
                "description": "`payload.net_result_amount`から昇格した値で、小数点以下18桁の10進数文字列です。",
                "example": "-120.000000000000000000"
              },
              "payment_fingerprint": {
                "type": "string",
                "nullable": true,
                "description": "`payload.payment_fingerprint`から昇格した値です。",
                "maxLength": 255
              },
              "instrument_reference_hash": {
                "type": "string",
                "nullable": true,
                "description": "`payload.instrument_reference_hash`から昇格した値です。",
                "maxLength": 255
              },
              "withdrawal_address_hash": {
                "type": "string",
                "nullable": true,
                "description": "`payload.withdrawal_address_hash`(または`payload.destination_reference_hash`)から昇格した値です。",
                "maxLength": 255
              },
              "dispute_id": {
                "type": "string",
                "nullable": true,
                "description": "`payload.dispute_id`から昇格されたフィールドです。",
                "maxLength": 255
              },
              "chargeback_id": {
                "type": "string",
                "nullable": true,
                "description": "`payload.chargeback_id`から昇格されたフィールドです。",
                "maxLength": 255
              },
              "changed_field": {
                "type": "string",
                "nullable": true,
                "description": "`payload.changed_field`から昇格されたフィールドです（セキュリティ変更イベント）。",
                "maxLength": 128
              },
              "identity_match_ref": {
                "type": "string",
                "nullable": true,
                "description": "`payload.identity_match_ref`から昇格されたフィールドです（責任あるギャンブルのレジストリとの一致）。",
                "maxLength": 255
              },
              "schema_version": {
                "type": "integer",
                "description": "イベントエンベロープのスキーマのバージョン。現在は`1`です。",
                "example": 1
              },
              "expires_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "イベントが保持クラスに基づいて期限切れとなり、削除される日時で、`occurred_at`にクラスの期間（デフォルトで14日、30日、または90日。アプリケーションごとに調整可能）を加えた日時です。`monetary_or_compliance`イベントの場合はnullで、取引の保持期間に従います。"
              },
              "rules_evaluated_count": {
                "type": "integer",
                "minimum": 0,
                "description": "このイベントに対して評価されたイベントルールの数。"
              },
              "rule_runs": {
                "type": "array",
                "description": "イベントに一致したすべてのルールを新しい順に示します。",
                "items": {
                  "$ref": "#/components/schemas/MonitoringEventRuleRun"
                }
              },
              "ip_enrichment": {
                "type": "object",
                "nullable": true,
                "description": "イベントのIPアドレスの付加情報。アドレスに付加情報が追加されなかった場合はnullです。[IPエンリッチメント](https://docs.didit.me/ja/transaction-monitoring/ip-enrichment)を参照してください。",
                "properties": {
                  "ip_country_code": {
                    "type": "string",
                    "nullable": true,
                    "description": "住所の国コード。"
                  },
                  "ip_city": {
                    "type": "string",
                    "nullable": true,
                    "description": "住所の都市。"
                  },
                  "asn_number": {
                    "type": "integer",
                    "nullable": true,
                    "description": "自律システム番号。"
                  },
                  "asn_organization": {
                    "type": "string",
                    "nullable": true,
                    "description": "自律システムを運用する組織です。"
                  },
                  "is_vpn_or_tor": {
                    "type": "boolean",
                    "description": "そのアドレスが既知のVPNまたはTorの出口かどうか。"
                  },
                  "is_data_center": {
                    "type": "boolean",
                    "description": "そのアドレスがホスティングまたはデータセンターのネットワークに属しているかどうか。"
                  },
                  "proxy_type": {
                    "type": "string",
                    "nullable": true,
                    "description": "アドレスのプロキシ分類を表す不透明な文字列、またはnullです。"
                  },
                  "last_enriched_at": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true,
                    "description": "アドレスが最後にエンリッチメントされた日時。"
                  }
                },
                "required": [
                  "ip_country_code",
                  "ip_city",
                  "asn_number",
                  "asn_organization",
                  "is_vpn_or_tor",
                  "is_data_center",
                  "proxy_type",
                  "last_enriched_at"
                ]
              },
              "subject_profile": {
                "type": "object",
                "nullable": true,
                "description": "対象者についてキャッシュされたメールアドレスと電話番号のリスクシグナル。対象者のプロファイルが存在しない場合はnull。",
                "properties": {
                  "email_risk_score": {
                    "type": "integer",
                    "nullable": true,
                    "description": "メールアドレスのリスクスコア。"
                  },
                  "email_deliverability": {
                    "type": "string",
                    "nullable": true,
                    "description": "メールアドレスの到達性の判定。"
                  },
                  "email_is_disposable": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "メールアドレスが使い捨てかどうか。"
                  },
                  "email_is_breached": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "メールアドレスが既知のデータ漏えいに含まれているかどうか。"
                  },
                  "email_social_count": {
                    "type": "integer",
                    "nullable": true,
                    "description": "メールアドレスに紐づくオンラインアカウントの数。"
                  },
                  "email_social_providers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "メールアドレスに紐づくアカウントが見つかったオンラインサービスの名前。"
                  },
                  "phone_risk_score": {
                    "type": "integer",
                    "nullable": true,
                    "description": "電話番号のリスクスコア。"
                  },
                  "phone_line_type": {
                    "type": "string",
                    "nullable": true,
                    "description": "電話回線の種類。"
                  },
                  "phone_carrier": {
                    "type": "string",
                    "nullable": true,
                    "description": "電話キャリア名。"
                  },
                  "phone_social_count": {
                    "type": "integer",
                    "nullable": true,
                    "description": "電話番号に紐づくオンラインアカウントの数。"
                  },
                  "phone_social_providers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "電話番号に紐づくアカウントが見つかったオンラインサービスの名前。"
                  },
                  "source_provider": {
                    "type": "string",
                    "nullable": true,
                    "description": "プロファイルの取得元を示す不透明な識別子です。"
                  },
                  "last_enriched_at": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true,
                    "description": "プロファイルが最後に更新された日時。"
                  }
                },
                "required": [
                  "email_risk_score",
                  "email_deliverability",
                  "email_is_disposable",
                  "email_is_breached",
                  "email_social_count",
                  "email_social_providers",
                  "phone_risk_score",
                  "phone_line_type",
                  "phone_carrier",
                  "phone_social_count",
                  "phone_social_providers",
                  "source_provider",
                  "last_enriched_at"
                ]
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "イベントに付与されたタグの名前（ルールの`add_tags`アクション）。"
              }
            }
          }
        ]
      },
      "MonitoringEventRuleRun": {
        "type": "object",
        "properties": {
          "rule_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "トランザクションモニタリングルールのUUID。"
          },
          "rule_title": {
            "type": "string",
            "description": "ルールのタイトル。"
          },
          "library_key": {
            "type": "string",
            "nullable": true,
            "description": "ルールがルールライブラリからインストールされた場合はライブラリキー、それ以外の場合はnull。"
          },
          "matched": {
            "type": "boolean",
            "description": "常に`true`です。一致した実行のみが記録されます。"
          },
          "mode": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "TEST"
            ],
            "description": "ルール実行時のモード。`TEST`の実行では証拠が記録されますが、アクションは適用されていません。"
          },
          "is_async": {
            "type": "boolean",
            "description": "実行が取り込みリクエストではなく非同期の相関処理によるものである場合は`true`です。"
          },
          "severity": {
            "type": "string",
            "nullable": true,
            "enum": [
              "UNKNOWN",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL",
              null
            ],
            "description": "ルールの重大度。`TEST`の実行時、および重大度のないルールではnullです。"
          },
          "score_delta": {
            "type": "integer",
            "description": "この実行によってイベントのスコアが変化した量（`TEST`実行では0）。"
          },
          "action_summary": {
            "type": "string",
            "nullable": true,
            "description": "適用されたアクションの短い要約（例：`score +40; add_tag:VPN_LOGIN`）。何も適用されなかった場合はnull。"
          },
          "matched_payload": {
            "type": "array",
            "description": "一致した条件と集計。条件のエントリには`field`、`operator`、`expected_value`、`current_value`、`matched`、`group_index`、`group_logic`、`field_source`(`server`、`sdk`または`customer`)が含まれます。集計のエントリには`metric`、`field`、`operator`、`expected_value`、`computed_value`、`window`、`filters`、`matched`、`sample_references`が含まれます。",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "ルールの実行が記録された日時。"
          }
        },
        "required": [
          "rule_uuid",
          "rule_title",
          "library_key",
          "matched",
          "mode",
          "is_async",
          "severity",
          "score_delta",
          "action_summary",
          "matched_payload",
          "created_at"
        ]
      },
      "MonitoringEventPage": {
        "type": "object",
        "description": "モニタリングイベントの1ページ分です。`occurred_at`が新しい順に並びます。",
        "required": [
          "count",
          "next",
          "previous",
          "results"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "description": "一致するイベントの数。100までは正確な値で、100を超える場合は100が上限となります。この値からページ数を計算せず、nullになるまで`next`をたどってください。"
          },
          "next": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "次のページのURL。最後のページではnullです。"
          },
          "previous": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "前のページのURL。最初のページではnullです。"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringEvent"
            }
          }
        }
      },
      "MonitoringEventCreateRequest": {
        "type": "object",
        "description": "イベントエンベロープで、すべてのカテゴリで共通です。camelCaseのエイリアスも使用できます: `eventId`、`eventCategory`（または`category`）、`actionType`、`occurredAt`、`timeZone`（または`zoneId`）、`deviceContext`（または`device`）、`transactionContext`、`customValues`（または`props`）。`subject`内では`vendorData`、`entityType`、`fullName`、`session`内では`sessionId`、`pageUrl`、`transaction_context`内では`paymentReferenceId`です。",
        "required": [
          "event_id",
          "event_category",
          "action_type",
          "occurred_at",
          "subject"
        ],
        "properties": {
          "event_id": {
            "type": "string",
            "maxLength": 128,
            "description": "イベントに対するお客様の識別子で、アプリケーションごとに一意です。これが冪等性キーです。同じ識別子で同じ`event_category`、`action_type`、`occurred_at`、`subject.vendor_data`、`payload`を再送するとリプレイとなり、いずれかが異なると競合となります。",
            "example": "login-2026-10-17-000001"
          },
          "event_category": {
            "type": "string",
            "enum": [
              "auth",
              "session",
              "gameplay",
              "bonus",
              "affiliate",
              "payment",
              "dispute",
              "security",
              "responsible_gambling",
              "custom"
            ],
            "description": "イベントカテゴリー。",
            "example": "auth"
          },
          "action_type": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "カテゴリ内で発生した内容。自由な語彙で指定できます。[イベントの取り込み](https://docs.didit.me/ja/transaction-monitoring/events)に記載されている管理対象のアクション（例: `login`、`deposit_completed`、`chargeback_opened`）を使うと、型付きの検証と管理対象のルールフィールドが利用可能になります。先頭と末尾の空白は削除されます。",
            "example": "login"
          },
          "occurred_at": {
            "type": "string",
            "format": "date-time",
            "description": "お客様側でイベントが発生した日時（ISO 8601。オフセットのない値はUTCとして扱われます）。過去7日以内かつ未来5分以内である必要があります。",
            "example": "2026-10-17T09:15:02.481Z"
          },
          "time_zone": {
            "type": "string",
            "nullable": true,
            "maxLength": 64,
            "description": "お客様側での発生時のタイムゾーン(例:`Europe/Madrid`)。イベントとともに保存されますが、読み取り系のエンドポイントでは返されません。"
          },
          "subject": {
            "type": "object",
            "description": "イベントが属するユーザーまたは企業。アプリケーション内でこの`vendor_data`を持つユーザー（または企業）に紐付けられ、存在しない場合は新規作成されます。",
            "required": [
              "vendor_data"
            ],
            "properties": {
              "vendor_data": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "サブジェクトに対するお客様のIDです。",
                "example": "user-42"
              },
              "entity_type": {
                "type": "string",
                "maxLength": 32,
                "default": "individual",
                "description": "`company`はサブジェクトを企業として解決し、それ以外の値（デフォルトは`individual`）は個人として解決します。同じ`vendor_data`が企業と個人をそれぞれ1つずつ指すことができます。",
                "example": "individual"
              },
              "full_name": {
                "type": "string",
                "nullable": true,
                "maxLength": 512,
                "description": "表示名。このイベントによってユーザーまたは企業が作成される場合にのみ使用されます。"
              },
              "email": {
                "type": "string",
                "format": "email",
                "nullable": true,
                "description": "メールアドレスとして検証されます。イベントには保存されません。"
              },
              "phone": {
                "type": "string",
                "nullable": true,
                "maxLength": 32,
                "description": "検証されます。イベントには保存されません。"
              },
              "country": {
                "type": "string",
                "nullable": true,
                "maxLength": 3,
                "description": "検証されます。イベントには保存されません。"
              }
            }
          },
          "business": {
            "type": "object",
            "description": "イベントが属する企業（対象と異なる場合）。`vendor_data`のみが読み取られます。",
            "additionalProperties": true,
            "properties": {
              "vendor_data": {
                "type": "string",
                "maxLength": 255,
                "description": "企業に対するお客様のIDです。`business_vendor_data`としてフィルターできます。",
                "example": "merchant-7"
              }
            }
          },
          "session": {
            "type": "object",
            "description": "イベントのセッションコンテキストです。",
            "properties": {
              "session_id": {
                "type": "string",
                "nullable": true,
                "maxLength": 255,
                "description": "セッション識別子です。`session_id`としてフィルター可能で、この名前で返されます。"
              },
              "sequence": {
                "type": "integer",
                "nullable": true,
                "description": "セッション内でのイベントの位置。`session_sequence`として返されます。"
              },
              "page_url": {
                "type": "string",
                "nullable": true,
                "maxLength": 2048,
                "description": "検証されます。イベントには保存されません。"
              },
              "referrer": {
                "type": "string",
                "nullable": true,
                "maxLength": 2048,
                "description": "検証されます。イベントには保存されません。"
              }
            }
          },
          "device_context": {
            "type": "object",
            "additionalProperties": true,
            "description": "デバイスとネットワークのコンテキスト。送信されたとおりに保存され、`GET /v3/events/{event_uuid}/`で返されます。このサーバー経路ではDiditはエンドユーザーの接続を把握できないため、エンリッチされてルールで使用されるIPは、送信された`network_context.ip_address`そのものです。",
            "properties": {
              "fingerprint": {
                "type": "string",
                "maxLength": 255,
                "description": "デバイスフィンガープリントです。`device_fingerprint`でフィルターできます。"
              },
              "persistent_device_id": {
                "type": "string",
                "maxLength": 255,
                "description": "お客様の永続的なデバイス識別子です。"
              },
              "bot_score": {
                "type": "integer",
                "description": "独自の検出によるボットスコア（整数）。"
              },
              "network_context": {
                "type": "object",
                "additionalProperties": true,
                "properties": {
                  "ip_address": {
                    "type": "string",
                    "maxLength": 64,
                    "description": "エンドユーザーのIPアドレス。パブリックアドレスには、一意のアドレスごとに1回だけ付加情報が追加されます。",
                    "example": "203.0.113.42"
                  }
                }
              }
            }
          },
          "transaction_context": {
            "type": "object",
            "description": "金額に関するコンテキスト。ここに空でない値を指定すると、アクションの必須ペイロードキーも満たされます。",
            "properties": {
              "amount": {
                "type": "string",
                "nullable": true,
                "description": "10進数の文字列で表した金額（数値も受け付けます）。",
                "example": "1000.00"
              },
              "currency": {
                "type": "string",
                "nullable": true,
                "maxLength": 10,
                "description": "通貨コード。"
              },
              "direction": {
                "type": "string",
                "nullable": true,
                "maxLength": 16,
                "description": "資金移動の方向です。例：`inbound`、`outbound`。"
              },
              "payment_reference_id": {
                "type": "string",
                "nullable": true,
                "maxLength": 255,
                "description": "お客様の支払い参照値です。`payment_reference_id`でフィルター可能です。"
              }
            }
          },
          "payload": {
            "type": "object",
            "additionalProperties": true,
            "description": "カテゴリのドメインフィールド。JSONエンコード後で最大16384バイトです。一部のアクションには必須のキーがあります（`payload`または`transaction_context`内）。`gameplay.p2p_settlement`には`game_id`、`counterparty_vendor_data`、`stake_amount`、`net_result_amount`、`role`と、`hand_id`、`round_id`、`match_id`のいずれか1つが必要です。`gameplay.bet_placed`と`gameplay.bet_settled`には`game_id`が必要です。`payment.deposit_initiated`、`payment.deposit_completed`、`payment.withdrawal_requested`、`payment.withdrawal_completed`には`payment_reference_id`、`amount`、`currency`、`payment_method`、`status`が必要です。`payment.withdrawal_address_changed`には`withdrawal_address_hash`が必要です。`dispute.chargeback_opened`、`dispute.chargeback_won`、`dispute.chargeback_lost`には`payment_reference_id`と、`dispute_id`、`chargeback_id`のいずれか1つが必要です。`session.bot_signal_observed`には`telemetry_schema_version`と、`bot_score`、`actions_per_minute`、`timing_variance_ms`、`pointer_entropy`、`keystroke_entropy`、`reaction_time_ms_p50`のいずれか1つが必要です。`responsible_gambling.self_exclusion_match`には`registry_source`、`exclusion_status`、`identity_match_ref`が必要です。`_changed`で終わるすべての`security`アクションには`changed_field`が必要で、フィールドが`password`、`mfa_method`、`mfa`、`email`、`phone`、`withdrawal_address`、`payout_method`、`api_key`のいずれかの場合は、さらに`previous_reference_hash`または`new_reference_hash`が必要です。送信するのはハッシュと参照のみとし、カード番号、完全な出金先アドレス、パスワードハッシュ、MFAシークレットは決して送信しないでください。"
          },
          "custom_values": {
            "type": "object",
            "description": "独自のキーを最大100個まで設定でき、ルールから`custom_values.<key>`として参照できます。値はスカラー（文字列、数値、ブール値またはnull）である必要があり、ネストしたオブジェクトや配列は拒否されます。",
            "additionalProperties": {
              "nullable": true,
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                }
              ]
            }
          }
        },
        "example": {
          "event_id": "login-2026-10-17-000001",
          "event_category": "auth",
          "action_type": "login",
          "occurred_at": "2026-10-17T09:15:02.481Z",
          "time_zone": "Europe/Madrid",
          "subject": {
            "vendor_data": "user-42",
            "entity_type": "individual"
          },
          "session": {
            "session_id": "web-session-abc",
            "sequence": 142
          },
          "device_context": {
            "fingerprint": "fp-a8c1",
            "network_context": {
              "ip_address": "203.0.113.42"
            }
          },
          "payload": {
            "method": "password"
          },
          "custom_values": {
            "vip_tier": "gold"
          }
        }
      },
      "MonitoringEventIngestResult": {
        "type": "object",
        "description": "1件のイベントを取り込んだ結果。新規イベントと冪等なリプレイのどちらでも同じ形式が返されます。",
        "required": [
          "event_uuid",
          "event_id",
          "status",
          "score",
          "rules_evaluated_count",
          "rules_matched_count",
          "correlation_pending",
          "retention_class",
          "expires_at",
          "idempotent_replay",
          "rule_matches"
        ],
        "properties": {
          "event_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "保存されたイベントのDidit識別子です。"
          },
          "event_id": {
            "type": "string",
            "description": "お客様の`event_id`です。"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACCEPTED",
              "APPROVED",
              "IN_REVIEW",
              "DECLINED"
            ],
            "description": "リアルタイムルールの実行後のステータス。`MonitoringEvent.status`を参照してください。"
          },
          "score": {
            "type": "integer",
            "description": "リアルタイムルール実行後のスコア。"
          },
          "rules_evaluated_count": {
            "type": "integer",
            "minimum": 0,
            "description": "リクエストで評価されたイベントルールの数。ルールが実行されないサンドボックスのアプリケーションでは0です。"
          },
          "rules_matched_count": {
            "type": "integer",
            "minimum": 0,
            "description": "一致したルールの数です。`TEST`モードのルールも含みます。"
          },
          "correlation_pending": {
            "type": "boolean",
            "description": "非同期ルールの実行がまだ残っている場合は`true`です。数分後に`GET /v3/events/{event_uuid}/`を参照し、最終的な`status`と`score`を確認してください。"
          },
          "retention_class": {
            "type": "string",
            "enum": [
              "low_value",
              "standard",
              "risk_relevant",
              "monetary_or_compliance"
            ],
            "description": "保持クラス（一致したルールによって昇格された場合は昇格後の値）。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "イベントが保持クラスに基づいて期限切れとなり、削除される日時。`monetary_or_compliance`（支払いおよび異議申し立て）イベントの場合はnull。"
          },
          "idempotent_replay": {
            "type": "boolean",
            "description": "この`event_id`で同じ内容のイベントがすでに保存されていた場合は`true`です。値は保存済みイベントのものであり、ルールは再実行されていません。"
          },
          "rule_matches": {
            "type": "array",
            "description": "イベントに一致したルール。",
            "items": {
              "type": "object",
              "required": [
                "rule_id",
                "library_key",
                "mode",
                "is_async"
              ],
              "properties": {
                "rule_id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "ルールのUUID。"
                },
                "library_key": {
                  "type": "string",
                  "nullable": true,
                  "description": "ルールがルールライブラリからインストールされた場合はライブラリキー、それ以外の場合はnull。"
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "ACTIVE",
                    "TEST"
                  ],
                  "description": "`TEST`ルールは一致を記録しますが、アクションは適用しません。"
                },
                "is_async": {
                  "type": "boolean",
                  "description": "一致が非同期処理で検出された場合は`true`です。"
                }
              }
            }
          }
        }
      },
      "ComplianceList": {
        "type": "object",
        "description": "1つのアプリケーションのブロックリスト、許可リスト、またはカスタムリスト。",
        "required": [
          "uuid",
          "name",
          "description",
          "list_type",
          "entry_type",
          "is_system",
          "entry_count",
          "last_entry_added_at",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "リストの識別子です。リストおよびエントリのエンドポイントでは`list_uuid`として使用し、`value_type: \"list\"`のワークフローまたは取引ルールの条件では値として使用します。"
          },
          "name": {
            "type": "string",
            "maxLength": 255,
            "description": "リスト名です。アプリケーションのリスト内で一意です。"
          },
          "description": {
            "type": "string",
            "description": "自由記述の説明。未設定の場合は空文字列です。"
          },
          "list_type": {
            "type": "string",
            "enum": [
              "blocklist",
              "allowlist",
              "custom"
            ],
            "description": "`blocklist`：一致するとセッションまたは取引が却下されます（システムリストのみ、エントリタイプごとに1つ）。`allowlist`：一致した項目は信頼されます。たとえば顔の許可リストでは重複顔のアクションがスキップされます。ブロックリストの一致を上書きすることはありません。`custom`：ワークフローおよび取引ルールの条件で使用されます（`value_type: \"list\"`）。"
          },
          "entry_type": {
            "type": "string",
            "enum": [
              "face",
              "document",
              "phone",
              "email",
              "ip_address",
              "device_fingerprint",
              "wallet_address",
              "bank_account",
              "country",
              "user",
              "business",
              "key"
            ],
            "description": "リストが保持する内容です。`face`、`document`（書類番号）、`phone`、`email`、`ip_address`（IPアドレスまたはCIDR範囲）、`device_fingerprint`、`wallet_address`、`bank_account`、`country`（ISO 3166-1 alpha-3）、`user`または`business`（お客様の`vendor_data`）、`key`（任意の文字列）のいずれかです。エントリの値の検証方法と照合方法はこれによって決まります。"
          },
          "is_system": {
            "type": "boolean",
            "description": "Diditが用意するリストでは`true`です。対象は、エントリタイプごとに1つずつ用意されるブロックリスト（`face`、`document`、`phone`、`email`、`ip_address`、`device_fingerprint`、`wallet_address`、`bank_account`、`user`、`business`）、**High Risk Countries**カスタムリスト、およびシステム許可リストです。システムリストは名前の変更、編集、削除ができません。エントリの追加と削除は可能です。"
          },
          "entry_count": {
            "type": "integer",
            "minimum": 0,
            "description": "現在リストに含まれるエントリー数。"
          },
          "last_entry_added_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "最新の現行エントリが追加された日時。空のリストでは`null`です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "リストが作成された日時。"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "リストが最後に更新された日時。"
          }
        }
      },
      "ComplianceListEntry": {
        "type": "object",
        "description": "リスト内の1つの値です。",
        "required": [
          "uuid",
          "value",
          "display_label",
          "comment",
          "added_by",
          "reference_session_id",
          "reference_session_number",
          "reference_session_type",
          "reference_object_uuid",
          "metadata",
          "created_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "エントリの識別子。「リストエントリの削除」で`entry_uuid`として使用します。"
          },
          "value": {
            "type": "string",
            "description": "登録された値です。E.164形式の電話番号、メールアドレス、書類番号、IPアドレスまたはCIDR範囲、デバイスフィンガープリント、ウォレットアドレス、銀行口座、ISO 3166-1 alpha-3の国コード、`vendor_data`、`key`リスト上の任意の文字列、または顔リスト上の保存された顔のUUIDのいずれかです。送信した値は、電話番号と国コードを除き小文字で保存されます。照合では大文字と小文字は区別されません。"
          },
          "display_label": {
            "type": "string",
            "nullable": true,
            "maxLength": 512,
            "description": "人が読めるラベル。送信しない場合、セッションから取得したエントリについてはDiditが自動で設定します（例：保有者の氏名と書類番号）。"
          },
          "comment": {
            "type": "string",
            "description": "自由記述のメモ。未設定の場合は空文字列です。"
          },
          "added_by": {
            "type": "string",
            "nullable": true,
            "description": "エントリを追加した主体：`api`（APIキー）、コンソールユーザーのメールアドレスまたは`console`、`system`または`migration`（Diditが作成したエントリ）、あるいは`rule`（取引ルールまたはモニタリングルールのアクション）。"
          },
          "reference_session_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "エントリーの取得元となった認証セッション。エントリーが値で追加された場合は`null`です。"
          },
          "reference_session_number": {
            "type": "integer",
            "nullable": true,
            "description": "そのセッションのアプリケーション単位の番号。コンソールに表示される番号と同じです。"
          },
          "reference_session_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "kyc",
              "kyb",
              null
            ],
            "description": "個人の認証セッションの場合は`kyc`、企業の認証セッションの場合は`kyb`、セッションがない場合は`null`。"
          },
          "reference_object_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "エントリが表すレコード: セッションから読み取った顔、書類、電話番号またはメールアドレスのレコード、Upload a face to a listで作成された顔、または送信したUUID（例: 取引のUUIDやユーザーの`didit_internal_id`）。"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "追加コンテキストです。Diditが設定するキー(ここに記載)と、エントリー作成時に送信した`metadata`をマージし、保存されたとおりに返します。ない場合は`null`です。",
            "properties": {
              "reference_image_url": {
                "type": "string",
                "description": "顔エントリー：有効期間の短い署名付きURLで、呼び出しのたびに再発行されます。`media: read`を持たないスコープ付きAPIキーの場合は`null`です。エントリーに画像が紐づいていない場合は含まれません。"
              },
              "front_image_url": {
                "type": "string",
                "description": "書類の表面画像を持つ書類エントリ: 有効期間の短い署名付きURLで、呼び出しのたびに再発行されます。`media: read`を持たないスコープ付きAPIキーの場合は`null`。"
              },
              "full_name": {
                "type": "string",
                "description": "セッションから取得した書類エントリ: 所持者の氏名。"
              },
              "issuing_state": {
                "type": "string",
                "description": "セッションから取得した書類エントリ: ISO 3166-1 alpha-3形式の発行国。"
              },
              "document_type": {
                "type": "string",
                "description": "セッションから取得した書類エントリ: 書類種別コード。例: `P`、`ID`、`DL`。"
              },
              "region": {
                "type": "string",
                "description": "セッションから取得した書類エントリ: 地域単位で発行された書類の発行州または県。該当しない場合は空。Add session items to the blocklistでは設定されません。"
              },
              "document_number": {
                "type": "string",
                "description": "セッションから取得した書類エントリ: 書類番号。"
              },
              "face_image_source": {
                "type": "string",
                "enum": [
                  "front_image_camera_front",
                  "back_image_camera_front"
                ],
                "description": "書類撮影時のセルフィーから取得された顔エントリー：どのセルフィーか。ライブネスの顔の場合は含まれません。"
              },
              "reference_node_id": {
                "type": "string",
                "nullable": true,
                "description": "書類撮影時のセルフィーから取得された顔エントリー：そのセルフィーの取得元である本人確認ノード。"
              },
              "fingerprint_tier": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "persistent_id",
                  "composite_hash",
                  "legacy_fp",
                  "unknown",
                  null
                ],
                "description": "セッションから取得したデバイスフィンガープリントのエントリで、フィンガープリントがどのように導出されたかを示します。`persistent_id`は1台のデバイスを識別します。`composite_hash`と`legacy_fp`は同じモデルのデバイス間で共有される場合があります。"
              },
              "sandbox": {
                "type": "boolean",
                "description": "サンドボックスアプリケーションでアップロードされた顔エントリでは`true`です。このようなエントリは何にも一致しません。"
              },
              "reference_type": {
                "type": "string",
                "enum": [
                  "transaction",
                  "vendor_user",
                  "vendor_business"
                ],
                "description": "お客様が設定: `reference_object_uuid`が指す対象。コンソールからそのレコードへリンクするために使われます。"
              },
              "reference_id": {
                "type": "string",
                "description": "お客様が設定: ソースレコードの識別子。"
              }
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "エントリーが追加された日時。"
          }
        }
      },
      "BlocklistedItem": {
        "type": "object",
        "description": "検証セッションでブロックリストに登録された顔、身分証明書類、電話番号、またはメールアドレス1件。項目の`type`に該当しないフィールドは`null`です。",
        "required": [
          "type",
          "session_id",
          "session_number",
          "blocklisted_at",
          "face_image",
          "document_type",
          "document_number",
          "front_image",
          "phone_number",
          "country_code",
          "email"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "face",
              "document",
              "phone",
              "email"
            ],
            "description": "ブロックリストに登録された対象です。"
          },
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "項目が属する認証セッション。"
          },
          "session_number": {
            "type": "integer",
            "nullable": true,
            "description": "そのセッションのアプリケーション単位の番号。コンソールに表示される番号と同じです。"
          },
          "blocklisted_at": {
            "type": "string",
            "format": "date-time",
            "description": "アイテムが最後にブロックリストに登録された日時。"
          },
          "face_image": {
            "type": "string",
            "nullable": true,
            "description": "顔項目：有効期間の短い署名付きURLで、呼び出しのたびに再発行されます。`media: read`を持たないスコープ付きAPIキーの場合は`null`です。参照画像が保存されていない場合も`null`になります。"
          },
          "document_type": {
            "type": "string",
            "nullable": true,
            "description": "書類項目: 書類種別コード。例: `P`(パスポート)、`ID`(国民IDカード)、`DL`(運転免許証)、`RP`(在留許可証)。"
          },
          "document_number": {
            "type": "string",
            "nullable": true,
            "description": "書類項目: 書類番号。書類番号がない場合は個人番号。"
          },
          "front_image": {
            "type": "string",
            "nullable": true,
            "description": "書類項目: 書類の表面画像。有効期間の短い署名付きURLで、呼び出しのたびに再発行されます。`media: read`を持たないスコープ付きAPIキーの場合は`null`。"
          },
          "phone_number": {
            "type": "string",
            "nullable": true,
            "description": "電話番号の項目: E.164形式の電話番号。"
          },
          "country_code": {
            "type": "string",
            "nullable": true,
            "description": "電話番号の項目: 番号のISO 3166-1 alpha-2の国コード。"
          },
          "email": {
            "type": "string",
            "nullable": true,
            "description": "メールアドレス項目：メールアドレス。"
          }
        }
      },
      "TransactionNote": {
        "type": "object",
        "description": "モニタリング対象取引のレビュータイムライン上のメモ1件。",
        "required": [
          "uuid",
          "note",
          "actor_email",
          "actor_name",
          "metadata",
          "created_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "メモの識別子。"
          },
          "note": {
            "type": "string",
            "description": "プレーンテキストのメモ本文。"
          },
          "actor_email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "description": "メモを書いた、またはステータスを変更したConsoleユーザーのメールアドレス。APIキーで作成されたメモおよびDiditが自動的に追加したメモの場合は`null`。"
          },
          "actor_name": {
            "type": "string",
            "nullable": true,
            "description": "Consoleユーザーの表示名です（名前がない場合はメールアドレス）。Diditが自動的に追加するメモでは`Rule Engine`となります。APIキーで作成されたメモでは`null`です。"
          },
          "metadata": {
            "type": "object",
            "description": "ノートの種類を区別します。APIまたはConsoleで作成されたノートには`mentioned_emails`が含まれます。Consoleで行われたステータス変更には、`type: status_change`と`previous_status`、`new_status`、`reason_code`、`reason_label`が含まれます。Diditが追加するノートには`source`が含まれ、ルールの`add_note`アクションによるものは`rule_action`(`rule_uuid`付き)、ユーザーアクション用の認証セッションの作成で問題が発生した場合は`remediation_session`となります。",
            "properties": {
              "mentioned_emails": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "email"
                },
                "description": "メンションされた組織メンバー（小文字化・重複排除済み）です。誰もメンションされていない場合は空です。"
              },
              "type": {
                "type": "string",
                "enum": [
                  "status_change"
                ],
                "description": "Consoleで行われたステータス変更を記録するメモに含まれます。"
              },
              "previous_status": {
                "type": "string",
                "enum": [
                  "APPROVED",
                  "IN_REVIEW",
                  "DECLINED",
                  "AWAITING_USER"
                ],
                "description": "変更前のステータス。"
              },
              "new_status": {
                "type": "string",
                "enum": [
                  "APPROVED",
                  "IN_REVIEW",
                  "DECLINED",
                  "AWAITING_USER"
                ],
                "description": "変更後のステータス。"
              },
              "reason_code": {
                "type": "string",
                "nullable": true,
                "description": "変更時に指定された理由コード。"
              },
              "reason_label": {
                "type": "string",
                "nullable": true,
                "description": "変更時に指定された理由ラベル。"
              },
              "source": {
                "type": "string",
                "enum": [
                  "rule_action",
                  "remediation_session"
                ],
                "description": "Diditが自動的に追加するメモに含まれます。"
              },
              "rule_uuid": {
                "type": "string",
                "format": "uuid",
                "description": "`add_note`アクションでメモを書き込んだルール（`source: rule_action`付き）。"
              }
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "メモが保存された日時。"
          }
        }
      },
      "TransactionSummary": {
        "type": "object",
        "description": "モニタリング対象の取引の概要で、`GET /v3/transactions/`が一覧で返す形式です。関係者、アラート、ルール実行結果を取得するには、`uuid`を指定して`GET /v3/transactions/{transaction_id}/`を呼び出します。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "Diditの取引UUIDです。取引エンドポイントで`{transaction_id}`として使用します。"
          },
          "transaction_number": {
            "type": "integer",
            "nullable": true,
            "description": "Consoleに表示される、アプリケーション単位の連番。"
          },
          "txn_id": {
            "type": "string",
            "nullable": true,
            "description": "作成呼び出しで指定したお客様独自の識別子です。アプリケーションごとに一意です。"
          },
          "transaction_type": {
            "type": "string",
            "description": "保存されている形式のカテゴリ: `finance`、`kyc`、`travelRule`、`userPlatformEvent`、`gamblingBet`、`gamblingLimitChange`、`gamblingBonusChange`、または`auditTrailEvent`。"
          },
          "action_type": {
            "type": "string",
            "description": "カテゴリ内のサブタイプ。例: `withdrawal`。"
          },
          "status": {
            "type": "string",
            "enum": [
              "APPROVED",
              "IN_REVIEW",
              "DECLINED",
              "AWAITING_USER"
            ],
            "description": "現在のモニタリング判定。"
          },
          "source": {
            "type": "string",
            "enum": [
              "LIVE",
              "IMPORTED"
            ],
            "description": "モニタリングのために送信された取引は`LIVE`、過去データのインポートは`IMPORTED`です。"
          },
          "direction": {
            "type": "string",
            "enum": [
              "INBOUND",
              "OUTBOUND"
            ],
            "description": "対象者から見た方向です。"
          },
          "amount": {
            "type": "string",
            "description": "末尾のゼロを除いた10進数文字列で表した金額（小数点以下最大18桁）。"
          },
          "currency": {
            "type": "string",
            "description": "`amount`の通貨コードまたは暗号資産シンボル。"
          },
          "currency_type": {
            "type": "string",
            "nullable": true,
            "description": "判明している場合は`fiat`または`crypto`。"
          },
          "preferred_currency_amount": {
            "type": "string",
            "nullable": true,
            "description": "レートが利用可能な場合に、アプリケーションの優先通貨に換算した`amount`です。"
          },
          "preferred_currency_code": {
            "type": "string",
            "nullable": true,
            "description": "`preferred_currency_amount`の通貨。"
          },
          "payment_details": {
            "type": "string",
            "nullable": true,
            "description": "自由記述の支払い参照情報。"
          },
          "txn_date": {
            "type": "string",
            "format": "date-time",
            "description": "取引が発生した日時。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Diditが記録した日時です。"
          },
          "score": {
            "type": "integer",
            "description": "リスクスコア。値が高いほどリスクが高くなります。"
          },
          "severity": {
            "type": "string",
            "nullable": true,
            "enum": [
              "UNKNOWN",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL",
              null
            ],
            "description": "リスクの重大度。何かによって設定されるまでは`null`です。"
          },
          "decision_reason_code": {
            "type": "string",
            "nullable": true,
            "description": "現在の`status`の機械可読な理由。"
          },
          "decision_reason_label": {
            "type": "string",
            "nullable": true,
            "description": "`decision_reason_code`の人が読めるラベル。"
          },
          "tags": {
            "type": "array",
            "description": "取引のタグ。",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string",
                  "description": "16進カラーコードです。例: `#F59E0B`。"
                },
                "description": {
                  "type": "string",
                  "nullable": true
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "didit",
                    "custom"
                  ],
                  "description": "Diditのプリセットタグまたはカスタムタグです。"
                }
              }
            }
          },
          "subject_name": {
            "type": "string",
            "nullable": true,
            "description": "`APPLICANT`当事者の氏名。"
          },
          "subject_vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "申請者に対するお客様の`vendor_data`です。"
          },
          "subject_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "user",
              "business",
              null
            ],
            "description": "申請者がDiditのユーザーまたは企業に紐付いているかどうか。どちらにも紐付いていない場合は`null`です。"
          },
          "subject_uuid": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "申請者が紐付けられているDiditのユーザーまたは企業のUUIDです。"
          },
          "subject_country": {
            "type": "string",
            "nullable": true,
            "description": "申請者の国コード。"
          },
          "counterparty_name": {
            "type": "string",
            "nullable": true,
            "description": "`COUNTERPARTY`当事者の氏名（存在する場合）。"
          },
          "counterparty_vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "取引相手に対するお客様の`vendor_data`です。"
          },
          "counterparty_country": {
            "type": "string",
            "nullable": true,
            "description": "取引相手の国コード。"
          },
          "assigned_to_name": {
            "type": "string",
            "nullable": true,
            "description": "取引に割り当てられたConsoleレビュアーの名前。"
          },
          "travel_rule_status": {
            "type": "string",
            "nullable": true,
            "description": "取引のトラベルルール送金のステータスです。送金がない場合は`null`です。"
          },
          "application_id": {
            "type": "string",
            "format": "uuid",
            "description": "取引を所有するアプリケーション。"
          },
          "application_name": {
            "type": "string",
            "nullable": true,
            "description": "そのアプリケーションの名前。"
          },
          "organization_id": {
            "type": "string",
            "format": "uuid",
            "description": "アプリケーションを所有する組織です。"
          },
          "organization_name": {
            "type": "string",
            "nullable": true,
            "description": "その組織の名前。"
          }
        }
      },
      "ApplicationAnalyticsDataPoint": {
        "type": "object",
        "description": "1日あたりのセッション数（作成日、UTC基準）。各件数はセッションの現在のステータスを反映します。前の期間のポイントには、少なくとも必須フィールドが含まれます。",
        "required": [
          "rounded_date",
          "total",
          "approved",
          "declined",
          "canceled",
          "pending"
        ],
        "properties": {
          "rounded_date": {
            "type": "string",
            "format": "date",
            "description": "日付です。形式は`YYYY-MM-DD`です。"
          },
          "total": {
            "type": "integer",
            "description": "その日に作成されたセッション。"
          },
          "approved": {
            "type": "integer",
            "description": "そのうち、`Approved`または`Kyc Expired`のセッション。"
          },
          "declined": {
            "type": "integer",
            "description": "`Declined`のセッション。"
          },
          "canceled": {
            "type": "integer",
            "description": "`Expired`または`Abandoned`のセッション。"
          },
          "pending": {
            "type": "integer",
            "description": "`Not Started`、`In Progress`または`In Review`のセッション。"
          },
          "in_review": {
            "type": "integer",
            "description": "`In Review`のセッション。"
          },
          "expired": {
            "type": "integer",
            "description": "`Expired`のセッション。"
          },
          "abandoned": {
            "type": "integer",
            "description": "`Abandoned`のセッション。"
          },
          "in_progress": {
            "type": "integer",
            "description": "`In Progress`のセッション。"
          },
          "not_started": {
            "type": "integer",
            "description": "`Not Started`のセッション。"
          },
          "manually_approved": {
            "type": "integer",
            "description": "ワークフローが別の判定を出した後に、レビュアーが承認したセッション。"
          },
          "manually_declined": {
            "type": "integer",
            "description": "ワークフローが別の判定を出した後に、レビュアーが却下したセッション。"
          }
        }
      },
      "ApplicationAnalyticsRequestBreakdown": {
        "type": "object",
        "description": "期間内のステータス別合計。前期間の内訳には、少なくとも必須フィールドが含まれます。",
        "required": [
          "total_approved",
          "total_in_review",
          "total_declined",
          "total_canceled",
          "total_pending"
        ],
        "properties": {
          "total_approved": {
            "type": "integer",
            "description": "`Approved`または`Kyc Expired`のセッション。"
          },
          "total_in_review": {
            "type": "integer",
            "description": "`In Review`のセッション。"
          },
          "total_declined": {
            "type": "integer",
            "description": "`Declined`のセッション。"
          },
          "total_canceled": {
            "type": "integer",
            "description": "`Expired`または`Abandoned`のセッション。"
          },
          "total_pending": {
            "type": "integer",
            "description": "`Not Started`、`In Progress`または`In Review`のセッション（`total_in_review`を含む）。"
          },
          "total_expired": {
            "type": "integer",
            "description": "`Expired`のセッション。"
          },
          "total_abandoned": {
            "type": "integer",
            "description": "`Abandoned`のセッション。"
          },
          "total_in_progress": {
            "type": "integer",
            "description": "`In Progress`のセッション。"
          },
          "total_not_started": {
            "type": "integer",
            "description": "`Not Started`のセッション。"
          },
          "total_manually_approved": {
            "type": "integer",
            "description": "レビュアーにより承認済み。"
          },
          "total_manually_declined": {
            "type": "integer",
            "description": "レビュアーにより却下されました。"
          }
        }
      },
      "ApplicationAnalyticsCountryCount": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "国名。"
          },
          "country_code": {
            "type": "string",
            "description": "2文字の国コード。"
          },
          "session_count": {
            "type": "integer",
            "description": "その国からのセッション。"
          }
        }
      },
      "ApplicationAnalyticsLocationStats": {
        "type": "object",
        "properties": {
          "ip_countries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsCountryCount"
            },
            "description": "ユーザーのIPアドレスの国。セッション数の多い順です。"
          },
          "countries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsCountryCount"
            },
            "description": "`ip_countries`と同じリスト。"
          },
          "id_countries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsCountryCount"
            },
            "description": "認証済みの本人確認書類の発行国。セッション数の多い順に並びます。"
          },
          "conversion_by_country": {
            "type": "array",
            "description": "書類の発行国ごとの、完了したセッション数（承認済み、却下、レビュー中）とそのうち承認された件数。完了数の多い順。",
            "items": {
              "type": "object",
              "properties": {
                "country": {
                  "type": "string"
                },
                "country_code": {
                  "type": "string"
                },
                "finished": {
                  "type": "integer"
                },
                "approved": {
                  "type": "integer"
                }
              }
            }
          },
          "cities": {
            "type": "array",
            "description": "IPの都市を最大100件、セッション数の多い順に返します。",
            "items": {
              "type": "object",
              "properties": {
                "location": {
                  "type": "string",
                  "description": "`City, Country`の形式です。"
                },
                "session_count": {
                  "type": "integer"
                },
                "latitude": {
                  "type": "number",
                  "nullable": true
                },
                "longitude": {
                  "type": "number",
                  "nullable": true
                }
              }
            }
          }
        }
      },
      "ApplicationAnalyticsDemographicStats": {
        "type": "object",
        "properties": {
          "age_distribution": {
            "type": "object",
            "description": "本人確認書類に基づく年齢層ごとのセッション数。データがない場合は空です。",
            "properties": {
              "under_18": {
                "type": "integer"
              },
              "18_24": {
                "type": "integer"
              },
              "25_34": {
                "type": "integer"
              },
              "35_44": {
                "type": "integer"
              },
              "45_64": {
                "type": "integer"
              },
              "65_plus": {
                "type": "integer"
              }
            },
            "additionalProperties": {
              "type": "integer"
            }
          },
          "gender_distribution": {
            "type": "object",
            "description": "書類の性別コードごとのセッション数: `M`、`F`または`U`（不明）。",
            "additionalProperties": {
              "type": "integer"
            }
          }
        }
      },
      "ApplicationAnalyticsDeviceDetails": {
        "type": "object",
        "description": "それぞれの上位5件（セッション数の多い順）。",
        "properties": {
          "device_models": {
            "type": "array",
            "description": "デバイスのブランド：`Apple`、`Android`、`LG`。それ以外はすべて`Other`にまとめられます。",
            "items": {
              "type": "object",
              "properties": {
                "device": {
                  "type": "string"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          },
          "browsers": {
            "type": "array",
            "description": "ブラウザ：`Chrome`、`Safari`、`Didit App`、`Firefox`。それ以外はすべて`Other`にまとめられます。",
            "items": {
              "type": "object",
              "properties": {
                "browser": {
                  "type": "string"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          },
          "operating_systems": {
            "type": "array",
            "description": "オペレーティングシステム。",
            "items": {
              "type": "object",
              "properties": {
                "os": {
                  "type": "string"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "ApplicationAnalyticsWorkflowFunnel": {
        "type": "object",
        "description": "ワークフローIDをキーとします。`total`はそのワークフローで開始されたセッション数、`steps`は各ステップ（`OCR`、`LIVENESS`、`FACE_MATCH`、`AML`、`POA`、`PHONE`、`EMAIL`、`NFC`、`DATABASE_VALIDATION`、`QUESTIONNAIRE`、`IP_ANALYSIS`、`AGE_ESTIMATION`、`KYB_REGISTRY`、`KYB_DOCUMENTS`、`KYB_KEY_PEOPLE`）に到達したセッション数です。ステップに到達したことは、そのステップを通過したことを意味しません。",
        "additionalProperties": {
          "type": "object",
          "properties": {
            "total": {
              "type": "integer"
            },
            "steps": {
              "type": "object",
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "reached": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "ApplicationAnalyticsVerificationTimeStats": {
        "type": "object",
        "description": "ユーザーが認証に実際に費やした操作時間（アイドル時間を除く）。データがない場合は空のオブジェクトです。",
        "properties": {
          "overall_avg_seconds": {
            "type": "number",
            "description": "セッション1件あたりの平均値（小数点以下1桁）。"
          },
          "overall_count": {
            "type": "integer",
            "description": "計測したセッション。"
          },
          "per_feature": {
            "type": "object",
            "description": "機能をキーとします（例：`OCR`、`LIVENESS`）。",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "avg_seconds": {
                  "type": "number"
                },
                "total_seconds": {
                  "type": "number"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          },
          "per_sub_step": {
            "type": "object",
            "description": "機能をキーとし、さらにサブステップをキーとします（例：`front_id_photo`）。",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "avg_seconds": {
                    "type": "number"
                  },
                  "total_seconds": {
                    "type": "number"
                  },
                  "count": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "ApplicationAnalyticsResubmissionStats": {
        "type": "object",
        "properties": {
          "first_pass": {
            "type": "integer",
            "description": "再提出されていない完了済みセッションです。"
          },
          "second": {
            "type": "integer",
            "description": "1回再提出された完了済みセッションです。"
          },
          "third_plus": {
            "type": "integer",
            "description": "2回以上再提出された完了済みセッションです。"
          },
          "abandoned": {
            "type": "integer",
            "description": "放棄されたセッション。"
          }
        }
      },
      "ApplicationAnalyticsOriginalStatusStats": {
        "type": "object",
        "description": "レビュアーが変更する前の、ワークフローによる自動判定。",
        "properties": {
          "approved": {
            "type": "integer"
          },
          "in_review": {
            "type": "integer"
          },
          "declined": {
            "type": "integer"
          }
        }
      },
      "ApplicationAnalyticsWarningStats": {
        "type": "object",
        "description": "機能（`ID_VERIFICATION`、`LIVENESS`、`FACEMATCH`、`AML`、`PROOF_OF_ADDRESS`、`PHONE`、`EMAIL`、`NFC`、`LOCATION`、`DATABASE_VALIDATION`、`QUESTIONNAIRE`、およびKYBの各機能）をキーとします。`total`はその機能に到達したセッション数、`risks`は警告コードとレベルごとのセッション数です。",
        "additionalProperties": {
          "type": "object",
          "properties": {
            "total": {
              "type": "integer"
            },
            "risks": {
              "type": "object",
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "error": {
                    "type": "integer"
                  },
                  "warning": {
                    "type": "integer"
                  },
                  "information": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "ApplicationAnalyticsDemographicPoint": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "期間キーです。`grouping_mode`に従い、日の場合は`YYYY-MM-DD`、週の場合はその週の月曜日、月の場合は`YYYY-MM`となります。"
          },
          "age_distribution": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "gender_distribution": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          }
        }
      },
      "ApplicationAnalyticsDevicePoint": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "期間キーです。`grouping_mode`に従い、日の場合は`YYYY-MM-DD`、週の場合はその週の月曜日、月の場合は`YYYY-MM`となります。"
          },
          "devices": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "browsers": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "operating_systems": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          }
        }
      },
      "ApplicationAnalyticsVerificationTimePoint": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "期間キーです。`grouping_mode`に従い、日の場合は`YYYY-MM-DD`、週の場合はその週の月曜日、月の場合は`YYYY-MM`となります。"
          },
          "overall_avg": {
            "type": "number",
            "description": "セッション1件あたりの平均アクティブ秒数。"
          },
          "per_feature": {
            "type": "object",
            "description": "機能あたりの平均アクティブ秒数。",
            "additionalProperties": {
              "type": "number"
            }
          }
        }
      },
      "ApplicationAnalyticsResubmissionPoint": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "期間キーです。`grouping_mode`に従い、日の場合は`YYYY-MM-DD`、週の場合はその週の月曜日、月の場合は`YYYY-MM`となります。"
          },
          "first_pass": {
            "type": "integer"
          },
          "second": {
            "type": "integer"
          },
          "third_plus": {
            "type": "integer"
          },
          "abandoned": {
            "type": "integer"
          }
        }
      },
      "ApplicationAnalyticsOriginalStatusPoint": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "期間キーです。`grouping_mode`に従い、日の場合は`YYYY-MM-DD`、週の場合はその週の月曜日、月の場合は`YYYY-MM`となります。"
          },
          "approved": {
            "type": "integer"
          },
          "in_review": {
            "type": "integer"
          },
          "declined": {
            "type": "integer"
          }
        }
      },
      "ApplicationAnalyticsSummary": {
        "type": "object",
        "description": "ユーザー認証（KYC）のサマリー。`scope`と`widget_keys`のどちらも送信されない場合に返されます。",
        "required": [
          "data_points",
          "request_breakdown",
          "previous_data_points",
          "previous_request_breakdown",
          "conversion_rate",
          "location_stats",
          "demographic_stats",
          "device_details",
          "workflow_funnel_stats",
          "verification_time_stats",
          "resubmission_stats",
          "warning_stats",
          "original_status_stats",
          "grouping_mode",
          "demographic_time_series",
          "device_time_series",
          "verification_time_time_series",
          "resubmission_time_series",
          "original_status_time_series"
        ],
        "properties": {
          "data_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDataPoint"
            },
            "description": "1日につき1ポイントで、範囲内でセッションがある最初の日から`end_date`までです。`grouping_mode`の値にかかわらず、常に日次です。"
          },
          "request_breakdown": {
            "$ref": "#/components/schemas/ApplicationAnalyticsRequestBreakdown"
          },
          "previous_data_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDataPoint"
            },
            "description": "`start_date`の直前にある同じ長さの期間の日次ポイント。"
          },
          "previous_request_breakdown": {
            "$ref": "#/components/schemas/ApplicationAnalyticsRequestBreakdown"
          },
          "conversion_rate": {
            "type": "number",
            "nullable": true,
            "description": "`total_approved / (total_approved + total_declined + total_in_review) x 100`、小数点以下1桁です。完了したものがない場合は`null`です。"
          },
          "location_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsLocationStats"
          },
          "demographic_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsDemographicStats"
          },
          "device_details": {
            "$ref": "#/components/schemas/ApplicationAnalyticsDeviceDetails"
          },
          "workflow_funnel_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsWorkflowFunnel"
          },
          "verification_time_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsVerificationTimeStats"
          },
          "resubmission_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsResubmissionStats"
          },
          "warning_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsWarningStats"
          },
          "original_status_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsOriginalStatusStats"
          },
          "grouping_mode": {
            "type": "string",
            "enum": [
              "day",
              "week",
              "month"
            ],
            "description": "`*_time_series`リストの集計単位：14日までは`day`、90日までは`week`、それを超えると`month`。期間内でセッションがある最初の日から計測します。"
          },
          "demographic_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDemographicPoint"
            }
          },
          "device_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDevicePoint"
            }
          },
          "verification_time_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsVerificationTimePoint"
            }
          },
          "resubmission_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsResubmissionPoint"
            }
          },
          "original_status_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsOriginalStatusPoint"
            }
          }
        }
      },
      "ApplicationAnalyticsWidget": {
        "type": "object",
        "description": "ダッシュボードウィジェット1件。すべてのウィジェットに`kind`と`title`があり、その他のフィールドは`kind`によって異なります。セッションウィジェットはサマリーオブジェクト（`data_points`、`request_breakdown`、`workflow_funnel_stats`など）を再利用し、リストウィジェットはエントリーを`items`に格納し、取引メトリクスは`value`を使用します。",
        "required": [
          "kind",
          "title"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "sessions_volume",
              "workflow_funnel",
              "average_verification_time",
              "country_distribution",
              "warning_insights",
              "conversion_rate",
              "conversion_by_country",
              "resubmission_insights",
              "original_status_distribution",
              "database_validation_coverage",
              "database_validation_latency",
              "demographics",
              "device_details",
              "horizontal_bar",
              "kyb_registry_coverage",
              "kyb_registry_data_completeness",
              "metric",
              "time_series",
              "breakdown",
              "status_time_series",
              "leaderboard",
              "histogram"
            ],
            "description": "ウィジェットの種類。"
          },
          "title": {
            "type": "string",
            "description": "表示タイトル。例: `Verification volume`。"
          },
          "grouping_mode": {
            "type": "string",
            "enum": [
              "day",
              "week",
              "month"
            ],
            "description": "`*_time_series`リストの集計単位：14日までは`day`、90日までは`week`、それを超えると`month`。期間内でセッションがある最初の日から計測します。"
          },
          "data_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDataPoint"
            }
          },
          "request_breakdown": {
            "$ref": "#/components/schemas/ApplicationAnalyticsRequestBreakdown"
          },
          "previous_data_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDataPoint"
            }
          },
          "previous_request_breakdown": {
            "$ref": "#/components/schemas/ApplicationAnalyticsRequestBreakdown"
          },
          "conversion_rate": {
            "type": "number",
            "nullable": true
          },
          "workflow_funnel_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsWorkflowFunnel"
          },
          "verification_time_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsVerificationTimeStats"
          },
          "verification_time_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsVerificationTimePoint"
            }
          },
          "warning_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsWarningStats"
          },
          "resubmission_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsResubmissionStats"
          },
          "resubmission_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsResubmissionPoint"
            }
          },
          "original_status_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsOriginalStatusStats"
          },
          "original_status_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsOriginalStatusPoint"
            }
          },
          "demographic_stats": {
            "$ref": "#/components/schemas/ApplicationAnalyticsDemographicStats"
          },
          "demographic_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDemographicPoint"
            }
          },
          "device_details": {
            "$ref": "#/components/schemas/ApplicationAnalyticsDeviceDetails"
          },
          "device_time_series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationAnalyticsDevicePoint"
            }
          },
          "items": {
            "type": "array",
            "description": "リストウィジェットのエントリ。`country_distribution`（KYC）：`country`、`country_code`、`session_count`。`conversion_by_country`：`country`、`country_code`、`finished`、`approved`。`time_series`：`date`、`value`。`status_time_series`：`date`、`approved`、`declined`、`flagged`。`breakdown`：`transaction_type`または`action_type`と`count`および`volume`、または`tag_id`、`tag_name`、`count`。`leaderboard`：`rule_title`、`trigger_count`または`assignee`、`handled_count`、`average_processing_seconds`で、それぞれに`approved_percentage`、`declined_percentage`、`flagged_percentage`が付きます。`histogram`：`score`、`count`。",
            "items": {
              "type": "object",
              "additionalProperties": {}
            }
          },
          "previous_items": {
            "type": "array",
            "description": "`start_date`の直前にある同じ長さの期間の取引時系列。",
            "items": {
              "type": "object",
              "additionalProperties": {}
            }
          },
          "value": {
            "type": "number",
            "description": "`metric`ウィジェット: 期間内の数値。"
          },
          "currency": {
            "type": "string",
            "nullable": true,
            "description": "取引件数および金額のウィジェット：アプリケーションのデフォルトの取引通貨。"
          },
          "thresholds": {
            "type": "object",
            "description": "`histogram`ウィジェット: アプリケーションのレビューおよび却下のスコアしきい値。",
            "properties": {
              "review": {
                "type": "integer"
              },
              "decline": {
                "type": "integer"
              }
            }
          },
          "search": {
            "type": "object",
            "description": "`kyb_registry_coverage`ウィジェット: 登記検索の合計数。",
            "properties": {
              "searches_total": {
                "type": "integer"
              },
              "searches_with_no_candidates": {
                "type": "integer"
              }
            }
          }
        }
      },
      "ApplicationAnalyticsWidgetResponse": {
        "type": "object",
        "description": "ダッシュボードウィジェット。`scope`または`widget_keys`を送信した場合に返されます。",
        "required": [
          "scope",
          "available_widget_keys",
          "requested_widget_keys",
          "widgets"
        ],
        "properties": {
          "scope": {
            "type": "string",
            "enum": [
              "home",
              "kyc",
              "kyb",
              "transactions"
            ],
            "description": "ダッシュボードタブ。"
          },
          "available_widget_keys": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "このスコープが受け付けるすべてのウィジェットキーです。"
          },
          "requested_widget_keys": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "回答されたウィジェットキー(順序どおり)。有効な`widget_keys`、またはスコープのデフォルトです。"
          },
          "widgets": {
            "type": "object",
            "description": "ウィジェットキーをキーとし、`requested_widget_keys`の順に並びます。",
            "additionalProperties": {
              "$ref": "#/components/schemas/ApplicationAnalyticsWidget"
            }
          }
        }
      },
      "ApplicationAnalyticsToday": {
        "type": "object",
        "description": "本日の認証件数を現地時間の時間帯ごとに、先週の同じ曜日と比較したもの。",
        "required": [
          "time_zone",
          "date",
          "current_hour",
          "previous_date",
          "hours",
          "previous_hours",
          "total",
          "previous_total_so_far",
          "outcomes"
        ],
        "properties": {
          "time_zone": {
            "type": "string",
            "description": "その日とその時間帯の基準となるIANAタイムゾーン。",
            "example": "Europe/Madrid"
          },
          "date": {
            "type": "string",
            "format": "date",
            "description": "そのタイムゾーンでの今日。",
            "example": "2026-10-30"
          },
          "current_hour": {
            "type": "integer",
            "minimum": 0,
            "maximum": 23,
            "description": "現在の現地時刻の時です。",
            "example": 14
          },
          "previous_date": {
            "type": "string",
            "format": "date",
            "description": "比較対象の日。1週間前の同じ曜日です。",
            "example": "2026-10-23"
          },
          "hours": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            },
            "minItems": 24,
            "maxItems": 24,
            "description": "今日作成された認証の、00:00からの現地時間1時間ごとの件数。まだ到来していない時間帯は0です。"
          },
          "previous_hours": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            },
            "minItems": 24,
            "maxItems": 24,
            "description": "比較対象日に作成された認証の、00:00からの現地時間1時間ごとの件数。"
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "description": "今日これまでに作成された認証。",
            "example": 165
          },
          "previous_total_so_far": {
            "type": "integer",
            "minimum": 0,
            "description": "比較対象日に作成された認証のうち、同じ現地時刻までに作成されたもの。",
            "example": 151
          },
          "outcomes": {
            "type": "object",
            "description": "本日の認証のうち、現時点で承認済み、レビュー待ち、却下となっている件数。残りはまだ完了していません。",
            "required": [
              "approved",
              "in_review",
              "declined"
            ],
            "properties": {
              "approved": {
                "type": "integer",
                "minimum": 0
              },
              "in_review": {
                "type": "integer",
                "minimum": 0
              },
              "declined": {
                "type": "integer",
                "minimum": 0
              }
            }
          }
        }
      },
      "WebhookConfigDestination": {
        "type": "object",
        "description": "Webhook設定に表示されるWebhookの送信先です（配信メトリクスは含みません）。`GET /v3/webhook/destinations/{destination_uuid}/`では配信サマリーが追加されます。",
        "required": [
          "uuid",
          "label",
          "url",
          "enabled",
          "webhook_version",
          "secret_shared_key",
          "subscribed_events",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "送信先ID。"
          },
          "label": {
            "type": "string",
            "maxLength": 255,
            "description": "人が読める名前。"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2000,
            "description": "DiditがイベントをPOSTするHTTPSエンドポイントです。"
          },
          "enabled": {
            "type": "boolean",
            "description": "`false`にすると、この送信先への配信が一時停止されます。"
          },
          "webhook_version": {
            "type": "string",
            "enum": [
              "v1",
              "v2",
              "v3"
            ],
            "description": "この送信先に送信されるペイロードバージョン。"
          },
          "secret_shared_key": {
            "type": "string",
            "description": "この送信先の署名シークレット(43文字のURLセーフなトークン)。各Webhookは、送信された送信先のシークレットで検証してください。APIキーで呼び出した場合は常に全体が返されます。`read:webhooks`を持たないコンソールユーザーには空文字列が返されます。"
          },
          "subscribed_events": {
            "type": "array",
            "uniqueItems": true,
            "description": "この送信先に配信されるイベントタイプです。イベントを指定せずに送信先が作成された場合は空になり、その場合は何も受信しません。",
            "items": {
              "$ref": "#/components/schemas/WebhookEvent"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebhookConfig": {
        "type": "object",
        "description": "アプリケーションレベルのWebhook設定、保持ポリシー、Digital IDウォレットの戻り先ホスト、およびすべてのWebhookの送信先。",
        "required": [
          "webhook_url",
          "webhook_version",
          "secret_shared_key",
          "capture_method",
          "data_retention_months",
          "face_retention_policy",
          "face_retention_days",
          "available_events",
          "allowed_return_hosts",
          "endpoints"
        ],
        "properties": {
          "webhook_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "アプリケーションレベル（レガシー）のWebhook URL。Diditは、アプリケーションに有効な送信先が1つもない間に限りこのURLに送信し、その場合も`status.updated`と`data.updated`のみを送信します。送信先を作成、更新、削除するたびに、この値は最も古い有効な送信先のURL、または有効な送信先がない場合は`null`に設定されます。"
          },
          "webhook_version": {
            "type": "string",
            "enum": [
              "v1",
              "v2",
              "v3"
            ],
            "description": "従来の`webhook_url`のペイロードバージョン。各送信先はそれぞれ独自の`webhook_version`を持ちます。"
          },
          "secret_shared_key": {
            "type": "string",
            "description": "アプリケーションレベルの署名シークレット（43文字のURLセーフなトークン）。従来の`webhook_url`への配信にのみ署名し、各送信先はそれぞれの`secret_shared_key`で署名します。APIキーで呼び出した場合は常に全体が返されます。`read:webhooks`を持たないConsoleユーザーには空文字列が返されます。"
          },
          "capture_method": {
            "type": "string",
            "enum": [
              "MOBILE",
              "MOBILE_AND_DESKTOP"
            ],
            "description": "レガシーのアプリケーション設定。認証フローではこの値は読み取られません。撮影オプションはワークフローごとに設定します。"
          },
          "data_retention_months": {
            "type": "integer",
            "nullable": true,
            "minimum": 1,
            "maximum": 120,
            "description": "自動削除までの期間。この月数（1か月は30日として計算）より前に作成されたユーザー認証セッションは自動的に削除され、この削除は元に戻せません。`null`の場合、セッションは自動削除されません。[データ保持](https://docs.didit.me/ja/console/data-retention)を参照してください。"
          },
          "face_retention_policy": {
            "type": "string",
            "enum": [
              "delete_with_session",
              "retain_until_user_deleted"
            ],
            "description": "セッションの削除時に、そのセッションの顔エンベディングをどう扱うか。`delete_with_session`（デフォルト）はセッションとともに削除します。`retain_until_user_deleted`はオプトインの[生体認証テンプレートの保持](https://docs.didit.me/ja/console/data-retention#生体認証テンプレートの保持)です。Userに紐付いた画像を含まない生体認証テンプレートが、保持期間が終了するか、Userが削除されるか、お客様が消去するまで、セッションとは別に管理されます。"
          },
          "face_retention_days": {
            "type": "integer",
            "nullable": true,
            "minimum": 1,
            "maximum": 3650,
            "description": "`retain_until_user_deleted`における生体認証テンプレートの保持期間（日数）。このポリシーを設定する場合は必須です。"
          },
          "biometric_consent_mode": {
            "type": "string",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "description": "ホスト型フローとネイティブSDKが、顔の撮影前に本人へ生体認証についての明示的な同意を求める条件です。`auto`（デフォルト）は、トリガーに該当する場合にのみ同意を求めます。該当するのは、申告された州、本人のIP、または本人確認書類の発行元がイリノイ州、テキサス州、コロラド州のいずれかである場合、または州が不明なまま本人が米国にいると見られる場合です。`always`は、ワークフローで顔を撮影するすべての人に同意を求めます。`never`はこのステップを一切表示しないため、セルフィーの前にお客様自身で同意を取得する必要があります。変更はすべて監査ログに記録されます。詳しくは[生体認証の同意](https://docs.didit.me/ja/getting-started/biometric-consent)を参照してください。"
          },
          "available_events": {
            "type": "array",
            "description": "送信先がサブスクライブできるすべてのイベントタイプと、その表示ラベルです。",
            "items": {
              "type": "object",
              "required": [
                "value",
                "label"
              ],
              "properties": {
                "value": {
                  "$ref": "#/components/schemas/WebhookEvent"
                },
                "label": {
                  "type": "string",
                  "description": "表示ラベルです。例：`Session status updated`。"
                }
              }
            }
          },
          "allowed_return_hosts": {
            "type": "array",
            "maxItems": 20,
            "description": "スタンドアロンのDigital IDウォレット検証が`return_url`でユーザーを戻すことができるホスト名(完全一致、HTTPSのみ)です。ホワイトラベルドメインも常に許可されます。[戻り先を登録する](https://docs.didit.me/ja/standalone-apis/digital-id-wallets#戻り先を登録する)を参照してください。",
            "items": {
              "type": "string",
              "maxLength": 253
            }
          },
          "endpoints": {
            "type": "array",
            "description": "アプリケーションのすべてのWebhookの送信先を、それぞれの署名シークレットとともに古い順に示します。ここでは読み取り専用です。送信先の管理には`/v3/webhook/destinations/`エンドポイントを使用してください。",
            "items": {
              "$ref": "#/components/schemas/WebhookConfigDestination"
            }
          },
          "allowed_domains": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "string",
              "maxLength": 300
            },
            "description": "ホスト型の検証フローを埋め込むことができ、セッションのコールバックでユーザーを戻すことができるオリジンです（例：`https://app.example.com`。`http`は`localhost`の場合のみ）。サーバー間の呼び出しには影響しません。空のリストは制限なしを意味します。Diditは各オリジンを小文字で、デフォルトポートを除いて保存します。無効なエントリは`allowed_domains`で`400`として失敗します。",
            "example": [
              "https://app.example.com"
            ]
          }
        }
      },
      "WebhookDestinationDelivery": {
        "type": "object",
        "description": "Webhookの送信先への配信試行1件。イベントの初回送信、各自動再試行、各再送はそれぞれ別の配信として扱われます。",
        "required": [
          "uuid",
          "session_id",
          "request_url",
          "response_status",
          "response_time_ms",
          "status",
          "webhook_type",
          "created_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "配信ID。詳細取得と再送の呼び出しに使用します。"
          },
          "session_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "イベントの対象となるユーザー認証セッション。企業セッション、ユーザー、企業、取引、トラベルルール、ワークフローのイベントでは`null`です。"
          },
          "request_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "配信の送信先URL。イベント生成時点の送信先のURLです。"
          },
          "response_status": {
            "type": "integer",
            "nullable": true,
            "description": "エンドポイントが返したHTTPステータス。配信がキューに入っていてまだ試行されていない間は`null`です。HTTP応答を受信しなかった場合、Diditは独自のステータスを記録します。エンドポイントが5秒以内に応答しなかった場合は`504`、接続に失敗した場合は`503`、URLが安全でないとして拒否された場合(プライベートアドレスや内部アドレスなど)は`400`、その他のリクエストエラーの場合は`404`です。`400`以上は配信失敗とみなされます。"
          },
          "response_time_ms": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "description": "試行にかかった時間(ミリ秒)。配信がキューに入っている間は`null`です。"
          },
          "status": {
            "type": "string",
            "nullable": true,
            "description": "イベント生成時に報告されたステータス。セッションイベントではセッションのステータス（例: `Approved`や`In Review`）、ユーザーイベントと企業イベントでは個人または企業のステータス、取引イベントでは取引のステータスです。ステータスを持たないイベントでは`null`です。"
          },
          "webhook_type": {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "配信が作成された日時。"
          }
        }
      },
      "WebhookDestinationDeliveryDetail": {
        "type": "object",
        "description": "Webhookの送信先への配信試行1件。Diditが送信したリクエストヘッダーと本文をそのまま含みます。",
        "required": [
          "uuid",
          "session_id",
          "request_url",
          "response_status",
          "response_time_ms",
          "status",
          "webhook_type",
          "created_at",
          "request_header",
          "request_body"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "配信ID。詳細取得と再送の呼び出しに使用します。"
          },
          "session_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "イベントの対象となるユーザー認証セッション。企業セッション、ユーザー、企業、取引、トラベルルール、ワークフローのイベントでは`null`です。"
          },
          "request_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "配信の送信先URL。イベント生成時点の送信先のURLです。"
          },
          "response_status": {
            "type": "integer",
            "nullable": true,
            "description": "エンドポイントが返したHTTPステータス。配信がキューに入っていてまだ試行されていない間は`null`です。HTTP応答を受信しなかった場合、Diditは独自のステータスを記録します。エンドポイントが5秒以内に応答しなかった場合は`504`、接続に失敗した場合は`503`、URLが安全でないとして拒否された場合(プライベートアドレスや内部アドレスなど)は`400`、その他のリクエストエラーの場合は`404`です。`400`以上は配信失敗とみなされます。"
          },
          "response_time_ms": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "description": "試行にかかった時間(ミリ秒)。配信がキューに入っている間は`null`です。"
          },
          "status": {
            "type": "string",
            "nullable": true,
            "description": "イベント生成時に報告されたステータス。セッションイベントではセッションのステータス（例: `Approved`や`In Review`）、ユーザーイベントと企業イベントでは個人または企業のステータス、取引イベントでは取引のステータスです。ステータスを持たないイベントでは`null`です。"
          },
          "webhook_type": {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "配信が作成された日時。"
          },
          "request_header": {
            "type": "string",
            "description": "Diditが送信したリクエストヘッダー（`Content-Type`、`X-Signature`、`X-Signature-V2`、`X-Signature-Simple`、`X-Timestamp`、`User-Agent`）のJSONテキスト（文字列）です。JSONパーサーで解析してください。署名は含まれますが、署名用シークレットは決して含まれません。"
          },
          "request_body": {
            "type": "string",
            "description": "Diditが送信したペイロードそのもののJSONテキスト（文字列）です。キーはソートされ、`event_id`と`timestamp`を含みます。JSONパーサーで解析してください。[ペイロードの形式](https://docs.didit.me/ja/integration/webhooks#ペイロードの構造)を参照してください。`media: read`を持たないスコープ付きキーの場合、その中のメディアURLは`null`になります。`sessions: write`を持たない場合、セッショントークンとホスト型検証リンクは`null`になります。このように変更された本文は、署名と一致しなくなります。Diditは、お使いのエンドポイントが返したレスポンス本文を記録しません。"
          }
        }
      },
      "SessionWebhookDelivery": {
        "type": "object",
        "description": "認証セッションについて記録されたWebhook配信の試行1件です。Diditが送信した正確なリクエストヘッダーと本文を含みます。",
        "required": [
          "uuid",
          "session_id",
          "request_url",
          "response_status",
          "status",
          "webhook_type",
          "request_header",
          "request_body",
          "created_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "配信ID。この配信を取得または再送するには、`{webhook_uuid}`として使用します。"
          },
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "配信が属するセッション（パスで指定したセッション）。"
          },
          "request_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "配信の送信先URL。"
          },
          "response_status": {
            "type": "integer",
            "nullable": true,
            "description": "エンドポイントが返したHTTPステータス。配信がキューに入っていてまだ試行されていない間は`null`です。HTTP応答を受信しなかった場合、Diditは独自のステータスを記録します。エンドポイントが5秒以内に応答しなかった場合は`504`、接続に失敗した場合は`503`、URLが安全でないとして拒否された場合(プライベートアドレスや内部アドレスなど)は`400`、その他のリクエストエラーの場合は`404`です。`400`以上は配信失敗とみなされます。"
          },
          "status": {
            "type": "string",
            "nullable": true,
            "description": "イベント生成時点のセッションステータス（例: `In Progress`、`Approved`、`Declined`）。"
          },
          "webhook_type": {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          "request_header": {
            "type": "string",
            "description": "Diditが送信したリクエストヘッダー（`Content-Type`、`X-Signature`、`X-Signature-V2`、`X-Signature-Simple`、`X-Timestamp`、`User-Agent`）のJSONテキスト（文字列）です。JSONパーサーで解析してください。署名は含まれますが、署名用シークレットは決して含まれません。"
          },
          "request_body": {
            "type": "string",
            "description": "Diditが送信したペイロードそのもののJSONテキスト（文字列）です。キーはソートされ、`event_id`と`timestamp`を含みます。JSONパーサーで解析してください。[ペイロードの形式](https://docs.didit.me/ja/integration/webhooks#ペイロードの構造)を参照してください。`media: read`を持たないスコープ付きキーの場合、その中のメディアURLは`null`になります。`sessions: write`を持たない場合、セッショントークンとホスト型検証リンクは`null`になります。このように変更された本文は、署名と一致しなくなります。Diditは、お使いのエンドポイントが返したレスポンス本文を記録しません。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "配信が作成された日時。"
          }
        }
      },
      "SessionEvent": {
        "type": "object",
        "description": "検証セッションのイベントタイムラインのエントリー1件。",
        "required": [
          "uuid",
          "event_type",
          "created_at",
          "component",
          "feature_step",
          "step",
          "details",
          "ip_address",
          "user_agent",
          "device_info",
          "file_url",
          "sent_at"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "イベントの識別子です。"
          },
          "event_type": {
            "type": "string",
            "enum": [
              "SESSION_CREATED",
              "SESSION_COMPLETED",
              "SESSION_STATUS_CHANGED",
              "LINK_OPENED",
              "FORM_SUBMITTED",
              "BUTTON_CLICKED",
              "FILE_UPLOADED",
              "ATTEMPT_FAILED",
              "FEATURE_STEP_CHANGED",
              "STEP_RENDERED",
              "NOTE_ADDED",
              "MANUAL_REVIEW_STARTED",
              "WORKFLOW_BRANCH_EVALUATED",
              "WORKFLOW_STATUS_NODE_REACHED",
              "LOG"
            ],
            "description": "発生した内容。ホスト型フローまたはSDKの実行中にデバイスから報告されるもの: `LINK_OPENED`、`STEP_RENDERED`、`BUTTON_CLICKED`、`FORM_SUBMITTED`、`FILE_UPLOADED`、`ATTEMPT_FAILED`、`LOG`（デバッグ用）。サーバーが記録するもの: `SESSION_CREATED`、`SESSION_STATUS_CHANGED`（`details.old_status`、`details.current_status`）、`FEATURE_STEP_CHANGED`（`details.old_feature_step`、`details.current_feature_step`）、`WORKFLOW_BRANCH_EVALUATED`、`WORKFLOW_STATUS_NODE_REACHED`（ワークフローのルーティングトレース）。古いセッションでは`SESSION_COMPLETED`、`NOTE_ADDED`、`MANUAL_REVIEW_STARTED`が表示される場合があります。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Diditがイベントを保存した日時です。イベントは非同期で保存されるため、`sent_at`の数秒後になります。"
          },
          "component": {
            "type": "string",
            "nullable": true,
            "description": "イベントを報告したUIコンポーネント（デバイスイベントのみ）。"
          },
          "feature_step": {
            "type": "string",
            "nullable": true,
            "enum": [
              "OCR",
              "OCR_BACK",
              "NFC",
              "AML",
              "FACE",
              "LIVENESS",
              "FACE_MATCH",
              "IP_ANALYSIS",
              "AGE_ESTIMATION",
              "PROOF_OF_ADDRESS",
              "PHONE_VERIFICATION",
              "EMAIL_VERIFICATION",
              "FACE_SEARCH",
              "DATABASE_VALIDATION",
              "QUESTIONNAIRE",
              "KYB_REGISTRY",
              "KYB_DOCUMENTS",
              "KYB_KEY_PEOPLE",
              "DOCUMENT_AI",
              "GEOLOCATION",
              null
            ],
            "description": "イベント発生時にセッションが実行していた認証機能。"
          },
          "step": {
            "type": "string",
            "nullable": true,
            "description": "機能内の画面(例: `DOCUMENT_CAPTURE_FRONT`、`FACE_PASSIVE_LIVENESS`)。"
          },
          "details": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "イベント固有のデータです。キーは`event_type`によって異なります。"
          },
          "ip_address": {
            "type": "string",
            "nullable": true,
            "description": "デバイスがイベントを報告した際のIPアドレス。サーバーで記録されたイベントでは`null`です。"
          },
          "user_agent": {
            "type": "string",
            "nullable": true,
            "description": "デバイスのユーザーエージェント。サーバーで記録されたイベントでは`null`です。"
          },
          "device_info": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "SDKまたはブラウザが報告したデバイスの詳細です。"
          },
          "file_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "イベントに添付されたファイル（キャプチャ画像など）への有効期間の短い署名付きリンク。ファイルがない場合は`null`で、`media: read`を持たないスコープ付きAPIキーでは常に`null`です。"
          },
          "sent_at": {
            "type": "integer",
            "format": "int64",
            "description": "イベントが発生した日時（ミリ秒単位のUnixタイムスタンプ）。結果はこの値の順に並びます。"
          }
        }
      },
      "AMLDatasetSourceFreshness": {
        "type": "object",
        "description": "AMLデータセットの1ファミリーの鮮度。",
        "required": [
          "last_updated_at",
          "oldest_updated_at",
          "dataset_count",
          "dated_dataset_count"
        ],
        "properties": {
          "last_updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "ファミリー内のいずれかのデータセットの直近の更新。"
          },
          "oldest_updated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "鮮度の上限: ファミリー内のすべてのデータセットは、少なくともこの時点まで最新です。ファミリー内の少なくとも1つのデータセットが更新日を報告していない場合は上限が不明となるため、`null`になります。"
          },
          "dataset_count": {
            "type": "integer",
            "description": "ファミリー内のデータセット数。"
          },
          "dated_dataset_count": {
            "type": "integer",
            "description": "それらのデータセットのうち、更新日を報告したものの数です。"
          }
        }
      },
      "AMLDatasetFreshness": {
        "type": "object",
        "description": "スクリーニング実行時点でのAMLデータセットの鮮度です。日付が推定されることはありません。",
        "required": [
          "captured_at",
          "provider",
          "catalog_version",
          "sources"
        ],
        "properties": {
          "captured_at": {
            "type": "string",
            "format": "date-time",
            "description": "この鮮度情報の元となるデータセットカタログをDiditが読み取った日時です。"
          },
          "provider": {
            "type": "string",
            "description": "AMLデータソースの不透明な識別子です。不透明な文字列として扱い、この値で処理を分岐させないでください。",
            "example": "aml_data_source"
          },
          "catalog_version": {
            "type": "string",
            "nullable": true,
            "description": "データセットカタログのバージョン識別子(ソースが報告する場合)。"
          },
          "sources": {
            "type": "object",
            "description": "データセットファミリーごとの鮮度。データセットが更新日を報告していないファミリーは、`null`で埋められるのではなく省略されます。",
            "properties": {
              "sanctions": {
                "$ref": "#/components/schemas/AMLDatasetSourceFreshness"
              },
              "pep": {
                "$ref": "#/components/schemas/AMLDatasetSourceFreshness"
              },
              "warnings": {
                "$ref": "#/components/schemas/AMLDatasetSourceFreshness"
              },
              "adverse_media": {
                "$ref": "#/components/schemas/AMLDatasetSourceFreshness"
              }
            }
          }
        }
      },
      "AMLScreeningRun": {
        "type": "object",
        "description": "AMLチェックに対して完了した、継続的なモニタリングによる再スクリーニング1件。",
        "required": [
          "uuid",
          "run_id",
          "completed_at",
          "started_at",
          "outcome",
          "trigger",
          "provider",
          "status",
          "score",
          "total_hits",
          "new_hits",
          "entities_screened",
          "dataset_freshness"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "このスクリーニング実行の識別子。"
          },
          "run_id": {
            "type": "string",
            "format": "uuid",
            "description": "このスクリーニングが属するモニタリング実行です。同じ実行でスクリーニングされたすべての認証がこの値を共有します。"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "description": "この対象者の再スクリーニングが完了した日時。結果はこの日時の新しい順に並びます。"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "description": "この再スクリーニングが属するモニタリングバッチが開始された日時。"
          },
          "outcome": {
            "type": "string",
            "enum": [
              "NO_CHANGE",
              "CHANGED",
              "FAILED"
            ],
            "description": "`NO_CHANGE`：完了し、結果に変化はありませんでした。`CHANGED`：完了し、スコア、ステータス、ヒット数、またはヒットが変化しました。`FAILED`：この対象について有効な回答が得られなかったため、チェックは変更されずそのままです。"
          },
          "trigger": {
            "type": "string",
            "enum": [
              "ONGOING_MONITORING"
            ],
            "description": "スクリーニングを開始したトリガーです。現時点では常に`ONGOING_MONITORING`です。"
          },
          "provider": {
            "type": "string",
            "description": "応答したAMLデータソースの不透明な識別子です。不透明な文字列として扱い、この値で処理を分岐させないでください。",
            "example": "aml_data_source"
          },
          "status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Not Finished",
              "Approved",
              "Declined",
              "In Review",
              "Resub Requested",
              null
            ],
            "description": "この実行によってAMLチェックが置かれたステータス。"
          },
          "score": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "minimum": 0,
            "maximum": 100,
            "description": "この実行によってAMLチェックに設定されたスコア。"
          },
          "total_hits": {
            "type": "integer",
            "nullable": true,
            "description": "この実行後にチェックに残ったヒットの数。"
          },
          "new_hits": {
            "type": "integer",
            "nullable": true,
            "description": "この実行で見つかった、チェックにそれまでなかったヒットの数。新たなヒットがない場合は`0`、実行が失敗した場合、またはこのカウントが導入される前に記録された場合は`null`です。"
          },
          "entities_screened": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1,
            "description": "この実行で当該認証のためにスクリーニングされたエンティティの数。対象者がスクリーニングされた場合は`1`、実行が失敗した場合は`0`です。"
          },
          "dataset_freshness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AMLDatasetFreshness"
              }
            ],
            "nullable": true,
            "description": "この実行の基となったデータセットの鮮度。日付が取得できなかった場合は`null`です。"
          }
        }
      },
      "KYBKeyPeopleParty": {
        "type": "object",
        "description": "法人確認 (KYB)セッションの主要人物の当事者と、その子検証。同じ当事者は、企業セッションの判定の`key_people_checks[].submitted.parties[]`にも含まれます。",
        "required": [
          "uuid",
          "entity_type",
          "source",
          "name",
          "is_active",
          "is_skipped",
          "requires_verification",
          "roles",
          "kyc_session_deleted",
          "kyb_sub_session_deleted"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "関係者の識別子。"
          },
          "entity_type": {
            "type": "string",
            "enum": [
              "person",
              "company"
            ],
            "description": "当事者が個人か企業か。"
          },
          "source": {
            "type": "string",
            "enum": [
              "REGISTRY",
              "USER"
            ],
            "description": "`REGISTRY`：法人登記から取得したものです。`USER`：主要人物画面で入力したものです。"
          },
          "name": {
            "type": "string",
            "description": "当事者の表示名です。"
          },
          "first_name": {
            "type": "string",
            "nullable": true,
            "description": "名（個人）。"
          },
          "last_name": {
            "type": "string",
            "nullable": true,
            "description": "姓(個人)。"
          },
          "company_name": {
            "type": "string",
            "nullable": true,
            "description": "会社名（企業の当事者）。"
          },
          "registration_number": {
            "type": "string",
            "nullable": true,
            "description": "会社の登記番号（企業の当事者）。"
          },
          "email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "description": "認証リンクの送信先メールアドレス。"
          },
          "nationality": {
            "type": "string",
            "nullable": true,
            "description": "個人の場合は国籍、企業の場合は設立国。"
          },
          "phone_number": {
            "type": "string",
            "nullable": true,
            "description": "当事者について収集された電話番号。"
          },
          "date_of_birth": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "生年月日（個人）。"
          },
          "position": {
            "type": "string",
            "nullable": true,
            "description": "自由記述の役職（個人）。"
          },
          "custom_fields": {
            "type": "object",
            "additionalProperties": true,
            "description": "当事者について収集された、ワークフローで定義されたカスタムフィールド。フィールドキーをキーとします。"
          },
          "is_active": {
            "type": "boolean",
            "description": "当事者が有効かどうか。"
          },
          "is_skipped": {
            "type": "boolean",
            "description": "当事者が検証を免除されているかどうか。再生成するとクリアされます。"
          },
          "requires_verification": {
            "type": "boolean",
            "description": "役割と所有構造のルールにより、この当事者の検証が必要かどうか。"
          },
          "roles": {
            "type": "array",
            "description": "当事者が企業内で持つ役割。",
            "items": {
              "type": "object",
              "required": [
                "role",
                "ownership_percent",
                "voting_percent"
              ],
              "properties": {
                "role": {
                  "type": "string",
                  "enum": [
                    "director",
                    "non_executive_director",
                    "secretary",
                    "chairman",
                    "ubo",
                    "shareholder",
                    "representative",
                    "founder",
                    "legal_advisor",
                    "authorized_signatory",
                    "trustee",
                    "beneficiary",
                    "settlor",
                    "protector",
                    "company_officer",
                    "investor",
                    "other"
                  ],
                  "description": "役割コード。"
                },
                "ownership_percent": {
                  "type": "number",
                  "nullable": true,
                  "description": "この役割の所有割合（判明している場合）。"
                },
                "voting_percent": {
                  "type": "number",
                  "nullable": true,
                  "description": "この役割の議決権比率（判明している場合）。"
                }
              }
            }
          },
          "kyc_session_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "個人向けの子KYCセッション（個人）。"
          },
          "kyc_session_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User",
              null
            ],
            "description": "子KYCセッションのステータスです。削除されたセッションは、削除時点のステータスを保持します。"
          },
          "kyc_session_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "子KYCセッションのホスト型リンクです。セッションが存在しない場合や削除された場合、および`sessions: write`を持たないスコープ付きAPIキーの場合は`null`です。"
          },
          "kyc_session_deleted": {
            "type": "boolean",
            "description": "子KYCセッションが削除されたため、確定することはありません。"
          },
          "kyb_sub_session_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "子KYBセッション（法人の当事者）。"
          },
          "kyb_sub_session_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User",
              null
            ],
            "description": "子KYBセッションのステータス。"
          },
          "kyb_sub_session_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "子KYBセッションのホスト型リンクです。`null`になる条件は`kyc_session_url`と同じです。"
          },
          "kyb_sub_session_deleted": {
            "type": "boolean",
            "description": "`kyc_session_deleted`の法人当事者版。"
          },
          "verification_workflow_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "kyc",
              "kyb",
              "adaptive_age_verification",
              "biometric_authentication",
              "address_verification",
              "questionnaire_verification",
              "email_verification",
              "phone_verification",
              null
            ],
            "description": "子セッションが実行するワークフローの種類。"
          },
          "verification_workflow_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "子セッションが実行するワークフロー。"
          },
          "verification_workflow_label": {
            "type": "string",
            "nullable": true,
            "description": "そのワークフローのラベル。"
          },
          "verification_workflow_features": {
            "type": "array",
            "nullable": true,
            "description": "子セッションのワークフローに含まれる機能と、その現在のステータスです。",
            "items": {
              "type": "object",
              "required": [
                "feature",
                "status"
              ],
              "properties": {
                "feature": {
                  "type": "string",
                  "description": "機能コード。例: `ID_VERIFICATION`、`LIVENESS`。"
                },
                "status": {
                  "type": "string",
                  "description": "機能のステータス。実行されるまでは`Not Finished`です。"
                }
              }
            }
          },
          "didit_internal_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "認証された人物のDidit識別子です（判明した時点で設定されます）。"
          }
        }
      },
      "TravelRuleDelivery": {
        "type": "object",
        "description": "移転が相手側に送るべき最新メッセージの状況です。Diditは、移転を作成または変更したリクエストがレスポンスを返した後に取引相手に連絡するため、このオブジェクトはそのメッセージが届いたかどうかを示します。キュー待ち、送信中、エラー後の再試行待ち、配信済み、または失敗のいずれかです。ネットワークが回復する可能性のある失敗（時間内に応答がない、接続の失敗、HTTP `408`、`429`、`5xx`）は、30秒後、2分後、10分後、30分後、1時間後に再試行されます。最初のメッセージ（`kind: SEND`）が、ネットワークに拒否された、または6回目の試行も失敗したために最終的に失敗した場合、移転は`COUNTERPARTY_VASP_NOT_REACHABLE`に移行し、その`timeline`に`last_error`が記録されます。それ以外のメッセージが最終的に失敗した場合は、`timeline`に記録されます。やり取りそのものについては、引き続き移転の`status`が信頼できる情報源です。",
        "required": [
          "kind",
          "status",
          "rail",
          "attempts",
          "last_error",
          "next_attempt_at",
          "delivered_at"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "SEND",
              "ANSWER",
              "TXID",
              "CANCEL",
              "POLL"
            ],
            "description": "メッセージが運ぶ内容です。`SEND`: 送金における取引相手への最初のメッセージです（送信。経路は送信時に選択されます）。`ANSWER`: お客様の承認または拒否で、問い合わせてきたネットワークに返す必要があります（受信）。`TXID`: お客様が送金を完了した後の、オンチェーンの取引ハッシュです。`CANCEL`: お客様が送金をキャンセルした後の、キャンセル通知です。`POLL`: ステータス照会を提供するネットワークへの照会で、送金が取引相手を待っている間、5分ごとに繰り返されます。"
          },
          "status": {
            "type": "string",
            "enum": [
              "QUEUED",
              "SENDING",
              "RETRYING",
              "DELIVERED",
              "FAILED"
            ],
            "description": "`QUEUED`：送信待ちです。`SENDING`：送信を試行中です。`RETRYING`：試行が失敗し、次の試行は`next_attempt_at`に実行されます。`DELIVERED`：相手側がメッセージを受け取りました。`FAILED`：相手側がメッセージを拒否したか、最後の試行が失敗しました。"
          },
          "rail": {
            "type": "string",
            "enum": [
              "INTERNAL",
              "TRP",
              "GTR",
              "TRUST",
              "VERIFYVASP",
              "SYGNA",
              "EMAIL",
              ""
            ],
            "description": "メッセージを運ぶレール。最初のメッセージについてDiditがレールを選択するまでは空です。"
          },
          "attempts": {
            "type": "integer",
            "minimum": 0,
            "description": "このメッセージでこれまでに行われた試行回数。ステータスポーリング以外のメッセージは最大6回まで試行されます。"
          },
          "last_error": {
            "type": "string",
            "description": "最後の試行で発生した失敗の種類です。失敗がない場合は`\"\"`です。例：`email undeliverable`、`trp identity endpoint unreachable`、`trp transfer inquiry delivery failed`。取引相手自身の回答が含まれることはなく、その回答は送金の`timeline`に残ります。\nGTRがエラーを返した場合は、GTR自身のステータスコードとメッセージが含まれます。レスポンス本文が含まれることはありません。",
            "example": "email undeliverable"
          },
          "next_attempt_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "メッセージが`QUEUED`または`RETRYING`の間に、次の試行が実行される日時。"
          },
          "delivered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "相手側がメッセージを受け取った日時。"
          }
        }
      },
      "TravelRuleDiscoveryStep": {
        "type": "object",
        "description": "Diditがアウトバウンド送金のために実行した取引相手探索の1ステップで、実行された順に並びます。ルートを持つVASPを特定した最初のステップでチェーンが終了します。",
        "properties": {
          "step": {
            "type": "string",
            "enum": [
              "internal_address_book",
              "wallet_attribution",
              "network_lookup",
              "customer_hint",
              "end_user"
            ],
            "description": "`internal_address_book`: 送付先ウォレットの管理権を証明した別のDidit顧客。`wallet_attribution`: ウォレットのブロックチェーン分析による帰属情報。`network_lookup`: どのVASPがそのアドレスを保有しているかを回答できるネットワーク。`customer_hint`: `beneficiary_data`で送信したVASP名、LEIまたは法域。`end_user`: エンドユーザー（またはお客様）が選択した取引相手、または選択の依頼。"
          },
          "outcome": {
            "type": "string",
            "enum": [
              "match",
              "miss",
              "skipped"
            ],
            "description": "`match`: ステップが取引相手を特定しました。`miss`: 実行されましたが見つかりませんでした。`skipped`: 実行できず、`reason`に理由が示されます。"
          },
          "reason": {
            "type": "string",
            "description": "機械可読な理由です。一致した場合は`\"\"`になります。値は`no_proven_internal_wallet`、`attribution_disabled`、`already_attributed`、`no_attributed_entity`、`directory_match_no_route`、`gtr_address_lookup_runs_on_dispatch`、`no_membership`、`network_switched_off`、`no_network_address_lookup`、`no_directory_match`、`awaiting_end_user`、`picked_member_without_proven_wallet`のいずれかです。"
          },
          "vasp": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "ステップでVASPが指定された場合の、そのディレクトリ上のVASPです。"
          },
          "rail": {
            "type": "string",
            "nullable": true,
            "description": "ステップで取引相手が見つかった場合に、その取引相手に届くレール。"
          },
          "at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TravelRuleNextAction": {
        "type": "object",
        "description": "`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`の送金を先に進める要素1つです。[送金が停止している理由](/ja/transaction-monitoring/travel-rule#送金が停止している理由)を参照してください。",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "select_counterparty_vasp",
              "declare_self_hosted",
              "add_vasp_hint",
              "update_compliance_email",
              "resend"
            ],
            "description": "`select_counterparty_vasp`: エンドユーザーがウォレット所有権ウィジェットで送金先のVASPを選択するか、お客様が`action=beneficiary_vasp`でPATCHします。`declare_self_hosted`: エンドユーザーがウィジェットでウォレットをセルフホスト型として申告します。`add_vasp_hint`: VASP名、LEI、またはトラベルアドレス（例: 送金先ウォレットのアドレス帳エントリーの`travel_address`）で取引相手をDiditに伝え、再送信します。`update_compliance_email`と`resend`は`PATCH /v3/transactions/{transaction_id}/travel-rule/`の`action`値で、それぞれ取引相手のコンプライアンス用メールアドレスを再度指定し、ルーティングを再実行します。"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "ウォレット所有権ウィジェットのリンク。取引にウィジェットセッションが開いている間、`select_counterparty_vasp`と`declare_self_hosted`で返されます。"
          }
        },
        "required": [
          "action"
        ]
      },
      "TransactionTravelRule": {
        "type": "object",
        "description": "取引のトラベルルール送金です。`GET /v3/transactions/{transaction_id}/`、`POST /v3/transactions/`の`201`、および`GET /v3/transactions/`の各行で返されます。`direction`、`rail`、`counterparty_vasp`、`delivery`、`discovery`、`reason`、`next_actions`は`PATCH /v3/transactions/{transaction_id}/travel-rule/`と同じ形式のため、取引を1回読み取るだけで、送金が停滞している理由と、先へ進めるための操作がわかります。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string"
          },
          "protocol": {
            "type": "string",
            "nullable": true
          },
          "required": {
            "type": "boolean"
          },
          "obligations_count": {
            "type": "integer"
          },
          "originator_data": {
            "type": "object",
            "description": "送金人当事者です。受信する送金の場合、取引相手の値は所有権が確認されるまでマスクされます。"
          },
          "beneficiary_data": {
            "type": "object",
            "description": "受取人の当事者情報。受信側の送金では、所有権が確認されるまで取引相手の値はマスクされます。"
          },
          "name_match": {
            "type": "object",
            "nullable": true,
            "description": "送金の判定を決めた氏名比較(スコアと厳格度)です。比較が実行されるまではnullです。比較された名前は当事者とともにマスクされます。"
          },
          "data_match": {
            "$ref": "#/components/schemas/TravelRuleDataMatch"
          },
          "mismatched_fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`data_match.mismatched_fields`のショートカット。相違がない場合は空です。"
          },
          "data_unmasked": {
            "$ref": "#/components/schemas/TravelRuleDataUnmasked"
          },
          "data_masked": {
            "type": "boolean",
            "description": "このレスポンスで取引相手の個人データがマスクされている間はtrueです。"
          },
          "metadata": {
            "type": "object"
          },
          "direction": {
            "type": "string",
            "enum": [
              "INBOUND",
              "OUTBOUND"
            ],
            "description": "この送金がやり取りのどちら側にあたるか。"
          },
          "rail": {
            "type": "string",
            "nullable": true,
            "description": "送金に使われたレール: `INTERNAL`、`TRP`、`GTR`、`TRUST`、`VERIFYVASP`、`SYGNA`または`EMAIL`（サンドボックスのアプリケーションでDidit Test VASPが応答した場合は`TEST_VASP`）。レールが選択されるまでは`null`です。"
          },
          "counterparty_vasp": {
            "type": "object",
            "nullable": true,
            "properties": {
              "name": {
                "type": "string"
              },
              "lei": {
                "type": "string"
              },
              "dd_score": {
                "type": "integer",
                "description": "0から100までのデューデリジェンススコアで、値が高いほど良好です。VASPディレクトリと同じ尺度です。"
              },
              "dd_score_breakdown": {
                "type": "object",
                "description": "dd_scoreへのコンポーネントごとの寄与。VASPディレクトリと同様に、コンポーネント（jurisdiction、verification、protocol、lei、history、essentials、responsiveness）ごとに1つのオブジェクトがあり、それぞれ{points, max, reason, detail}を含みます。取引相手が評価されるまでは{}です。",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "points": {
                      "type": "number",
                      "description": "このコンポーネントに付与されるポイント。"
                    },
                    "max": {
                      "type": "integer",
                      "description": "このコンポーネントが付与できる最大ポイントです。"
                    },
                    "reason": {
                      "type": "string",
                      "description": "コンポーネントの判定を示す機械可読コード。"
                    },
                    "detail": {
                      "type": "string",
                      "description": "付与されたポイントの理由を示す、人が読める形式の説明。"
                    }
                  }
                }
              },
              "dd_assessed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "デューデリジェンス評価が最後に実行された日時。取引相手が評価されるまではnull。"
              }
            },
            "description": "取引相手のディレクトリエントリ。送金に紐付けられたものがない場合は`null`です。"
          },
          "delivery": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleDelivery"
              }
            ],
            "description": "この送金が他の当事者に送信する義務を負う最新のメッセージ。一度も義務が生じていない場合（例: `threshold_amount`未満の場合や、申告済みのセルフホスト型ウォレットの場合）は`null`です。"
          },
          "discovery": {
            "type": "array",
            "description": "Diditが取引相手をどのように探索したかを示します。実行されたステップごとに1エントリです。受信送金など、探索が実行されなかった場合は空です。",
            "items": {
              "$ref": "#/components/schemas/TravelRuleDiscoveryStep"
            }
          },
          "reason": {
            "type": "string",
            "description": "`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`の送金が停止している理由です。その他のステータスでは`\"\"`です。`COUNTERPARTY_VASP_NOT_REACHABLE`の場合に限り、配信の失敗がまず理由を決定します：`email_undeliverable`（メールプロバイダーがコンプライアンスメールを拒否し、試行できるアドレスが残っていない。送信時、リマインダー時、または後から報告された恒久的なバウンスのいずれか）または`delivery_failed`（配信中のレールが完全に失敗した。ネットワークレールがメッセージを拒否したか再試行回数を使い切った、`TRP`のIDホストが応答しなかった、または取引相手の`TRP`ホストが照会を受け付けなかった）。それ以外の場合は`discovery`トレースが理由を決定します：`awaiting_end_user`（Diditが到達できる取引相手を指定したステップがない）、`directory_match_no_route`（ステップが経路のないディレクトリ上のVASPを指定した）、`picked_member_without_proven_wallet`（エンドユーザーが、ウォレットの管理を証明していないDiditの顧客を選択した）、またはトレースが他の理由を示さない場合は`no_directory_match`です。再送すると送金が先に進むため、理由はクリアされます。[送金が停止する理由](/ja/transaction-monitoring/travel-rule#送金が停止している理由)を参照してください。"
          },
          "next_actions": {
            "type": "array",
            "description": "送金を先に進めるためのアクションです。`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`以外のステータスでは`[]`です。`email_undeliverable`では`update_compliance_email`、次に`resend`が提示されます。`delivery_failed`では`resend`が提示されます。検出に関する理由では`select_counterparty_vasp`、`declare_self_hosted`、`add_vasp_hint`、`resend`が提示されます。",
            "items": {
              "$ref": "#/components/schemas/TravelRuleNextAction"
            }
          },
          "chain_details": {
            "$ref": "#/components/schemas/TravelRuleChainDetails"
          }
        }
      },
      "NetworkListCounts": {
        "type": "object",
        "description": "リストのビューとフィルターオプションごとのネットワーク数で、各ネットワークは1回だけカウントされます。`summary`が`false`でない場合にのみ返されます。`scopes`は、アプリケーションから参照可能なすべてのネットワークをカウントします。`views`は、選択した`scope`内の参照可能なネットワークをカウントします。`facets`は、選択した`scope`と`status`ビュー内のネットワークをカウントします（棄却済みのネットワークは、`status`に含まれていない限り除外されます）。その他のリストフィルターは、これらのカウントに影響しません。",
        "properties": {
          "scopes": {
            "type": "object",
            "description": "プロダクト別の表示可能なネットワーク。",
            "properties": {
              "all": {
                "type": "integer"
              },
              "identity": {
                "type": "integer",
                "description": "その他すべてのネットワークです。"
              },
              "transactions": {
                "type": "integer",
                "description": "メンバー全員が取引の当事者であるネットワーク。"
              }
            }
          },
          "views": {
            "type": "object",
            "description": "選択した`scope`内で表示可能なネットワークのステータス別の内訳と、2つの保存済みビュー。",
            "properties": {
              "all": {
                "type": "integer"
              },
              "active": {
                "type": "integer"
              },
              "in_review": {
                "type": "integer"
              },
              "resolved": {
                "type": "integer"
              },
              "dismissed": {
                "type": "integer"
              },
              "mine": {
                "type": "integer",
                "description": "呼び出し元のコンソールメンバーに割り当てられたネットワーク。APIキーの場合は常に0です。"
              },
              "high_risk": {
                "type": "integer",
                "description": "リスクスコアが80以上で、棄却されていないネットワーク。"
              }
            }
          },
          "facets": {
            "type": "object",
            "description": "選択した`scope`とステータスビュー内における、各フィルターオプションの件数。",
            "properties": {
              "total": {
                "type": "integer",
                "description": "選択した`scope`とステータスビュー内のネットワーク。"
              },
              "last_activity_days": {
                "type": "object",
                "description": "過去7日、30日、90日にアクティビティがあったネットワーク。日数をキーとします。",
                "properties": {
                  "7": {
                    "type": "integer"
                  },
                  "30": {
                    "type": "integer"
                  },
                  "90": {
                    "type": "integer"
                  }
                }
              },
              "risk_min": {
                "type": "object",
                "description": "リスクスコアが50以上および80以上のネットワーク。しきい値をキーとします。",
                "properties": {
                  "50": {
                    "type": "integer"
                  },
                  "80": {
                    "type": "integer"
                  }
                }
              },
              "signal_types": {
                "type": "object",
                "description": "各タイプのシグナルを少なくとも1つずつ持つネットワーク。",
                "properties": {
                  "ip_address": {
                    "type": "integer"
                  },
                  "device": {
                    "type": "integer"
                  },
                  "face": {
                    "type": "integer"
                  },
                  "document_number": {
                    "type": "integer"
                  },
                  "phone": {
                    "type": "integer"
                  },
                  "email": {
                    "type": "integer"
                  },
                  "address": {
                    "type": "integer"
                  }
                }
              },
              "priority": {
                "type": "object",
                "description": "優先度別のネットワーク。`none`は優先度が設定されていないネットワークをカウントします。",
                "properties": {
                  "low": {
                    "type": "integer"
                  },
                  "medium": {
                    "type": "integer"
                  },
                  "high": {
                    "type": "integer"
                  },
                  "none": {
                    "type": "integer"
                  }
                }
              },
              "assignee": {
                "type": "object",
                "description": "担当者別のネットワーク。",
                "properties": {
                  "me": {
                    "type": "integer",
                    "description": "呼び出し元のコンソールメンバーに割り当て済み。APIキーの場合は常に0です。"
                  },
                  "unassigned": {
                    "type": "integer",
                    "description": "誰にも割り当てられていません。"
                  },
                  "users": {
                    "type": "array",
                    "description": "担当者ごとに1エントリーで、ネットワーク数の多い順に並びます。",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "full_name": {
                          "type": "string",
                          "description": "担当者の名前。名前が設定されていない場合はメールアドレス。"
                        },
                        "email": {
                          "type": "string"
                        },
                        "count": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              },
              "has_case": {
                "type": "integer",
                "description": "このアプリケーションがケースを開いたネットワーク。"
              },
              "min_size": {
                "type": "object",
                "description": "メンバーが10人以上のネットワーク。最小サイズをキーとします。",
                "properties": {
                  "10": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "NetworkTag": {
        "type": "object",
        "description": "ネットワーク上のアプリケーションのタグのいずれか1つです。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "タグのUUID。`tag_uuid`として渡す値と同じです。"
          },
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "description": "16進カラーコードです。例: `#6366F1`。"
          },
          "source": {
            "type": "string",
            "enum": [
              "didit",
              "custom"
            ],
            "description": "Diditのプリセットタグの場合は`didit`、チームが作成したタグの場合は`custom`。"
          },
          "added_by": {
            "type": "string",
            "nullable": true,
            "description": "タグを追加したコンソールメンバーのメールアドレス。APIキーで追加された場合はnull。"
          },
          "added_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "NetworkOutcomes": {
        "type": "object",
        "description": "ネットワーク内の個人と企業の状況です。閲覧可能な各メンバーは、判定に至った最新の検証のステータスに基づいて1回ずつカウントされます。取引の当事者はカウントされません。",
        "properties": {
          "approved": {
            "type": "integer",
            "description": "直近の判定済みの認証が承認済みのメンバーです。"
          },
          "declined": {
            "type": "integer",
            "description": "直近の判定済みの認証が却下されたメンバーです。"
          },
          "in_review": {
            "type": "integer",
            "description": "直近の判定済みの認証がレビュー中のメンバーです。"
          },
          "total": {
            "type": "integer",
            "description": "判定済みかどうかにかかわらず、1件以上の認証があるメンバーです。すべての認証が未判定（未開始、進行中、期限切れ、または放棄）のメンバーはここでカウントされ、他のキーではカウントされません。"
          }
        }
      },
      "NetworkPatternScore": {
        "type": "object",
        "description": "ネットワーク全体で、メンバーの特定の種類のデータがどの程度類似しているかを示します。パターンはシグナルではありません。共有された値によってメンバーが結び付けられているわけではありません。",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "background"
            ],
            "description": "`background`：人物部分をマスクした状態での、メンバーのセルフィー背景のすべてのペアの平均類似度です。各人物の最新のセルフィーを読み取り（最大で最新の50件）、年齢確認セッションは除外します。対象はお使いのアプリケーションのメンバーだけでなく、ネットワーク全体です。"
          },
          "score": {
            "type": "number",
            "nullable": true,
            "minimum": 0,
            "maximum": 1,
            "description": "0から1の範囲で、小数点以下4桁に丸められます。`reason`が設定されている場合はnullです。"
          },
          "members": {
            "type": "integer",
            "nullable": true,
            "description": "スコアで比較したメンバーのセルフィーの数。読み取れないセルフィーや、背景の写りが少なすぎるセルフィーは比較されません。`computing`の間はnull、`not_enough_selfies`の場合は0または1です。"
          },
          "reason": {
            "type": "string",
            "enum": [
              "computing",
              "not_enough_selfies"
            ],
            "nullable": true,
            "description": "スコアがない理由。`computing`：現在のメンバーのスコアを計算中です。後でネットワークを再度読み取ってください。`not_enough_selfies`：使用可能なセルフィーを持つメンバーが2人未満です。スコアがある場合はnullです。"
          },
          "computed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "スコアが算出された日時。`computing`の間はnullです。"
          }
        }
      },
      "NetworkDetailResponse": {
        "description": "ネットワークの詳細に加え、組織の共有モード、組織横断のシグナルが組織に適用されるかどうか、ネットワークに対するアプリケーションのタグ、メンバーの結果、パターンスコアです。",
        "allOf": [
          {
            "$ref": "#/components/schemas/NetworkDetail"
          },
          {
            "type": "object",
            "properties": {
              "sharing_mode": {
                "type": "string",
                "enum": [
                  "off",
                  "private",
                  "global"
                ],
                "description": "組織の組織間共有モード。`global`のみが組織をまたいでネットワークを比較します。`private`と`off`では、比較は組織自身の履歴内に限定されます。",
                "example": "global"
              },
              "cross_org_available": {
                "type": "boolean",
                "description": "この組織に組織横断シグナルが適用されるかどうかです。Enterpriseプランと`global`共有モードの両方が必要です。",
                "example": true
              },
              "cross_org_unavailable_reason": {
                "type": "string",
                "enum": [
                  "plan",
                  "sharing_mode"
                ],
                "nullable": true,
                "description": "組織間シグナルが適用されない理由。以下の順にチェックされます。`plan`：組織のプランに組織間不正ネットワークが含まれていません（Enterpriseプランが必要です）。共有モードに関係なく該当します。`sharing_mode`：プランには含まれていますが、共有モードが`private`または`off`です。`cross_org_available`が`true`の場合はnullです。",
                "example": null
              },
              "tags": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NetworkTag"
                },
                "description": "ネットワーク上のお客様のアプリケーションのタグです。古い順に並びます。各アプリケーションには自身のタグのみが表示されます。`fraud_tags`はこれとは別で、変更されません。ネットワークのメンバーが持つタグです。"
              },
              "outcomes": {
                "$ref": "#/components/schemas/NetworkOutcomes"
              },
              "patterns": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NetworkPatternScore"
                },
                "description": "ネットワーク全体のパターンスコア。現在は`background`の1項目です。"
              }
            }
          }
        ]
      },
      "NetworkTagRequest": {
        "type": "object",
        "required": [
          "tag_uuid"
        ],
        "properties": {
          "tag_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "お使いのアプリケーションのタグのいずれかのUUIDです。"
          }
        },
        "example": {
          "tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
        }
      },
      "NetworkTimeline": {
        "title": "Default timeline (no contract)",
        "type": "object",
        "description": "`contract`を指定しない場合: ネットワーク自体のイベントを古い順に返し、ページネーションはありません。",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkTimelineEvent"
            }
          }
        }
      },
      "NetworkTimelinePage": {
        "title": "Typed timeline page (contract=2)",
        "type": "object",
        "description": "`contract=2`の場合：型付きイベントの1ページ分。新しい順です。",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkTypedTimelineEvent"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true,
            "description": "次のページを読み込むには`cursor`として渡します。最後のページではnullです。"
          }
        }
      },
      "NetworkTypedTimelineEvent": {
        "type": "object",
        "description": "型付きのタイムラインイベント1件です。4つのデフォルトフィールドに加えて、ID、Diditが保存した日時、所属するメンバーアカウントとレコード、そのイベントタイプの詳細ブロックを含みます。その他の詳細ブロックはnullです。",
        "properties": {
          "id": {
            "type": "string",
            "description": "`<source>:<uuid>`の形式で、タイムライン内で一意です。",
            "example": "session:3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "event_type": {
            "type": "string",
            "enum": [
              "network_detected",
              "signal_observed",
              "network_active",
              "network_in_review",
              "network_resolved",
              "network_dismissed",
              "verification_attempt",
              "transaction",
              "login",
              "rule_hit",
              "case_linked",
              "note_added"
            ]
          },
          "occurred_at": {
            "type": "string",
            "format": "date-time",
            "description": "発生日時。"
          },
          "ingested_at": {
            "type": "string",
            "format": "date-time",
            "description": "Diditが保存した日時です。"
          },
          "label": {
            "type": "string",
            "description": "短い英語のラベル。例として`Verification attempt 2 of 3`。"
          },
          "metadata": {
            "type": "object",
            "description": "ネットワーク自体のイベントの場合、デフォルトのタイムラインと同じメタデータです。それ以外の場合は空です。"
          },
          "account": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineAccount"
              }
            ],
            "nullable": true,
            "description": "メンバーアカウントです。ネットワーク自身のイベント、`case_linked`、`note_added`の場合はnullです。"
          },
          "source_ref": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineSourceRef"
              }
            ],
            "nullable": true,
            "description": "ソースレコード。ネットワーク自身のイベントと`note_added`ではnullです。"
          },
          "verification_attempt": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineAttempt"
              }
            ],
            "nullable": true,
            "description": "`verification_attempt`イベントで設定されます。"
          },
          "transaction": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineTransaction"
              }
            ],
            "nullable": true,
            "description": "`transaction`イベントで設定されます。"
          },
          "login": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineLogin"
              }
            ],
            "nullable": true,
            "description": "`login`イベントで設定されます。"
          },
          "rule_hit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineRuleHit"
              }
            ],
            "nullable": true,
            "description": "`rule_hit`イベントで設定されます。"
          },
          "case_linked": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineCaseLinked"
              }
            ],
            "nullable": true,
            "description": "`case_linked`イベントで設定されます。"
          },
          "note_added": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineNoteAdded"
              }
            ],
            "nullable": true,
            "description": "`note_added`イベントで設定されます。APIキーに対しては決して返されません。"
          }
        }
      },
      "NetworkTimelineAccount": {
        "type": "object",
        "description": "イベントが属するメンバーアカウントです。",
        "properties": {
          "node_id": {
            "type": "string",
            "description": "`<kind>:<uuid>`の形式で、kindは`vendor_user`、`vendor_business`、`transaction_party`のいずれかです。",
            "example": "vendor_user:3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "node_type": {
            "type": "string",
            "enum": [
              "account",
              "business_account",
              "transaction_party"
            ]
          },
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true
          },
          "display_name": {
            "type": "string",
            "nullable": true
          },
          "ownership": {
            "type": "string",
            "enum": [
              "owned",
              "organization"
            ],
            "description": "呼び出したアプリケーションにレコードが属する場合は`owned`です（コンソールメンバーの場合は、そのメンバーに権限が付与されたアプリケーション）。組織内の別のアプリケーションに属する場合は`organization`です。"
          },
          "route": {
            "$ref": "#/components/schemas/NetworkTimelineRoute"
          }
        }
      },
      "NetworkTimelineSourceRef": {
        "type": "object",
        "description": "イベントの読み取り元のレコード。",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "session",
              "business_session",
              "transaction",
              "monitoring_event",
              "case"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "ownership": {
            "type": "string",
            "enum": [
              "owned",
              "organization"
            ],
            "description": "呼び出したアプリケーションにレコードが属する場合は`owned`です（コンソールメンバーの場合は、そのメンバーに権限が付与されたアプリケーション）。組織内の別のアプリケーションに属する場合は`organization`です。"
          },
          "route": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineRoute"
              }
            ],
            "description": "`monitoring_event`と`case`では含まれません。"
          }
        }
      },
      "NetworkTimelineRoute": {
        "type": "object",
        "description": "レコードの冒頭部分です。種類、UUID、所属するアプリケーションを示します。",
        "properties": {
          "kind": {
            "type": "string",
            "description": "アカウントの場合は`user`、`business`、`transaction_party`のいずれか、ソースレコードの場合は`session`、`business_session`、`transaction`のいずれかです。"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "application_id": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "NetworkTimelineAttempt": {
        "type": "object",
        "description": "アカウントの認証セッション1件です。",
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "セッションのUUID。法人の場合は企業セッションのUUID。"
          },
          "session_number": {
            "type": "integer",
            "nullable": true
          },
          "attempt": {
            "type": "integer",
            "description": "アカウントのセッションのうち、作成順でのこのセッションの位置。"
          },
          "attempt_count": {
            "type": "integer",
            "description": "アカウントが保有するセッションの数。"
          },
          "status": {
            "type": "string",
            "description": "セッションのステータス（例：`Approved`、`Declined`）。"
          },
          "status_changed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "decline_reasons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkTimelineDeclineReason"
            },
            "description": "却下されたセッションのみ：その警告を古い順に、警告ごとに1回ずつ示します。それ以外の場合は空です。"
          }
        }
      },
      "NetworkTimelineDeclineReason": {
        "type": "object",
        "properties": {
          "risk": {
            "type": "string",
            "description": "警告コード。"
          },
          "feature": {
            "type": "string",
            "description": "警告を発生させた機能です。"
          },
          "short_description": {
            "type": "string"
          }
        }
      },
      "NetworkTimelineTransaction": {
        "type": "object",
        "description": "メンバーアカウントが関与した取引。取引日の日付が付きます。",
        "properties": {
          "transaction_id": {
            "type": "string",
            "format": "uuid"
          },
          "transaction_number": {
            "type": "integer",
            "nullable": true
          },
          "transaction_type": {
            "type": "string"
          },
          "action_type": {
            "type": "string"
          },
          "amount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineAmount"
              }
            ],
            "nullable": true,
            "description": "取引に金額がない場合はnullです。"
          },
          "status": {
            "type": "string"
          },
          "decision_reason_code": {
            "type": "string",
            "nullable": true
          },
          "decision_reason_label": {
            "type": "string",
            "nullable": true
          },
          "party_role": {
            "type": "string",
            "description": "取引におけるアカウントの役割: `APPLICANT`、`REMITTER`、`BENEFICIARY`または`COUNTERPARTY`。"
          }
        }
      },
      "NetworkTimelineAmount": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "文字列形式の10進数の金額。"
          },
          "currency": {
            "type": "string"
          },
          "direction": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "NetworkTimelineLogin": {
        "type": "object",
        "description": "イベントAPIを通じて本人について送信したサインインイベント。",
        "properties": {
          "action": {
            "type": "string",
            "description": "`<event_category>.<action_type>`の形式です。サインインは`auth.login`または`security.login_succeeded`、失敗したサインインは`auth.login_failed`または`security.login_failed`です。"
          },
          "succeeded": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "description": "イベントのステータスです。"
          },
          "ip": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineIP"
              }
            ],
            "nullable": true,
            "description": "イベントにIPアドレスがない場合はnullです。"
          },
          "device": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NetworkTimelineDevice"
              }
            ],
            "nullable": true,
            "description": "イベントにデバイスフィンガープリントまたはコンテキストがない場合はnullです。"
          },
          "is_first_login": {
            "type": "boolean",
            "description": "記録上、そのアカウントで最初にサインインに成功した日時。"
          },
          "is_new_device": {
            "type": "boolean",
            "description": "アカウントの過去に成功したどのサインインとも異なるデバイスからの、成功したサインイン。初回のサインインでは決してtrueになりません。"
          }
        }
      },
      "NetworkTimelineIP": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "country_code": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "connection_type": {
            "type": "string",
            "nullable": true,
            "description": "住所の接続タイプのラベル(自由記述)。"
          },
          "is_vpn_or_tor": {
            "type": "boolean"
          },
          "is_data_center": {
            "type": "boolean"
          }
        }
      },
      "NetworkTimelineDevice": {
        "type": "object",
        "properties": {
          "fingerprint": {
            "type": "string",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true,
            "description": "イベントのデバイスコンテキストから生成された読みやすいデバイスラベル。"
          }
        }
      },
      "NetworkTimelineRuleHit": {
        "type": "object",
        "description": "メンバーの取引またはイベントに一致した稼働中のルール。テストモードでの一致は含まれません。",
        "properties": {
          "rule_id": {
            "type": "string",
            "format": "uuid"
          },
          "rule_title": {
            "type": "string"
          },
          "rule_category": {
            "type": "string"
          },
          "rule_source": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "nullable": true
          },
          "score_delta": {
            "type": "integer"
          },
          "status_target": {
            "type": "string",
            "nullable": true
          },
          "action_summary": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "NetworkTimelineCaseLinked": {
        "type": "object",
        "description": "組織内のネットワークに対して開かれたケース。`source_ref.ownership`は、呼び出したアプリケーションに属するかどうかを示します。",
        "properties": {
          "case_id": {
            "type": "string",
            "format": "uuid"
          },
          "case_number": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "author_email": {
            "type": "string",
            "nullable": true
          },
          "author_name": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "NetworkTimelineNoteAdded": {
        "type": "object",
        "description": "ネットワーク上に残されたメモ。メモの本文は含まれません。",
        "properties": {
          "note_id": {
            "type": "string",
            "format": "uuid"
          },
          "author_email": {
            "type": "string"
          }
        }
      },
      "FeatureStatusOverride": {
        "type": "object",
        "description": "`PATCH /v3/session/{sessionId}/features/{nodeId}/update-status/`で行ったチェック（機能）ステータスの上書き1件です。何を変更するか、適用済みか、まだ本人がフローを完了するのを待っているか、誰がなぜ依頼したかを示します。",
        "required": [
          "id",
          "node_id",
          "feature_type",
          "feature_model",
          "previous_status",
          "new_status",
          "state",
          "forced",
          "reason",
          "requested_by",
          "requested_at",
          "applied_at",
          "cancelled_at",
          "cancel_reason"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "オーバーライドの識別子。キャンセル用エンドポイントに渡してください。",
            "example": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
          },
          "node_id": {
            "type": "string",
            "description": "リクエストで指定されたワークフローのノード(ノードのないステップの場合は`default`)。",
            "example": "feature_ocr_1"
          },
          "feature_type": {
            "type": "string",
            "description": "リクエストで渡された`feature_type`です。何も渡されなかった場合は空文字列です。",
            "example": ""
          },
          "feature_model": {
            "type": "string",
            "description": "オーバーライドされたチェックの種類です。例：`KYC`、`Face`、`AML`、`GeolocationCheck`。",
            "example": "KYC"
          },
          "previous_status": {
            "type": "string",
            "enum": [
              "Not Finished",
              "Approved",
              "Declined",
              "In Review",
              "Resub Requested"
            ],
            "description": "オーバーライドがリクエストされた時点のチェックのステータス。",
            "example": "In Review"
          },
          "new_status": {
            "type": "string",
            "enum": [
              "Approved",
              "Declined",
              "In Review"
            ],
            "description": "オーバーライドが設定するステータス。",
            "example": "Approved"
          },
          "state": {
            "type": "string",
            "enum": [
              "applied",
              "pending_until_flow_finishes",
              "cancelled"
            ],
            "description": "`applied`：チェックに新しいステータスが適用されています。`pending_until_flow_finishes`：上書きは待機し、本人がフローを完了した時点で適用されます。`cancelled`：待機したものの、適用されることはありませんでした（`cancel_reason`を参照）。",
            "example": "applied"
          },
          "forced": {
            "type": "boolean",
            "description": "本人がまだフロー内にいる間にオーバーライドが即座に適用された場合は`true`です。",
            "example": false
          },
          "reason": {
            "type": "string",
            "nullable": true,
            "description": "リクエストとともに送信された`comment`、または`null`です。",
            "example": "Document manually verified by compliance."
          },
          "requested_by": {
            "type": "object",
            "nullable": true,
            "description": "オーバーライドを要求した者です。不明な場合は`null`です。",
            "properties": {
              "email": {
                "type": "string",
                "format": "email",
                "nullable": true,
                "description": "コンソールユーザーのメールアドレス。APIキーおよびシステムの場合は`null`。",
                "example": "reviewer@example.com"
              },
              "name": {
                "type": "string",
                "nullable": true,
                "description": "リクエスト者の表示名、または`null`です。",
                "example": "Alex Reviewer"
              },
              "type": {
                "type": "string",
                "enum": [
                  "CONSOLE_USER",
                  "API_KEY",
                  "SYSTEM"
                ],
                "description": "リクエストを行った主体：コンソールユーザー、APIキー、またはDidit自身。",
                "example": "CONSOLE_USER"
              }
            }
          },
          "requested_at": {
            "type": "string",
            "format": "date-time",
            "description": "オーバーライドがリクエストされた日時。",
            "example": "2026-10-13T09:15:00Z"
          },
          "applied_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "チェックが新しいステータスになった日時。待機中、またはキャンセルされた後は`null`。",
            "example": "2026-10-13T09:15:00Z"
          },
          "cancelled_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "待機中のオーバーライドがキャンセルされた日時、または`null`。",
            "example": null
          },
          "cancel_reason": {
            "type": "string",
            "nullable": true,
            "enum": [
              "cancelled_by_reviewer",
              "replaced",
              "check_changed",
              "session_closed",
              null
            ],
            "description": "待機中のオーバーライドが適用されなかった理由、または`null`。`cancelled_by_reviewer`：キャンセル用エンドポイントでキャンセルされました。`replaced`：同じチェックに対する新しいオーバーライドに置き換えられました。`check_changed`：本人がフローを完了する前にチェックをやり直しました。`session_closed`：本人がフローを完了する前に、セッションがフローを離れました（放棄、期限切れ、またはフロー途中での判定）。",
            "example": null
          }
        }
      },
      "SandboxSimulateRequest": {
        "type": "object",
        "description": "サンドボックスセッションのステータスを強制的に設定します。すべてのフィールドは任意ですが、`new_status`、`scenario`、`risk`のうち少なくとも1つが必要です。",
        "properties": {
          "new_status": {
            "type": "string",
            "enum": [
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned"
            ],
            "description": "設定するステータス。省略した場合はリスクケースのデフォルトステータス（`risk`、またはシナリオのマジック値が持つ最初のリスク）になり、それがない場合はシナリオのデフォルトステータスになります。",
            "example": "Declined"
          },
          "comment": {
            "type": "string",
            "maxLength": 500,
            "description": "ステータス変更を記録するアクティビティエントリに追加されたメモ。",
            "example": "Testing the decline path"
          },
          "scenario": {
            "type": "string",
            "maxLength": 100,
            "description": "カタログにあるシナリオのスラッグ（`GET /v1/sandbox/scenarios/`）。デフォルトのステータスと、`risk`を指定しない場合はそのマジック値に伴う警告を提供します。不明なスラッグの場合は`400`が返されます。",
            "example": "decline_aml_hit"
          },
          "risk": {
            "type": "string",
            "maxLength": 128,
            "description": "カタログにあるリスクケース。その警告がセッションに追加され、ログタイプは`new_status`に従います。不明な値の場合は`400`が返されます。",
            "example": "POSSIBLE_MATCH_FOUND"
          },
          "node_id": {
            "type": "string",
            "maxLength": 128,
            "description": "リスク警告が紐付けられるワークフローノード。デフォルトはセッションの現在のノードです。",
            "example": "feature_aml_1"
          },
          "send_webhooks": {
            "type": "boolean",
            "default": true,
            "description": "`true`を指定すると、実際のステータス変更時と全く同じWebhookをサンドボックスアプリケーションの送信先に送信します。`status.updated`に加え、その変更によって発生する`user.status.updated` / `user.data.updated`（または`business.status.updated` / `business.data.updated`）イベントが、それらを購読している送信先に送られます。`false`を指定すると、ログの記録もWebhookの送信も行わずにステータスを変更します。未送信Webhookの復旧処理でもその判定は再送されません。コンソールは引き続きリアルタイムで更新され、セッションの次のステータス変更では通常どおりWebhookが送信されます。",
            "example": true
          }
        }
      },
      "SandboxSimulateResponse": {
        "type": "object",
        "required": [
          "session_id",
          "previous_status",
          "status",
          "scenario",
          "risk",
          "send_webhooks"
        ],
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "previous_status": {
            "type": "string",
            "enum": [
              "Not Started",
              "In Progress",
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned",
              "Kyc Expired",
              "Resubmitted",
              "Awaiting User"
            ],
            "description": "シミュレーション前のセッションのステータス。",
            "example": "In Progress"
          },
          "status": {
            "type": "string",
            "enum": [
              "Approved",
              "Declined",
              "In Review",
              "Expired",
              "Abandoned"
            ],
            "description": "シミュレーションが設定したステータス。",
            "example": "Declined"
          },
          "scenario": {
            "type": "string",
            "nullable": true,
            "description": "指定したシナリオのスラッグ、または`null`です。",
            "example": "decline_aml_hit"
          },
          "risk": {
            "type": "string",
            "nullable": true,
            "description": "適用されたリスクケース（`risk`、またはシナリオから取得されたもの）です。ない場合は`null`です。",
            "example": "POSSIBLE_MATCH_FOUND"
          },
          "send_webhooks": {
            "type": "boolean",
            "description": "シミュレーションで適用された`send_webhooks`の値です。",
            "example": false
          }
        }
      },
      "CaseTeamSummary": {
        "type": "object",
        "nullable": true,
        "description": "ケースを担当するレビューチームです。担当チームがない場合はnullです。ルーティングルールによってケースがいずれかのチームに割り当てられると、ルーティングにより設定されます。`PATCH .../cases/{case_uuid}/`（`team`）で変更またはクリアできます。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CaseChecker": {
        "type": "object",
        "nullable": true,
        "description": "保留中の解決を承認または却下するよう指名されたメンバーです。二者承認(four-eyes)方式の解決が指名されたチェッカーを待っている間のみ設定されます。保留中のものがない場合、保留中の解決がチェッカーキューで待機している間、および解決が承認、却下された後や、証拠が変更されたために新たなレビューに差し戻された後はnullです。",
        "properties": {
          "member_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "メンバーのユーザーuuidです。ケースを解決する際に`checker`として渡す値です。"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "メンバーの氏名です。不明な場合はnullです。"
          },
          "email": {
            "type": "string",
            "format": "email"
          }
        }
      },
      "ServiceStatusFeed": {
        "type": "object",
        "description": "公開のサービスステータスです。Diditの各サービスの状態、全体の状態、および進行中または過去7日間に解決されたインシデントを返します。",
        "required": [
          "status",
          "updated_at",
          "services",
          "incidents"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "operational",
              "degraded",
              "down"
            ],
            "description": "現時点でのいずれかのサービスの最も悪い状態。進行中のインシデントのみに基づいて決定されます。",
            "example": "degraded"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Diditがこのレスポンスを生成した日時（ISO 8601、UTC）です。レスポンスは30秒間キャッシュされるため、最大30秒前のものである場合があります。",
            "example": "2026-10-13T09:41:07.512345Z"
          },
          "services": {
            "type": "array",
            "description": "サービスごとに1エントリー。すべてのサービスが常に記載されます。",
            "items": {
              "$ref": "#/components/schemas/ServiceStatusService"
            }
          },
          "incidents": {
            "type": "array",
            "description": "`started_at`の新しい順。進行中のすべてのインシデントと、過去7日間に解決されたインシデント(解決済みは最大50件)を含みます。その期間に何も発生しなかった場合は空です。",
            "items": {
              "$ref": "#/components/schemas/ServiceStatusIncident"
            }
          }
        }
      },
      "ServiceStatusService": {
        "type": "object",
        "required": [
          "key",
          "name",
          "status"
        ],
        "properties": {
          "key": {
            "type": "string",
            "enum": [
              "service_id_verification",
              "service_liveness_face_match",
              "service_aml_screening",
              "service_kyb_registries",
              "service_database_validation",
              "service_phone_delivery",
              "service_email_delivery",
              "service_transaction_monitoring"
            ],
            "description": "安定したサービスキー。表示名ではなく、必ずこの値で照合してください。`service_id_verification`: 本人確認、`service_liveness_face_match`: ライブネス検知と顔照合、`service_aml_screening`: AMLスクリーニング、`service_kyb_registries`: KYB登記情報、`service_database_validation`: データベース検証、`service_phone_delivery`: 電話番号検証の配信、`service_email_delivery`: メールアドレス認証の配信、`service_transaction_monitoring`: トランザクションモニタリング。",
            "example": "service_database_validation"
          },
          "name": {
            "type": "string",
            "description": "サービスの英語の表示名。",
            "example": "Database validation"
          },
          "status": {
            "type": "string",
            "enum": [
              "operational",
              "degraded",
              "down"
            ],
            "description": "サービスに進行中のインシデントがない場合は`operational`、それ以外の場合は進行中のインシデントのうち最も深刻な状態です。",
            "example": "degraded"
          }
        }
      },
      "ServiceStatusIncident": {
        "type": "object",
        "required": [
          "id",
          "service",
          "service_name",
          "state",
          "status",
          "title",
          "body",
          "affected",
          "country_name",
          "started_at",
          "resolved_at",
          "duration_minutes"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "インシデントID。",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "service": {
            "type": "string",
            "enum": [
              "service_id_verification",
              "service_liveness_face_match",
              "service_aml_screening",
              "service_kyb_registries",
              "service_database_validation",
              "service_phone_delivery",
              "service_email_delivery",
              "service_transaction_monitoring"
            ],
            "description": "対象サービスのキー（`services[].key`を参照）。",
            "example": "service_database_validation"
          },
          "service_name": {
            "type": "string",
            "description": "影響を受けるサービスの英語の表示名。",
            "example": "Database validation"
          },
          "state": {
            "type": "string",
            "enum": [
              "degraded",
              "down"
            ],
            "description": "サービスへの影響。解決済みのインシデントは最後の状態を保持します。",
            "example": "degraded"
          },
          "status": {
            "type": "string",
            "enum": [
              "ongoing",
              "resolved"
            ],
            "description": "サービスが復旧するまでは`ongoing`、復旧後は`resolved`です。",
            "example": "ongoing"
          },
          "title": {
            "type": "string",
            "description": "英語の見出し。翻訳する場合は、`service`、`state`、`country_name`から独自のテキストを作成してください。",
            "example": "Database validation is degraded in Brazil."
          },
          "body": {
            "type": "string",
            "description": "英語の詳細行: チェックが遅延または失敗する可能性が生じた時刻、または復旧した時刻。",
            "example": "Checks against Brazil (CPF) may be slow or fail since 08:55 UTC."
          },
          "affected": {
            "type": "string",
            "description": "影響を受ける国またはレジストリ(例: `Brazil (CPF)`)。インシデントが国やレジストリに関連しない場合は空です。",
            "example": "Brazil (CPF)"
          },
          "country_name": {
            "type": "string",
            "description": "影響を受ける国(英語表記)。インシデントが国に関連しない場合は空です。",
            "example": "Brazil"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "description": "インシデントが開始した日時（ISO 8601、UTC）。",
            "example": "2026-10-13T08:55:00Z"
          },
          "resolved_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "サービスが復旧した日時（ISO 8601、UTC）。インシデントが継続中の間は`null`です。"
          },
          "duration_minutes": {
            "type": "integer",
            "nullable": true,
            "description": "`started_at`から`resolved_at`までの経過時間を分単位の整数で表したものです。インシデントが継続中の間は`null`です。"
          }
        }
      },
      "TravelRuleJoinInvitation": {
        "type": "object",
        "description": "何も入力される前に参加ページに表示される内容です。",
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "招待の送信先アドレス。"
          },
          "vasp_name": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "description": "招待の経路。例：`pickup`。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "prefill": {
            "type": "object",
            "properties": {
              "vasp_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true
              },
              "legal_name": {
                "type": "string"
              },
              "lei": {
                "type": "string"
              },
              "jurisdiction": {
                "type": "string"
              },
              "domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "TravelRuleJoinRegisterRequest": {
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "description": "招待の送信先となったメールアドレスである必要があります。"
          },
          "password": {
            "type": "string",
            "minLength": 8,
            "maxLength": 128
          }
        }
      },
      "TravelRuleJoinVerifyRequest": {
        "type": "object",
        "required": [
          "email",
          "code"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 254
          },
          "code": {
            "type": "string",
            "minLength": 6,
            "maxLength": 6,
            "description": "登録後にメールで送信される6文字のコード。"
          }
        }
      },
      "TravelRuleJoinCredentials": {
        "type": "object",
        "description": "新しい無料組織と、そのアプリケーションがAPIを呼び出すための認証情報です。",
        "properties": {
          "organization": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          "application": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          "client_id": {
            "type": "string"
          },
          "api_key": {
            "type": "string",
            "description": "ワークスペースのエンドポイントで`x-api-key`ヘッダーとして送信します。"
          }
        }
      },
      "TravelRuleWorkspaceClaimRequest": {
        "type": "object",
        "required": [
          "vasp_id"
        ],
        "properties": {
          "vasp_id": {
            "type": "string",
            "format": "uuid",
            "description": "このワークスペースに該当するディレクトリエントリです。IDは`GET /v3/travel-rule/vasps/`で確認できます。"
          }
        }
      },
      "TravelRuleWorkspaceDomainConfirmRequest": {
        "type": "object",
        "required": [
          "code"
        ],
        "properties": {
          "code": {
            "type": "string",
            "minLength": 6,
            "maxLength": 6
          }
        }
      },
      "TravelRuleWorkspaceBillingRequest": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "default": true,
            "description": "`true`のみ受け付けます。アウトバウンド請求をAPIで無効に戻すことはできません。"
          }
        }
      },
      "TravelRuleWorkspaceDomainCodeResponse": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "unverified",
              "code_sent",
              "verified"
            ]
          },
          "txt": {
            "$ref": "#/components/schemas/TravelRuleWorkspaceTxtRecord"
          }
        }
      },
      "TravelRuleWorkspaceTxtRecord": {
        "type": "object",
        "description": "DNS証明のために公開するTXTレコードです。証明が開始されるまでは空です。",
        "properties": {
          "host": {
            "type": "string",
            "example": "didit-tr-verify.example.com"
          },
          "value": {
            "type": "string"
          }
        }
      },
      "TravelRuleWorkspace": {
        "type": "object",
        "description": "無料で参加したアプリケーションの、無料のトラベルルールワークスペースです。",
        "properties": {
          "joined_free": {
            "type": "boolean"
          },
          "work_email": {
            "type": "string",
            "format": "email"
          },
          "joined_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "claim": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "unclaimed",
                  "pending_review",
                  "claimed",
                  "rejected"
                ]
              },
              "proved_by_domain": {
                "type": "boolean"
              },
              "claimed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "reviewed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "review_note": {
                "type": "string"
              },
              "vasp_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true
              },
              "vasp_name": {
                "type": "string"
              }
            }
          },
          "prefill": {
            "type": "object",
            "description": "ディレクトリエントリから取得したプロフィールの値:`vasp_id`、`legal_name`、`lei`、`jurisdiction`、`compliance_email`、`domains`。申請が行われるまで、何も書き込まれません。"
          },
          "domain": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "unverified",
                  "code_sent",
                  "verified"
                ]
              },
              "verified_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              },
              "txt": {
                "$ref": "#/components/schemas/TravelRuleWorkspaceTxtRecord"
              }
            }
          },
          "billing_enabled": {
            "type": "boolean",
            "description": "トラベルルールデータの受信は無料です。送信は、請求が有効化された後にのみ課金されます。"
          },
          "billing_enabled_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "didit_network": {
            "type": "object",
            "description": "DiditネットワークにこのVASPが登録されているかどうか、および登録されていない場合はまだ満たしていない各条件です。"
          },
          "settings": {
            "$ref": "#/components/schemas/TravelRuleSettingsDetail"
          }
        }
      },
      "InvestigatorDecision": {
        "type": "object",
        "description": "項目がInvestigatorキューからどのように外れたか。`decided_by`、`original_outcome`、`overrides`は承認およびオーバーライドのエンドポイントとレポートで返されます。セッション判定の`investigator`ブロックにはそれ以外のフィールドが含まれます。",
        "properties": {
          "outcome": {
            "type": "string",
            "enum": [
              "accepted",
              "edited",
              "overridden",
              "decided_elsewhere",
              "automated"
            ],
            "description": "`accepted`または`edited`は推奨に従ったことを示し（`edited`はナラティブを書き直したもの）、`overridden`は別のアクションを取ったこと、`decided_elsewhere`はレポートが開かれている間にInvestigatorの外で下された判定、`automated`はInvestigatorが自ら下した判定です。"
          },
          "action": {
            "type": "string",
            "enum": [
              "approve",
              "decline",
              "escalate",
              "request"
            ]
          },
          "actor_email": {
            "type": "string",
            "nullable": true
          },
          "actor_name": {
            "type": "string",
            "nullable": true
          },
          "override_category": {
            "type": "string",
            "enum": [
              "missing_context",
              "needs_information",
              "policy_differs",
              "evidence_misread",
              "other",
              ""
            ],
            "nullable": true
          },
          "override_reason": {
            "type": "string",
            "nullable": true
          },
          "final_status": {
            "type": "string",
            "description": "判定後の項目のステータスです。"
          },
          "agreed": {
            "type": "boolean",
            "description": "判定が推奨と一致したかどうか。",
            "nullable": true
          },
          "decided_at": {
            "type": "string",
            "format": "date-time"
          },
          "billed": {
            "type": "boolean",
            "description": "レビューは課金されました。"
          },
          "decided_by": {
            "type": "string",
            "enum": [
              "investigator",
              "member"
            ]
          },
          "original_outcome": {
            "type": "object",
            "description": "Investigatorが独自に下した判定で、その後のオーバーライドによって変更されません。チームが下した判定の場合はnullです。",
            "properties": {
              "action": {
                "type": "string"
              },
              "final_status": {
                "type": "string"
              },
              "decided_at": {
                "type": "string",
                "format": "date-time"
              }
            },
            "nullable": true
          },
          "overrides": {
            "type": "array",
            "description": "Investigatorが独自に下した判定に対するすべてのオーバーライドを古い順に示します。",
            "items": {
              "type": "object",
              "properties": {
                "action": {
                  "type": "string"
                },
                "actor_email": {
                  "type": "string",
                  "nullable": true
                },
                "actor_name": {
                  "type": "string",
                  "nullable": true
                },
                "override_category": {
                  "type": "string"
                },
                "override_reason": {
                  "type": "string"
                },
                "previous_status": {
                  "type": "string"
                },
                "final_status": {
                  "type": "string"
                },
                "agreed": {
                  "type": "boolean",
                  "nullable": true
                },
                "overridden_at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          }
        }
      },
      "InvestigatorBlock": {
        "type": "object",
        "nullable": true,
        "description": "項目の最新のInvestigatorレビューです。レビューが一度もない場合はnullです。V3のセッションおよび企業セッションの判定に含まれます(したがって`status.updated`のWebhookにも含まれます)。",
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "running",
              "completed",
              "failed"
            ]
          },
          "stage": {
            "type": "string",
            "enum": [
              "shadow",
              "live"
            ]
          },
          "queue": {
            "type": "string",
            "enum": [
              "kyc",
              "kyb",
              "aml",
              "transactions",
              "cases"
            ]
          },
          "is_open": {
            "type": "boolean"
          },
          "recommendation": {
            "type": "string",
            "enum": [
              "approve",
              "decline",
              "escalate",
              "request"
            ],
            "nullable": true
          },
          "recommendation_detail": {
            "type": "string",
            "nullable": true
          },
          "confidence": {
            "type": "string",
            "enum": [
              "high",
              "moderate",
              "low"
            ],
            "nullable": true
          },
          "summary": {
            "type": "string",
            "nullable": true
          },
          "ready_to_accept": {
            "type": "boolean"
          },
          "prepared_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "automated": {
            "type": "boolean",
            "description": "後で判定が覆された場合でも、Investigatorが単独で判定しました。"
          },
          "decided_by": {
            "type": "string",
            "enum": [
              "investigator",
              "member"
            ],
            "nullable": true
          },
          "decision": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/InvestigatorDecision"
              }
            ],
            "type": "object"
          }
        }
      },
      "InvestigatorQueueRow": {
        "type": "object",
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid"
          },
          "kind": {
            "type": "string",
            "enum": [
              "session",
              "business_session",
              "transaction",
              "case"
            ]
          },
          "queue": {
            "type": "string",
            "enum": [
              "kyc",
              "kyb",
              "aml",
              "transactions",
              "cases"
            ]
          },
          "stage": {
            "type": "string",
            "enum": [
              "shadow",
              "live"
            ]
          },
          "subject": {
            "type": "object",
            "description": "レビュー対象の項目です。`id`、`number`、`status`、`name`、および種類に応じて`country`、`workflow`、`vendor_data`、`txn_id`、`amount`、`currency`、`direction`、`title`または`priority`が含まれます。",
            "additionalProperties": true
          },
          "recommendation": {
            "type": "string",
            "enum": [
              "approve",
              "decline",
              "escalate",
              "request"
            ]
          },
          "recommendation_detail": {
            "type": "string"
          },
          "confidence": {
            "type": "string",
            "enum": [
              "high",
              "moderate",
              "low"
            ]
          },
          "summary": {
            "type": "string"
          },
          "sources_count": {
            "type": "integer"
          },
          "ready_to_accept": {
            "type": "boolean"
          },
          "guardrails": {
            "description": "この項目を保持しているロックされたガードレールです(ある場合)。"
          },
          "waiting_since": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "due_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "prepared_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "InvestigatorRunDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/InvestigatorQueueRow"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "string"
              },
              "is_open": {
                "type": "boolean"
              },
              "lookups": {
                "type": "integer",
                "description": "読み取ったセクションと関連レコードの数。"
              },
              "duration_ms": {
                "type": "integer",
                "nullable": true
              },
              "agent_version": {
                "type": "string"
              },
              "prepared_before_opened": {
                "type": "boolean",
                "nullable": true
              },
              "report": {
                "type": "object",
                "additionalProperties": true,
                "description": "レポート: 推論、判定（`ok`、`risk`、`look`、`explained`、`context`）と引用元を伴う証拠ポイント、スクリーニングのヒットの判定（`same`、`not_same`、`unclear`）、推奨される次のステップ。"
              },
              "trail": {
                "description": "確認内容: 読み取った概要、セクション、レコードを読んだ順に記載したもの。"
              },
              "decision": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/InvestigatorDecision"
                  }
                ],
                "type": "object"
              },
              "autonomy": {
                "type": "object",
                "additionalProperties": true,
                "description": "自律処理がレポートをどう判断したか（`result`、`reason`、`tier`、`policy_version`、`rule`、`agreement`、`decisions`、`threshold`、`at`）。キューが自動化されていない場合はnullです。",
                "nullable": true
              }
            }
          }
        ]
      },
      "InvestigatorAcceptRequest": {
        "type": "object",
        "properties": {
          "narrative": {
            "type": "string",
            "maxLength": 4000,
            "description": "書き直されたナラティブ。送信すると、判定は編集のうえ承認されたものとして記録されます。"
          },
          "send_email": {
            "type": "boolean",
            "default": false,
            "description": "判定結果を本人にメールで通知します。"
          },
          "email_address": {
            "type": "string",
            "format": "email",
            "description": "`send_email`がtrueの場合は必須です。"
          },
          "email_language": {
            "type": "string",
            "default": "en",
            "maxLength": 16
          }
        }
      },
      "InvestigatorOverrideRequest": {
        "type": "object",
        "required": [
          "action",
          "category",
          "reason"
        ],
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "approve",
              "decline",
              "escalate",
              "request"
            ]
          },
          "category": {
            "type": "string",
            "enum": [
              "missing_context",
              "needs_information",
              "policy_differs",
              "evidence_misread",
              "other"
            ]
          },
          "reason": {
            "type": "string",
            "minLength": 10,
            "maxLength": 500
          },
          "send_email": {
            "type": "boolean",
            "default": false,
            "description": "判定結果を本人にメールで通知します。"
          },
          "email_address": {
            "type": "string",
            "format": "email",
            "description": "`send_email`がtrueの場合は必須です。"
          },
          "email_language": {
            "type": "string",
            "default": "en",
            "maxLength": 16
          }
        }
      },
      "InvestigatorBatchAcceptRequest": {
        "type": "object",
        "required": [
          "run_ids"
        ],
        "properties": {
          "run_ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 50,
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "InvestigatorBatchAcceptResponse": {
        "type": "object",
        "properties": {
          "accepted": {
            "type": "integer"
          },
          "skipped": {
            "type": "integer"
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "run_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "result": {
                  "type": "string",
                  "enum": [
                    "accepted",
                    "skipped"
                  ]
                },
                "reason": {
                  "type": "string",
                  "enum": [
                    "not_found",
                    "forbidden",
                    "already_decided",
                    "not_ready",
                    "guardrail",
                    "invalid"
                  ]
                },
                "detail": {},
                "action": {
                  "type": "string"
                },
                "final_status": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "InvestigatorSettings": {
        "type": "object",
        "properties": {
          "stage": {
            "type": "string",
            "enum": [
              "none",
              "shadow",
              "live"
            ]
          },
          "stage_changed_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "nullable": true
          },
          "stage_changed_by": {
            "type": "string",
            "readOnly": true
          },
          "monthly_spend_limit": {
            "type": "string",
            "format": "decimal",
            "description": "請求通貨での月間上限で、0.01から1,000,000までです。nullにすると無効になります。",
            "nullable": true
          },
          "spend_limit": {
            "type": "object",
            "readOnly": true,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "limit": {
                "type": "string",
                "format": "decimal",
                "nullable": true
              },
              "spent": {
                "type": "string",
                "format": "decimal"
              },
              "reviews": {
                "type": "integer"
              },
              "reserved": {
                "type": "string",
                "format": "decimal",
                "description": "承認すると課金されるため保留されている、未処理の本番レポートそれぞれの料金です。"
              },
              "currency": {
                "type": "string"
              },
              "paused": {
                "type": "boolean",
                "description": "上限に達しています。新しいレビューは開始されません。"
              }
            }
          }
        }
      },
      "TravelRuleUtxoEntry": {
        "type": "object",
        "description": "UTXO取引の入力または出力1件。チェーンに記録されたとおりの内容です。",
        "required": [
          "address"
        ],
        "properties": {
          "address": {
            "type": "string",
            "maxLength": 128
          },
          "amount": {
            "type": "string",
            "nullable": true,
            "description": "その通貨自体の単位（satoshiではなくBTC）での10進数文字列。任意。",
            "example": "0.0125"
          },
          "txid": {
            "type": "string",
            "maxLength": 128,
            "description": "任意。入力が使用する取引です。"
          },
          "vout": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "description": "任意。入力が使用する出力のインデックスです。"
          }
        }
      },
      "TravelRuleUtxo": {
        "type": "object",
        "description": "UTXO送金(BTC、LTC、BCH、DOGE)のインプットとアウトプットです。これらのチェーンでのみ受け付けられ、それ以外のチェーンでは`400`になります。Diditはこれらから、送金人ウォレット(宣言されたもの、なければ最も多く拠出したインプットアドレス)と受取人アウトプット(宣言されたもの、なければおつりとしてインプットアドレスに戻していない唯一のアウトプット、それもなければ送金額を支払っている唯一のアウトプット)を推定します。結果は送金の`chain_details`に含まれます。",
        "required": [
          "outputs"
        ],
        "properties": {
          "inputs": {
            "type": "array",
            "maxItems": 1000,
            "items": {
              "$ref": "#/components/schemas/TravelRuleUtxoEntry"
            },
            "description": "任意。入力がない場合、送金人は推定されず、おつりの出力も認識されません。"
          },
          "outputs": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1000,
            "items": {
              "$ref": "#/components/schemas/TravelRuleUtxoEntry"
            }
          }
        }
      },
      "TravelRuleChainSide": {
        "type": "object",
        "description": "Diditがチェーンデータから解決した、一方の当事者のウォレットです。",
        "properties": {
          "address": {
            "type": "string",
            "description": "ウォレット。メモ型ネットワークではクラシックアドレス(XRPのXアドレスはクラシックアドレスとタグに分割されます)、Lightningでは受取人のノードIDまたはLightning Addressです。"
          },
          "memo": {
            "type": "string",
            "description": "ウォレットの一部となる宛先タグまたはメモです。ない場合は`\"\"`です。"
          },
          "source": {
            "type": "string",
            "enum": [
              "declared",
              "x_address",
              "largest_input",
              "only_non_change_output",
              "amount_match",
              "invoice_payee",
              "updated"
            ],
            "description": "ウォレットの取得元です。`declared`（リクエストで指定）、`x_address`（XRPのX-addressから分割）、`largest_input`（最も多く拠出したUTXO入力アドレス）、`only_non_change_output`（おつりではない唯一のUTXO出力）、`amount_match`（送金額を支払う唯一のUTXO出力）、`invoice_payee`（Lightningの支払いリクエストが指定する受取人）、`updated`（後から`action: update_originator_wallet`で設定）。"
          }
        }
      },
      "TravelRuleChainDetails": {
        "type": "object",
        "description": "送金のチェーンが2つのウォレットをどのように示すか（1つのアドレスが別のアドレスに支払う形態にとどまらない場合）。アカウント型チェーンの送金（EVM、Solana、Tron）では2つのアドレスがそのままウォレットとなるため、空（`{}`）になります。照合、ルーティング、アドレス帳は、まずここからウォレットを読み取ります。",
        "properties": {
          "chain": {
            "type": "string",
            "description": "正規チェーン(例:`BTC`、`XRP`、Lightning送金の場合は`LIGHTNING`)。"
          },
          "shape": {
            "type": "string",
            "enum": [
              "utxo",
              "memo",
              "lightning"
            ]
          },
          "originator": {
            "$ref": "#/components/schemas/TravelRuleChainSide"
          },
          "beneficiary": {
            "$ref": "#/components/schemas/TravelRuleChainSide"
          },
          "utxo": {
            "type": "object",
            "description": "UTXO送金の場合: 保存されている入力と出力(金額は10進数の文字列)、およびDiditが各出力を何として解釈したか。",
            "properties": {
              "inputs": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TravelRuleUtxoEntry"
                }
              },
              "outputs": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TravelRuleUtxoEntry"
                }
              },
              "change_output_indexes": {
                "type": "array",
                "items": {
                  "type": "integer"
                },
                "description": "入力アドレスへ資金を戻す出力。"
              },
              "beneficiary_output_index": {
                "type": "integer",
                "nullable": true,
                "description": "受取人に支払うアウトプット。判別できなかった場合はnullです。"
              }
            }
          },
          "lightning": {
            "type": "object",
            "description": "Lightning送金の場合: 支払いリクエストの内容。常に`kind`(`bolt11`、`bolt12_offer`、`bolt12_invoice`、`bolt12_invoice_request`、`lnurl`、`lightning_address`、`node_id`または`unknown`)を含みます。BOLT11インボイスでは`network`、`payee_node_id`、`payment_hash`、`amount_msat`、`created_at`、`expires_at`が加わり、BOLT12文字列では`blinded_paths`と`payee_node_id`が、LNURLまたはLightning Addressではその`domain`が加わります。ネットワーク経由での解決は一切行わず、リクエストをデコードするだけです。",
            "additionalProperties": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "declared_originator_not_an_input",
                "declared_beneficiary_not_an_output",
                "beneficiary_output_ambiguous",
                "beneficiary_output_amount_differs"
              ]
            },
            "description": "確認が必要なUTXOの不整合です。申告された送金人が入力に含まれていない、申告された受取人が出力に含まれていない、受取人の出力を1つに特定できない、または受取人の出力の支払額が取引に記載された金額と異なる場合が該当します。"
          },
          "not_applicable_reason": {
            "type": "string",
            "enum": [
              "LIGHTNING_NO_PAYEE_IDENTIFIER",
              "LIGHTNING_BOLT12_BLINDED_PAYEE",
              "LIGHTNING_LNURL_NAMES_NO_PAYEE"
            ],
            "description": "支払いリクエストに受取人が指定されていないアウトバウンドのLightning送金の場合: 送金が`NOT_APPLICABLE`となる理由。`LIGHTNING_NO_PAYEE_IDENTIFIER`(リクエストに受取人ノードが指定されていない、またはデコードできなかった)、`LIGHTNING_BOLT12_BLINDED_PAYEE`(オファーが受取人をブラインドパスの背後に隠している)、`LIGHTNING_LNURL_NAMES_NO_PAYEE`(LNURLが受取人ではなくサービスを指定している)のいずれかです。同じコードが送金の最後の`timeline`エントリの冒頭にも記載されます。"
          }
        }
      },
      "WalletAddressImportRow": {
        "type": "object",
        "description": "インポートするウォレット1件です。`address`、`address_hash`、またはその両方で指定します。これらのフィールドのcamelCase形式も受け付けます。`walletAddress`、`walletAddressHash`、`destinationTag`、`externalUserId`も同様に受け付けます。",
        "properties": {
          "address": {
            "type": "string",
            "maxLength": 128,
            "description": "ウォレットアドレス。エイリアス: `walletAddress`。"
          },
          "address_hash": {
            "type": "string",
            "description": "小文字化したアドレスのSHA-256。16進数64文字またはbase64の44文字で指定します。これのみを送信すると、アドレスを開示せずにウォレットを登録できます。`address`と一緒に送信する場合は、そのアドレスのハッシュである必要があります。エイリアス：`walletAddressHash`。"
          },
          "chain": {
            "type": "string",
            "maxLength": 32
          },
          "memo": {
            "type": "string",
            "maxLength": 256,
            "description": "宛先タグまたはメモです。XRPでは宛先タグで、0から4294967295までの整数です（JSONの数値も受け付けます）。XLMでは最大28バイトのテキストメモ、64ビットのID、または16進数の32バイトハッシュです。EOSでは最大256バイトです。ATOMでは最大256文字です。HBARでは最大100バイトです。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin Cash、Dogecoin、Lightningのウォレットはメモを受け付けず、指定すると`400`になります。"
          },
          "holder_name": {
            "type": "string",
            "maxLength": 255
          },
          "holder_vendor_data": {
            "type": "string",
            "maxLength": 255,
            "description": "保有者に対するお客様の内部識別子です。エイリアス：`externalUserId`。"
          },
          "entity_type": {
            "type": "string",
            "enum": [
              "individual",
              "company"
            ],
            "default": "individual"
          },
          "label": {
            "type": "string",
            "maxLength": 255
          },
          "owner_type": {
            "type": "string",
            "enum": [
              "customer",
              "internal",
              "vasp"
            ],
            "default": "customer"
          },
          "travel_address": {
            "type": "string",
            "maxLength": 512
          },
          "self_declared": {
            "type": "boolean",
            "default": false,
            "description": "設定で許可されている場合は、自己申告によって既に認証済みの状態でエントリーを作成します。"
          }
        }
      },
      "WalletAddressImportReport": {
        "type": "object",
        "description": "インポートの各行がどう処理されたか。送信された順に並びます。",
        "properties": {
          "total": {
            "type": "integer"
          },
          "created": {
            "type": "integer"
          },
          "existing": {
            "type": "integer"
          },
          "duplicate": {
            "type": "integer"
          },
          "failed": {
            "type": "integer"
          },
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "row": {
                  "type": "integer",
                  "description": "行番号です（1から開始）。"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "created",
                    "existing",
                    "duplicate",
                    "failed"
                  ],
                  "description": "`created`: ブックに追加されました。`existing`: ウォレットはすでにブックにあり、変更されていません。`duplicate`: このインポートの前の行と重複しています。`failed`: `errors`を参照してください。"
                },
                "entry_id": {
                  "type": "string",
                  "format": "uuid",
                  "nullable": true,
                  "description": "この行によって作成または検出されたアドレス帳のエントリ。"
                },
                "errors": {
                  "type": "object",
                  "description": "`failed`の行のフィールドエラー。それ以外の場合は空です。"
                },
                "duplicate_of_row": {
                  "type": "integer",
                  "nullable": true,
                  "description": "`duplicate`行の場合、その行が重複している元の行。"
                }
              }
            }
          }
        }
      },
      "TravelRuleCounterpartyContact": {
        "type": "object",
        "description": "EMAILレールが1件のディレクトリエントリに対して送信するコンプライアンス用のアドレス。",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "counterparty": {
            "type": "string",
            "format": "uuid",
            "description": "GET /v3/travel-rule/vasps/に表示される、ディレクトリエントリの`id`です。"
          },
          "counterparty_name": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string",
            "description": "任意のラベルです（チーム名など）。"
          },
          "source": {
            "type": "string",
            "enum": [
              "staff",
              "application",
              "learned"
            ],
            "description": "staff: Diditが管理するもの。learned: VASP自身のドメインのいずれかに属するアドレスで、レスポンスリンクを通じてリクエストに回答したもの。application: お客様のアプリケーションが追加したもの。"
          },
          "scope": {
            "type": "string",
            "enum": [
              "platform",
              "application"
            ],
            "description": "platform：Diditが管理しているもの、または検証済みの回答から学習したもので、すべてのDidit顧客に使用され、お客様は読み取りのみ可能です。application：アプリケーション専用です。"
          },
          "created_by": {
            "type": "string",
            "description": "プラットフォームの連絡先と、APIキーで追加された連絡先では空です。"
          },
          "verified_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このアドレスが最後にレスポンスリンク経由でリクエストに応答した日時。"
          },
          "is_invalid": {
            "type": "boolean",
            "description": "アドレスがバウンスまたは苦情を受けた時点でtrueになり、EMAILレールではそのアドレスはスキップされます。"
          },
          "invalid_reason": {
            "type": "string",
            "enum": [
              "",
              "hard_bounce",
              "soft_bounce",
              "spam_complaint",
              "suppressed"
            ]
          },
          "invalid_detail": {
            "type": "string",
            "description": "受信側メールサーバーが理由を示した場合の、その理由。"
          },
          "invalid_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TravelRuleCounterpartyContactCreate": {
        "type": "object",
        "required": [
          "counterparty",
          "email"
        ],
        "properties": {
          "counterparty": {
            "type": "string",
            "format": "uuid",
            "description": "ディレクトリエントリの`id`です。"
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 254
          },
          "name": {
            "type": "string",
            "description": "任意のラベルです。",
            "maxLength": 255
          }
        }
      },
      "TravelRuleNameMatch": {
        "type": "object",
        "nullable": true,
        "description": "送金の判定を決めた氏名比較です。比較が実行されるまではnullです。当事者がマスクされている間、およびINTERNALのやり取りにおける相手顧客側のコピーでは、`transfer_name`、`compared_name`、`matched_names`、`mismatched_names`は非表示になります。`score`と`matched`は一致しない場合があります。`matched`は厳格度に従い、`score`は2つの氏名全体の類似度を表します。",
        "properties": {
          "score": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "description": "2つの氏名の類似度(0〜100)。いずれかの氏名が空の場合は0です。"
          },
          "matched": {
            "type": "boolean",
            "description": "名前が`strictness`を満たすかどうか。送金の結果はすべてのフィールドを比較する`data_match`に従うため、この値がtrueであっても送金がCOUNTERPARTY_MISMATCHED_DATAになる場合があります。"
          },
          "method": {
            "type": "string",
            "enum": [
              "none",
              "exact_token",
              "token_subset",
              "token_containment",
              "sequence_ratio"
            ],
            "description": "`matched`の判定方法です。none(`NONE`)、exact_token(`STRICT`)、token_subset(`DEFAULT`)、token_containment(`CONTAINS`)、sequence_ratio(`FUZZY`)のいずれかです。"
          },
          "strictness": {
            "type": "string",
            "enum": [
              "NONE",
              "STRICT",
              "CONTAINS",
              "DEFAULT",
              "FUZZY"
            ]
          },
          "compared_with": {
            "type": "string",
            "enum": [
              "wallet_holder",
              "counterparty_vasp"
            ],
            "description": "wallet_holder: ウォレットに記録されている保有者。counterparty_vasp: 取引相手がメールのレスポンスページで回答した名称、またはサンドボックスではDidit Test VASPの回答。"
          },
          "transfer_name": {
            "type": "string",
            "description": "送金に記載された名前です。"
          },
          "compared_name": {
            "type": "string",
            "description": "比較対象となった名前です。"
          },
          "matched_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`compared_name`に含まれる`transfer_name`の単語。"
          },
          "mismatched_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`compared_name`にない`transfer_name`の単語、続いて`transfer_name`にない`compared_name`の単語。"
          }
        }
      },
      "TravelRuleTransferRow": {
        "type": "object",
        "description": "送金一覧に表示されるトラベルルールの送金1件。VASP名、ウォレット、メモのみを含み、送金人や受取人の個人データは一切含みません。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "送金のID。"
          },
          "transaction_id": {
            "type": "string",
            "format": "uuid",
            "description": "この送金が属するDiditの取引。"
          },
          "txn_id": {
            "type": "string",
            "nullable": true,
            "description": "この取引に対するお客様独自のIDです。Didit Test VASPからの受信送金など、Diditがお客様に代わって記帳する送金には、生成されたIDが付与されます。"
          },
          "txn_date": {
            "type": "string",
            "format": "date-time"
          },
          "kind": {
            "type": "string",
            "enum": [
              "withdrawal",
              "deposit",
              "message"
            ],
            "description": "withdrawal: 送信。message: 取引相手のメッセージ(TRPの照会、INTERNALの受信レッグ、またはGTR、VerifyVASP、Sygna Bridgeのメッセージ)からレールが作成した受信送金。deposit: その他の受信送金。"
          },
          "direction": {
            "type": "string",
            "enum": [
              "INBOUND",
              "OUTBOUND"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "AWAITING_COUNTERPARTY",
              "ON_HOLD",
              "COMPLETED",
              "FINISHED",
              "CANCELLED",
              "EXPIRED",
              "COUNTERPARTY_MISMATCHED_DATA",
              "COUNTERPARTY_VASP_NOT_FOUND",
              "COUNTERPARTY_VASP_NOT_REACHABLE",
              "UNCONFIRMED_OWNERSHIP",
              "COUNTERPARTY_VASP_GENERAL_DECLINE",
              "NOT_ENOUGH_COUNTERPARTY_DATA",
              "NOT_APPLICABLE"
            ]
          },
          "reason": {
            "type": "string",
            "description": "`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`の送金が停止している理由で、送金自体の`reason`と同じ値です。そのため、各送金を開かなくても、一覧上でコンプライアンスメールの不達と、経路のない取引相手とを見分けられます。その他のステータスでは`\"\"`です。[送金が停止する理由](/ja/transaction-monitoring/travel-rule#送金が停止している理由)を参照してください。"
          },
          "rail": {
            "type": "string",
            "nullable": true,
            "enum": [
              "INTERNAL",
              "TRP",
              "GTR",
              "TRUST",
              "VERIFYVASP",
              "SYGNA",
              "EMAIL",
              "TEST_VASP",
              null
            ]
          },
          "asset": {
            "type": "string",
            "description": "取引の通貨。"
          },
          "amount": {
            "type": "string",
            "description": "通常の10進数で表した金額（例: \"1.25\"）。"
          },
          "originator_vasp": {
            "type": "string",
            "description": "送信時：自社VASPの正式名称。受信時：取引相手の名称。ディレクトリエントリ、Diditネットワークのメンバー、TRP送信者、Didit Test VASP、または送金で申告された名称から取得します。不明な場合は空です。"
          },
          "beneficiary_vasp": {
            "type": "string",
            "description": "送信時：取引相手の名称（同じ方法で特定されます）。受信時：自社VASPの正式名称。"
          },
          "originator_wallet": {
            "type": "string"
          },
          "beneficiary_wallet": {
            "type": "string"
          },
          "originator_memo": {
            "type": "string",
            "description": "メモまたは宛先タグです。これらがないチェーンでは空です。"
          },
          "beneficiary_memo": {
            "type": "string"
          },
          "originator_wallet_type": {
            "type": "string",
            "enum": [
              "vasp",
              "self_hosted",
              "own"
            ],
            "description": "vasp、self_hosted(アンホステッドと申告されたもの)、またはown(アドレス帳でお客様のものとして記録されているウォレット)。お客様側は常にvaspです。"
          },
          "beneficiary_wallet_type": {
            "type": "string",
            "enum": [
              "vasp",
              "self_hosted",
              "own"
            ]
          },
          "matched_transaction_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "予告済みの送金と手動で照合した入金の相手側。"
          },
          "deadline_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "取引相手の応答をまだ待っている場合に、送金が期限切れになる日時。`POST /v3/transactions/`で作成する送金のうち、送信・受信を問わず情報交換が必要なものすべてに設定されます。しきい値未満の場合、トラベルルールが適用されないLightning決済の場合、および取引相手から連絡があった際にDiditが作成する受信送金（受信TRP照会、ネットワークメッセージ、INTERNALの受信側）の場合はnullです。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BankAccountCheckHolder": {
        "description": "口座の照合に使用される名前です。`full_name`と`business_name`のうち、どちらか一方のみを送信してください。",
        "oneOf": [
          {
            "$ref": "#/components/schemas/BankAccountCheckPersonHolder"
          },
          {
            "$ref": "#/components/schemas/BankAccountCheckBusinessHolder"
          }
        ]
      },
      "BankAccountCheckRequest": {
        "type": "object",
        "required": [
          "country",
          "account",
          "holder"
        ],
        "properties": {
          "country": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3,
            "description": "口座の国。ISO 3166-1 alpha-3コードで指定します（例: `GBR`）。小文字も使用できます。",
            "example": "GBR"
          },
          "account": {
            "type": "object",
            "description": "その国の表記方法による口座情報です。`iban`、またはその国が必要とする銀行コードや支店コード（`sort_code`、`routing_number`、`transit_institution`、`bsb`、`ifsc`、`bank_code`または`bic`）を伴う`account_number`を指定します。メキシコは`clabe`、アルゼンチンは`cbu_cvu`を受け付け、これらはすでに銀行を特定しています。法人口座では、国が求める場合に`registration_id`を追加します。スペース、ハイフン、ドットは無視されます。その国のチェックで使用されないキーは無視されます。必要なキーが指定されていない場合は、そのキー名を示す`400`が返されます。",
            "properties": {
              "iban": {
                "type": "string",
                "maxLength": 64,
                "description": "IBANを使用する国の場合のIBAN。`country`に属している必要があります。"
              },
              "account_number": {
                "type": "string",
                "maxLength": 64,
                "description": "口座番号。銀行コードまたは支店コードを口座とは別に記載する国で使用します。"
              },
              "sort_code": {
                "type": "string",
                "maxLength": 64,
                "description": "英国:6桁のソートコード。"
              },
              "routing_number": {
                "type": "string",
                "maxLength": 64,
                "description": "米国:9桁のABAルーティング番号。"
              },
              "transit_institution": {
                "type": "string",
                "maxLength": 64,
                "description": "カナダ:8桁のトランジット番号と金融機関番号。"
              },
              "bsb": {
                "type": "string",
                "maxLength": 64,
                "description": "オーストラリア：6桁のBSB。"
              },
              "ifsc": {
                "type": "string",
                "maxLength": 64,
                "description": "インド: 11文字のIFSC。"
              },
              "bank_code": {
                "type": "string",
                "maxLength": 64,
                "description": "国によって必要な場合の銀行コード（例：ナイジェリア）。"
              },
              "bic": {
                "type": "string",
                "maxLength": 64,
                "description": "国のチェックで必要な場合の、銀行のBIC。"
              },
              "clabe": {
                "type": "string",
                "maxLength": 64,
                "description": "メキシコ：18桁のCLABE。CLABEには銀行の情報がすでに含まれています。"
              },
              "cbu_cvu": {
                "type": "string",
                "maxLength": 64,
                "description": "アルゼンチン: 22桁のCBUまたはCVU。これだけで銀行が特定されます。"
              },
              "registration_id": {
                "type": "string",
                "maxLength": 64,
                "description": "国が要求する場合の、企業アカウントの登記番号。"
              }
            },
            "additionalProperties": {
              "type": "string",
              "maxLength": 64
            },
            "example": {
              "sort_code": "20-45-67",
              "account_number": "31926819"
            }
          },
          "holder": {
            "$ref": "#/components/schemas/BankAccountCheckHolder"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "このチェックに対するお客様独自の参照値で、変更されずに返されます。",
            "example": "payout_20481"
          }
        }
      },
      "BankAccountCheckResponse": {
        "type": "object",
        "required": [
          "request_id",
          "result",
          "holder_name",
          "account",
          "vendor_data",
          "created_at"
        ],
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "このチェックのID。"
          },
          "result": {
            "type": "string",
            "enum": [
              "match",
              "close_match",
              "no_match",
              "cannot_verify"
            ],
            "description": "`match`: 送信した名義で銀行に口座があります。`close_match`: 近い名義で口座があります（例: ミドルネームの欠落や誤字）。`no_match`: 別の名義で口座がある、またはその口座が存在しません。`cannot_verify`: 銀行が名義を照合せずに回答しました（例: 凍結または解約された口座の場合）。"
          },
          "holder_name": {
            "type": "string",
            "nullable": true,
            "description": "`close_match`の場合で、かつ銀行が返した場合のみ: 銀行が保持している口座名義です。それ以外の場合は`null`です。"
          },
          "account": {
            "type": "string",
            "description": "末尾4文字以外をマスクした口座。"
          },
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "送信したとおりのお客様独自の参照値です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "チェックが実行された日時（UTC）。"
          }
        }
      },
      "BankAccountCheckError": {
        "type": "object",
        "required": [
          "detail"
        ],
        "properties": {
          "detail": {
            "type": "string",
            "description": "発生した問題の内容（英語）です。"
          },
          "code": {
            "type": "string",
            "description": "分岐に使える安定したコード。`401`と`403`では含まれません。"
          },
          "field": {
            "type": "string",
            "description": "`400`の場合のみ：修正すべきボディのフィールドで、ドット区切りのパスで示されます。例：`account.sort_code`。"
          },
          "reason": {
            "type": "string",
            "enum": [
              "required",
              "length",
              "format",
              "checksum",
              "country_mismatch",
              "rejected"
            ],
            "description": "`400`の場合のみ：フィールドが拒否された理由です。`required`、`length`、`format`、`checksum`、`country_mismatch`（別の国のIBAN）はDidit独自のチェックです。`rejected`は、送信されたとおりの口座を銀行が拒否したことを意味します。"
          }
        }
      },
      "BankVerificationResult": {
        "type": "object",
        "description": "ユーザー認証および法人確認における、1つの銀行口座認証ステップの結果。`method`は口座がどのように認証されたかを示し、`none`は試行が評価される前に本人が銀行口座なしで続行したことを示します。`continued_without_bank`は、評価済みの試行の後も含めて、本人が銀行口座なしで続行したことを示します。[銀行口座認証の方法](/ja/core-technology/bank-verification/verification-methods)および[本人が銀行口座を認証できない場合](/ja/core-technology/bank-verification/fallbacks)を参照してください。",
        "properties": {
          "schema_version": {
            "type": "integer",
            "description": "この結果の形式のバージョン。現在は`1`です。"
          },
          "bank_verification_id": {
            "type": "string",
            "format": "uuid",
            "description": "この結果のID。"
          },
          "node_id": {
            "type": "string",
            "description": "この結果が属するワークフローのノード。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Finished",
              "Approved",
              "Declined",
              "In Review",
              "Expired"
            ],
            "description": "アクションとステータスルールを適用した後のステップの判定。"
          },
          "original_status": {
            "type": "string",
            "nullable": true,
            "description": "手動レビューなどの後続の変更が行われる前に、ステップが最初に下した判定です。"
          },
          "method": {
            "type": "string",
            "nullable": true,
            "enum": [
              "open_banking",
              "account_lookup",
              "microdeposits",
              "statement",
              "none"
            ],
            "description": "口座の確認方法：`open_banking`（銀行サインイン：本人が自分の銀行にサインイン）、`account_lookup`（口座確認：本人が口座情報を入力し、銀行が名義を確認）、`microdeposits`、または`statement`（明細書のアップロード）。評価された試行がないまま本人が銀行を使わずに続行した場合は`none`となり、口座は確認されていません。評価された試行の後は、その試行の方法のままになります。口座が評価されるまで、およびワークフローが返すデータを絞り込んでいる場合は`null`です。ワークフローのルールは同じ値を`bank.method`として読み取ります。"
          },
          "provider": {
            "type": "string",
            "nullable": true,
            "description": "接続を実行したルートのキーです。アカウントがどのように検証されたかを判断するには、このキーではなく`method`を参照してください。"
          },
          "credential_source": {
            "type": "string",
            "nullable": true,
            "enum": [
              "native",
              "byok"
            ],
            "description": "`native`: Didit独自のルートで、Diditの残高に請求されます。`byok`: お客様自身の認証情報で接続したマーケットプレイスのプロバイダー。"
          },
          "route": {
            "type": "object",
            "nullable": true,
            "description": "同意の前に選択されたルートです。その後変更されることはありません。",
            "properties": {
              "provider_key": {
                "type": "string",
                "nullable": true,
                "description": "ルートのキーです。"
              },
              "credential_source": {
                "type": "string",
                "enum": [
                  "native",
                  "byok"
                ]
              },
              "is_fallback": {
                "type": "boolean",
                "description": "接続できなかったマーケットプレイスプロバイダーの代わりに、Didit自身のルートが使われたかどうかです。"
              },
              "provider_connection_id": {
                "type": "string",
                "nullable": true,
                "description": "`byok`の場合に使用されたマーケットプレイス接続です。"
              },
              "requested_scopes": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "接続がリクエストしたデータです。例えば`ownership`や`balances`などです。"
              }
            }
          },
          "connection": {
            "type": "object",
            "nullable": true,
            "description": "最新の試行の接続です。最初の試行の前は`null`です。",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "pending",
                  "connected",
                  "cancelled",
                  "timeout",
                  "failed",
                  "unsupported",
                  "revoked",
                  "expired"
                ]
              },
              "institution_id": {
                "type": "string",
                "nullable": true,
                "description": "銀行のID。口座チェックでは銀行が選択されないため`null`です。"
              },
              "institution_name": {
                "type": "string",
                "nullable": true,
                "description": "銀行名。口座チェックでは`null`です。"
              },
              "institution_country": {
                "type": "string",
                "nullable": true,
                "description": "口座の国（ISO 3166-1 alpha-3）。"
              },
              "oauth": {
                "type": "boolean",
                "nullable": true,
                "description": "銀行へのサインインがOAuthとアプリ間連携のどちらで行われたか。口座確認の場合は`null`です。"
              },
              "connected_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "接続に成功した日時。"
              },
              "consent_expires_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "銀行サインインにおいて、銀行の同意が終了する日時。"
              },
              "last_refreshed_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "財務データが最後に再取得された日時。"
              },
              "attempts": {
                "type": "integer",
                "description": "このステップでその人が使用した試行回数（すべての方法の合計）。"
              },
              "reason_code": {
                "type": "string",
                "nullable": true,
                "description": "接続が単に`connected`ではない理由。例：`USER_CANCELLED`、`INSTITUTION_DOWN`、`ACCOUNT_NOT_FOUND`、`REFERENCE_IDENTITY_MISSING`、`VERIFICATION_COMPLETED`。"
              }
            }
          },
          "account": {
            "type": "object",
            "nullable": true,
            "description": "評価されたアカウントです。アカウントが評価されるまでは`null`です。",
            "properties": {
              "account_id_masked": {
                "type": "string",
                "nullable": true,
                "description": "マスクされた口座番号。"
              },
              "iban_masked": {
                "type": "string",
                "nullable": true,
                "description": "マスクされたIBAN。"
              },
              "sort_code": {
                "type": "string",
                "nullable": true,
                "description": "ソートコード（英国）。"
              },
              "routing_number_masked": {
                "type": "string",
                "nullable": true,
                "description": "マスクされたルーティング番号です。"
              },
              "type": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "checking",
                  "current",
                  "savings",
                  "business",
                  "other"
                ]
              },
              "subtype": {
                "type": "string",
                "nullable": true,
                "description": "銀行独自の口座サブタイプ。"
              },
              "currency": {
                "type": "string",
                "nullable": true,
                "description": "口座のISO 4217通貨。"
              },
              "holder_type": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "person",
                  "business",
                  "unknown"
                ]
              },
              "holders_count": {
                "type": "integer",
                "nullable": true
              },
              "is_joint": {
                "type": "boolean",
                "nullable": true
              },
              "is_business": {
                "type": "boolean",
                "nullable": true
              }
            }
          },
          "ownership": {
            "type": "object",
            "nullable": true,
            "description": "口座名義人と認証済みの本人情報との比較結果。口座が評価されるまでは`null`です。",
            "properties": {
              "result": {
                "type": "string",
                "enum": [
                  "match",
                  "partial_match",
                  "no_match",
                  "unknown",
                  "not_verifiable"
                ],
                "description": "`partial_match`は近い一致です。`not_verifiable`: 銀行から応答はあったものの、照合対象の名義人が含まれていませんでした。`unknown`: 証拠を読み取れなかったか、照合する本人情報がありませんでした。"
              },
              "reference_identity_source": {
                "type": "string",
                "nullable": true,
                "description": "保有者の身元を照合した対象のステップ。`kyc`、`database_validation`、`expected_details`、`questionnaire`、`document_ai`、`kyb`のいずれかです。"
              },
              "name_score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "nullable": true,
                "description": "Diditによる名義人氏名のスコアです。"
              },
              "provider_name_score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "nullable": true,
                "description": "銀行が返した場合の、銀行独自の名義人名スコア。"
              },
              "address_score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "nullable": true,
                "description": "住所照合が実行された場合の、名義人の住所スコアです。"
              },
              "email_score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "nullable": true,
                "description": "メールアドレス照合が実行された場合の、名義人のメールアドレススコアです。"
              },
              "phone_score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "nullable": true,
                "description": "電話番号照合が実行された場合の、名義人の電話番号スコアです。"
              },
              "dob_score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "nullable": true,
                "description": "銀行が生年月日を共有した場合の、名義人の生年月日スコアです。"
              },
              "close_match": {
                "type": "boolean",
                "nullable": true,
                "description": "名前が近似一致の範囲に入ったかどうか。"
              },
              "holder_confirmation": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "pending",
                  "confirmed",
                  "rejected"
                ],
                "description": "近似一致した名前の確認を求められた際のこの人物の回答です。一度も求められていない場合は`null`です。"
              },
              "method": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "exact",
                  "token_set",
                  "nickname",
                  "transliteration",
                  "fuzzy",
                  "provider_only",
                  "microdeposits"
                ],
                "description": "スコアを算出した氏名照合の方式。これは認証方法ではありません。認証方法についてはトップレベルの`method`を参照してください。"
              },
              "matched_holder_index": {
                "type": "integer",
                "nullable": true
              },
              "holders": {
                "type": "array",
                "items": {
                  "type": "object"
                },
                "description": "銀行が記載した各名義人とそのスコア。"
              },
              "owner_identity_available": {
                "type": "boolean",
                "nullable": true
              },
              "evidence_freshness": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "live",
                  "cached",
                  "refreshed"
                ]
              },
              "evaluated_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "判定結果が算出された日時。"
              }
            }
          },
          "financial_data": {
            "type": "object",
            "description": "ステップが読み取った金融データです。これを読み取るのは銀行サインインのみです。",
            "properties": {
              "balances": {
                "type": "object",
                "nullable": true,
                "description": "`balances`スコープを指定した場合。"
              },
              "transactions": {
                "type": "object",
                "nullable": true,
                "description": "`transactions`スコープを指定した場合。"
              },
              "income": {
                "type": "object",
                "nullable": true,
                "description": "`income`スコープを指定した場合。"
              },
              "categorization": {
                "type": "object",
                "nullable": true,
                "description": "読み取った取引に対するDiditの分類です。取引がない場合は`null`です。"
              },
              "not_collected": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "balances",
                    "income",
                    "transactions"
                  ]
                },
                "description": "ステップがリクエストしたデータのうち、口座を検証した方法では収集されないデータです。残高、取引、収入は銀行サインインでのみ取得されるため、口座確認で検証された口座ではここに列挙されます。失敗を意味するものではありません。それ以外の場合は空です。"
              }
            }
          },
          "billing": {
            "type": "object",
            "nullable": true,
            "properties": {
              "route": {
                "type": "string",
                "enum": [
                  "native",
                  "byok"
                ]
              },
              "billed": {
                "type": "boolean"
              },
              "marketplace_fee": {
                "type": "string",
                "nullable": true,
                "description": "`byok`の場合に請求されるマーケットプレイスのプラットフォーム手数料です。"
              },
              "usage_type": {
                "type": "string",
                "nullable": true,
                "description": "料金が計上された利用明細行。銀行サインインまたは口座確認の場合は`bank_verification`、それ以前に課金された銀行認証の試行がない明細書アップロードの場合は`bank_statement_upload`、独自のプロバイダーを使用する場合のマーケットプレイス手数料は`bank_byok_fee`です。何も請求されなかった場合は`null`。"
              }
            }
          },
          "reference_identity": {
            "type": "object",
            "nullable": true,
            "description": "名義人の照合対象となったアイデンティティと、そのソースです。"
          },
          "signals": {
            "type": "object",
            "nullable": true,
            "description": "ステップが取引履歴を読み取った場合に、取引履歴から読み取ったアカウントのシグナル。"
          },
          "connection_abandoned": {
            "type": "boolean",
            "nullable": true,
            "description": "本人が銀行で離脱した後、一致なしでステップが終了したかどうか。"
          },
          "not_covered": {
            "type": "boolean",
            "nullable": true,
            "description": "このステップで本人の銀行または国に接続できなかったかどうか。本人の国または銀行を検証できる方法がなく、銀行なしで続行した場合も`true`になります。"
          },
          "continued_without_bank": {
            "type": "boolean",
            "description": "本人が**Continue without your bank**でステップを終えたかどうか。その場合、`continuation`に理由が示されます。続行する前に評価された試行がない場合、`method`は`none`です。名義人の不一致など評価済みの試行の後は、`method`はその試行の方法のままとなり、その判定と理由コードも維持されます。ワークフローが返すデータを絞り込んでいる場合でも返されます。"
          },
          "continuation": {
            "type": "object",
            "nullable": true,
            "description": "本人が銀行を使わずに続行した方法。銀行を使わずに続行しなかった場合は`null`です。ワークフローが返すデータを絞り込んでいる場合も`reason`は返され、それ以外のキーはすべて`null`になります。",
            "properties": {
              "reason": {
                "type": "string",
                "enum": [
                  "no_route",
                  "institution_unsupported",
                  "attempts_exhausted",
                  "person_choice"
                ],
                "description": "その人物が続行した時点でDiditが判断した理由。`no_route`（その国に対応する銀行サインインや口座確認がない）、`institution_unsupported`（選択した銀行がこのステップで使用できない）、`attempts_exhausted`（すべての試行がすでに使い切られ、進行中のものもない）、または`person_choice`（検証手段があったにもかかわらず続行を選んだ。銀行に現時点で接続できなかった場合も含む）のいずれかです。評価済みの試行がすでにステップを決定している場合を除き、`no_route`と`institution_unsupported`は`bank_unsupported_action`に、`attempts_exhausted`は`bank_attempts_exhausted_action`に、`person_choice`は`bank_skipped_action`に従います。"
              },
              "country": {
                "type": "string",
                "nullable": true,
                "description": "本人が認証を行っていた国(ISO 3166-1 alpha-3)。国を選択する前に先へ進んだ場合は`null`です。"
              },
              "offered": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "statement",
                    "microdeposits"
                  ]
                },
                "nullable": true,
                "description": "本人が続行した際に、その国で本人に提示された他の検証方法。提示された順に並びます：`statement`（明細書のアップロード）、次に`microdeposits`。何も提示されなかった場合は空です。"
              },
              "institution_id": {
                "type": "string",
                "nullable": true,
                "description": "`institution_unsupported`の場合、本人が利用できなかった銀行のIDです：本人が選択した銀行、または最後の試行が終了した銀行です。DiditはこのIDを独自の銀行リストから取得し、本人のデバイスからは取得しないため、そのリストにない銀行は`null`になります。その他の理由の場合はすべて`null`です。"
              },
              "institution_name": {
                "type": "string",
                "nullable": true,
                "description": "`institution_unsupported`の場合、その銀行の名前です（`institution_id`と同じリストから取得）。そのリストにその銀行がない場合、およびその他すべての理由の場合は`null`です。"
              },
              "continued_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "本人が続行した日時。"
              }
            }
          },
          "evidence_purged_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "`bank_evidence_retention_days`に基づいて銀行のエビデンスが削除された日時。それ以外の場合は`null`。"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`holder_declared`などの情報コード。警告だけでステータスが変わることはありません。"
          },
          "reason_codes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "判定がその結果になった理由。例：`OWNER_NAME_PARTIAL`。複数が該当する場合があります。`NOT_COVERED`：その人物の国または銀行を検証できる方法がなかったため、銀行なしで続行しました。`SKIPPED`：検証手段があったにもかかわらず、その人物が銀行なしで続行することを選びました。評価済みの試行がすでにステップを決定している場合は、どちらも追加されません。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BankAccountCheckPersonHolder": {
        "type": "object",
        "description": "アカウントを保有すべき人物です。",
        "required": [
          "full_name"
        ],
        "properties": {
          "full_name": {
            "type": "string",
            "maxLength": 255,
            "description": "アカウントを保有する人物の氏名です。",
            "example": "Maria Oliveira"
          }
        }
      },
      "BankAccountCheckBusinessHolder": {
        "type": "object",
        "description": "口座を保有しているはずの企業。法人口座を確認します。",
        "required": [
          "business_name"
        ],
        "properties": {
          "business_name": {
            "type": "string",
            "maxLength": 255,
            "description": "口座を保有しているべき企業の名前です。法人口座を確認します。"
          }
        }
      },
      "BankVerificationPricing": {
        "type": "object",
        "description": "銀行口座認証の公開料金です:明細書のアップロード、自社プロバイダーキーの利用料金、各国の認証方法。",
        "required": [
          "currency",
          "statement_upload",
          "own_provider_fee_usd",
          "countries"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "USD"
            ],
            "description": "レスポンス内のすべての料金の通貨。",
            "example": "USD"
          },
          "statement_upload": {
            "$ref": "#/components/schemas/BankStatementUploadPricing"
          },
          "own_provider_fee_usd": {
            "type": "string",
            "description": "Didit の契約ではなく自社のプロバイダー契約を使用するルートで、課金対象となる所有構造チェック1件ごとの手数料です。結果にかかわらず請求されます。キャンセル、タイムアウト、または放棄された接続は請求されません。小数点以下4桁の10進数文字列で、単位はUSDです。",
            "example": "0.0200"
          },
          "countries": {
            "type": "object",
            "description": "すべての国です。ISO 3166-1 alpha-3コードをキーとします。",
            "additionalProperties": {
              "$ref": "#/components/schemas/BankVerificationPricingCountry"
            }
          }
        }
      },
      "BankStatementUploadPricing": {
        "type": "object",
        "description": "銀行明細書アップロードの料金体系。",
        "required": [
          "price_usd",
          "included_after_charged_bank_attempt",
          "standalone_available"
        ],
        "properties": {
          "price_usd": {
            "type": "string",
            "description": "課金対象の銀行連携の試行後に行う明細書アップロードの料金。小数点以下4桁の10進数文字列で、単位はUSDです。",
            "example": "0.0000"
          },
          "included_after_charged_bank_attempt": {
            "type": "boolean",
            "description": "同じセッション内で課金された銀行連携の試行の後、追加料金なしでアップロードが含まれる場合は`true`です。",
            "example": true
          },
          "standalone_available": {
            "type": "boolean",
            "description": "先に銀行での試行を行わずに、明細書のアップロードを単独で実行できる場合は`true`です。本番環境では`false`です。サンドボックスのセッションでは請求なしでテストできます。",
            "example": false
          }
        }
      },
      "BankVerificationPricingCountry": {
        "type": "object",
        "description": "1つの国の銀行口座認証の方法と、その定価。",
        "required": [
          "name",
          "methods"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "英語表記の国名。",
            "example": "United Kingdom"
          },
          "methods": {
            "$ref": "#/components/schemas/BankVerificationPricingMethods"
          }
        }
      },
      "BankVerificationPricingMethods": {
        "type": "object",
        "description": "ある国で利用できる2つの銀行認証方式。",
        "required": [
          "open_banking",
          "account_lookup"
        ],
        "properties": {
          "open_banking": {
            "$ref": "#/components/schemas/BankSignInPricing"
          },
          "account_lookup": {
            "$ref": "#/components/schemas/BankAccountCheckPricing"
          }
        }
      },
      "BankSignInPricing": {
        "type": "object",
        "description": "銀行へのサインイン: 本人が自分の銀行にサインインします。料金は市場ごとに設定され、同じ市場内のすべての銀行で同一です。",
        "required": [
          "available",
          "market",
          "price_usd",
          "add_ons"
        ],
        "properties": {
          "available": {
            "type": "boolean",
            "description": "Diditがこの国の本番環境で銀行サインインを提供している場合のみ`true`です。",
            "example": true
          },
          "market": {
            "type": "string",
            "nullable": true,
            "description": "適用される料金の市場です。利用できない場合は`null`です。",
            "example": "UK and EEA"
          },
          "price_usd": {
            "type": "string",
            "nullable": true,
            "description": "銀行サインイン1回あたりの定価です。利用できない場合は`null`です。USD建ての小数点以下4桁の10進数文字列です。",
            "example": "0.7900"
          },
          "add_ons": {
            "type": "object",
            "description": "この国で料金が設定されているアドオン。それぞれUSDの小数点以下4桁の10進数文字列で、銀行サインインの料金に加算されます。その国で提供されているアドオンのみが記載され、銀行サインインが利用できない場合は空になります。",
            "properties": {
              "balance": {
                "type": "string",
                "description": "口座残高のアドオン。",
                "example": "0.3500"
              },
              "transactions": {
                "type": "string",
                "description": "取引アドオン。",
                "example": "1.3000"
              }
            }
          }
        }
      },
      "BankAccountCheckPricing": {
        "type": "object",
        "description": "口座確認：本人が口座番号を入力し、Diditがその番号を銀行に照会します。料金は国ごとに設定されます。",
        "required": [
          "available",
          "price_usd"
        ],
        "properties": {
          "available": {
            "type": "boolean",
            "description": "Diditがこの国の本番環境で口座確認を提供している場合のみ`true`です。",
            "example": true
          },
          "price_usd": {
            "type": "string",
            "nullable": true,
            "description": "銀行が回答する口座確認1件あたりの定価です。利用できない場合は`null`です。USD建ての小数点以下4桁の10進数文字列です。",
            "example": "0.4000"
          }
        }
      },
      "ImportProvider": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "enum": [
              "sumsub",
              "jumio",
              "veriff",
              "onfido",
              "persona",
              "metamap",
              "socure",
              "idnow",
              "shufti",
              "idenfy",
              "ondato",
              "trulioo",
              "au10tix",
              "complycube",
              "other"
            ]
          },
          "name": {
            "type": "string"
          },
          "mode": {
            "type": "string",
            "enum": [
              "api_list",
              "api_ids",
              "export_file"
            ],
            "description": "`api_list`：Diditがキーを使ってレコードを一覧取得します。`api_ids`：エクスポートのレコードIDをアップロードします。`export_file`：Didit形式のエクスポートをアップロードします。"
          },
          "record_noun": {
            "type": "string"
          },
          "credential_fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "secret": {
                  "type": "boolean"
                }
              }
            }
          },
          "regions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "required_permissions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "docs_url": {
            "type": "string",
            "nullable": true
          },
          "status_mapping": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "enum": [
                "Approved",
                "Declined",
                "In Review",
                "Expired",
                "Not Finished",
                "Abandoned"
              ]
            }
          }
        }
      },
      "ImportJobSummary": {
        "type": "object",
        "description": "任意の種類のインポートジョブ1件。コンソールのImport jobsドロワーが読み取る形式です。",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "kind": {
            "type": "string",
            "enum": [
              "sessions",
              "businesses",
              "users",
              "status_rules",
              "transactions"
            ]
          },
          "source": {
            "type": "string",
            "enum": [
              "file",
              "api",
              "provider"
            ]
          },
          "provider": {
            "type": "string",
            "nullable": true
          },
          "provider_name": {
            "type": "string",
            "nullable": true
          },
          "filename": {
            "type": "string",
            "nullable": true
          },
          "state": {
            "type": "string",
            "enum": [
              "ready",
              "queued",
              "running",
              "paused",
              "completed",
              "errors",
              "failed",
              "cancelled"
            ],
            "description": "コンソールに表示されるジョブの状態です。`errors`は、拒否された行がある完了済みのジョブを表します。"
          },
          "status": {
            "type": "string"
          },
          "is_dry_run": {
            "type": "boolean"
          },
          "credential_hint": {
            "type": "string",
            "nullable": true
          },
          "resumes_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_error": {
            "type": "string",
            "nullable": true
          },
          "started_by": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true
              },
              "email": {
                "type": "string",
                "nullable": true
              }
            }
          },
          "progress": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "format": "int64"
              },
              "processed": {
                "type": "integer",
                "format": "int64"
              },
              "imported": {
                "type": "integer",
                "format": "int64"
              },
              "updated": {
                "type": "integer",
                "format": "int64"
              },
              "already_in_didit": {
                "type": "integer",
                "format": "int64"
              },
              "failed": {
                "type": "integer",
                "format": "int64"
              },
              "not_finished": {
                "type": "integer",
                "format": "int64"
              },
              "same_person": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          "face_templates": {
            "type": "object",
            "nullable": true,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "built": {
                "type": "integer",
                "format": "int64"
              },
              "duplicates": {
                "type": "integer",
                "format": "int64"
              },
              "blocklisted": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          "eta_seconds": {
            "type": "integer",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "FiledRegulatoryReport": {
        "type": "object",
        "description": "要求された削除を妨げる、確定済みの規制当局向けレポート。",
        "required": [
          "uuid",
          "report_number",
          "report_type",
          "case_uuid"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "レポートのUUID。"
          },
          "report_number": {
            "type": "string",
            "description": "Consoleに表示されるレポート番号（例：SAR-0001）。"
          },
          "report_type": {
            "type": "string",
            "enum": [
              "SAR",
              "STR",
              "CTR",
              "TTR",
              "UTR",
              "IFT",
              "CBR",
              "TFR"
            ],
            "description": "規制当局向けレポートの種類。"
          },
          "case_uuid": {
            "type": "string",
            "format": "uuid",
            "description": "レポートが属するケース。"
          }
        }
      },
      "FiledReportTransaction": {
        "type": "object",
        "description": "確定済みの規制当局向けレポートに記載されているため、削除できない取引。",
        "required": [
          "uuid",
          "transaction_id",
          "reports"
        ],
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "Diditの取引UUIDです。"
          },
          "transaction_id": {
            "type": "string",
            "description": "取引の作成時に指定された取引識別子。"
          },
          "reports": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiledRegulatoryReport"
            },
            "description": "この取引を含む確定済みのレポートです。"
          }
        }
      },
      "InFiledReportError": {
        "type": "object",
        "description": "選択したデータが確定済みの規制レポートに含まれているため、削除は拒否されます。何も削除されません。レポートを削除してから、リクエストを繰り返してください。",
        "required": [
          "detail",
          "code"
        ],
        "properties": {
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "enum": [
              "in_filed_report"
            ],
            "description": "確定済みの規制レポートによって削除がブロックされた場合の固定のエラーコード。"
          },
          "reports": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiledRegulatoryReport"
            },
            "description": "人物、企業、ケース、またはセッションの削除を妨げているレポート。"
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiledReportTransaction"
            },
            "description": "取引の削除を妨げている取引と、それぞれの取引を記載しているレポート。"
          }
        }
      },
      "TravelRuleNetworkParticipantSummary": {
        "type": "object",
        "nullable": true,
        "description": "ネットワーク上での、このアプリケーション自身の参加者。存在しない場合はnullです。",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "platform",
              "own"
            ],
            "description": "platform：Diditのメンバーシップによって処理されます。own：アプリケーション独自のメンバーシップでオンボーディングされています。"
          },
          "status": {
            "type": "string",
            "enum": [
              "not_requested",
              "questionnaire_pending",
              "submitted_to_network",
              "active",
              "suspended",
              "rejected"
            ],
            "description": "not_requested：一度もリクエストされていない、またはネットワークが最初のリクエストを拒否した（last_errorを参照）。questionnaire_pending：デューデリジェンスのアンケートの承認待ち。submitted_to_network：ネットワークのオンボーディングに引き渡し済み。active：ネットワークがこのアプリケーションに独自の参加者コードを付与した。suspended / rejected：Diditが停止または拒否した。"
          },
          "participant_code": {
            "type": "string",
            "description": "ネットワークがこのアプリケーションに付与したコード(GTRの場合はVASPコード)。送信メッセージにはこのコードが含まれ、Didit自身のコードが含まれることはありません。"
          },
          "requested_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "activated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_error": {
            "type": "string",
            "description": "登録を拒否した際のネットワークの回答です。それ以外の場合は空です。"
          }
        }
      },
      "TravelRuleNetworkState": {
        "type": "object",
        "description": "このアプリケーションで1つのネットワーク上のトラベルルールメッセージがどのように送信されるか、また送信できない理由を示します。設定状況であり、リアルタイムの稼働状況や配信のチェックではありません。",
        "properties": {
          "rail": {
            "type": "string",
            "enum": [
              "GTR",
              "TRUST",
              "VERIFYVASP",
              "SYGNA"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "own",
              "didit",
              "off",
              "unavailable"
            ],
            "description": "own：アプリケーションの接続済みメンバーシップを使用します。didit：Diditのメンバーシップが、アプリケーションを独自のアクティブな参加者として扱います。off：disabled_networksでプラットフォームルーティングが無効化されており、独自のメンバーシップもありません。unavailable：このネットワークではまだ何も送信できません（stateとreasonを参照）。"
          },
          "state": {
            "type": "string",
            "enum": [
              "own_membership",
              "live_through_didit",
              "off",
              "didit_onboarding",
              "questionnaire_needed",
              "questionnaire_in_review",
              "request_access",
              "request_sent",
              "unavailable",
              "error"
            ],
            "description": "own_membership：接続済みの自社メンバーシップが送信します。live_through_didit：Diditのメンバーシップ上の自社の参加者が送信します。off：プラットフォームルーティングを無効にしています。didit_onboarding：このネットワークにおけるDidit自身のメンバーシップがまだ稼働していないため、誰の送信も処理できません。questionnaire_needed / questionnaire_in_review：デューデリジェンスのアンケートを提出する必要がある、またはDiditが審査中です。request_access：アンケートが承認されたので、ネットワークをリクエストしてください。request_sent：自社の参加者のオンボーディング中です。unavailable：reasonを参照してください。error：reasonを参照してください。"
          },
          "reason": {
            "type": "string",
            "enum": [
              "own_membership_connected",
              "platform_network_switched_off",
              "own_membership_only",
              "sandbox_application",
              "didit_membership_not_live",
              "participant_suspended",
              "participant_rejected",
              "questionnaire_not_submitted",
              "questionnaire_submitted",
              "questionnaire_changes_requested",
              "questionnaire_rejected",
              "participant_not_requested",
              "participant_active",
              "participant_key_missing",
              "participant_key_unresolved",
              "provisioning_failed",
              "questionnaire_pending",
              "submitted_to_network"
            ],
            "description": "stateの機械可読な詳細。own_membership_only: Diditはこのネットワーク（TRUST）でアプリケーションを扱っていないため、独自のメンバーシップを接続してください。sandbox_application: サンドボックスの送金がネットワークに届くことはありません。provisioning_failed: ネットワークが登録を拒否しました。理由は参加者のlast_errorに示され、ネットワークを再度リクエストすると再試行されます。"
          },
          "platform_available": {
            "type": "boolean",
            "description": "このネットワークへのDidit自身のメンバーシップが設定されているかどうかです。リアルタイムのヘルスチェックではありません。"
          },
          "connected": {
            "type": "boolean",
            "description": "接続済みの顧客メンバーシップが存在するかどうかです。認証情報はローカルで検証され、ネットワークでの検証は本番の交換時に行われます。"
          },
          "participant": {
            "$ref": "#/components/schemas/TravelRuleNetworkParticipantSummary"
          },
          "vasps_reachable": {
            "type": "integer",
            "description": "このネットワークで到達可能なディレクトリ上のVASPです。"
          },
          "routed_30d": {
            "type": "integer",
            "description": "過去30日間にこのネットワーク上で行われた、このアプリケーションの取引。"
          }
        }
      },
      "TravelRuleNetworkQuestionnaireAnswers": {
        "type": "object",
        "description": "Diditのネットワークデューデリジェンスアンケートです。保存は部分的に行われ、保存時に指定されていない回答はすべて保持されます。送信するには、leiとdata_protection_contact_emailを除くすべてのフィールドへの回答と、3つの宣誓事項すべてがtrueであることが必要です。",
        "properties": {
          "legal_name": {
            "type": "string",
            "maxLength": 255
          },
          "registration_number": {
            "type": "string",
            "maxLength": 255
          },
          "incorporation_country": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "ISO 3166-1 alpha-2国コード。"
          },
          "registered_address": {
            "type": "string",
            "maxLength": 1000
          },
          "website": {
            "type": "string",
            "format": "uri",
            "maxLength": 500
          },
          "lei": {
            "type": "string",
            "maxLength": 20,
            "description": "任意。指定する場合は有効なISO 17442 LEIである必要があります。"
          },
          "licences": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "regulator",
                "jurisdiction",
                "licence_type",
                "licence_number"
              ],
              "properties": {
                "regulator": {
                  "type": "string",
                  "maxLength": 255
                },
                "jurisdiction": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "description": "ISO 3166-1 alpha-2国コード。"
                },
                "licence_type": {
                  "type": "string",
                  "maxLength": 255
                },
                "licence_number": {
                  "type": "string",
                  "maxLength": 255
                }
              }
            },
            "description": "VASPが保有するすべてのライセンスまたは登録です。"
          },
          "operating_jurisdictions": {
            "type": "array",
            "minItems": 1,
            "maxItems": 250,
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "ISO 3166-1 alpha-2国コード。"
            }
          },
          "compliance_officer_name": {
            "type": "string",
            "maxLength": 255
          },
          "compliance_officer_email": {
            "type": "string",
            "format": "email"
          },
          "aml_ctf_policy_attested": {
            "type": "boolean",
            "description": "送信するにはtrueである必要があります。"
          },
          "sanctions_screening_attested": {
            "type": "boolean",
            "description": "送信するにはtrueである必要があります。"
          },
          "data_protection_attested": {
            "type": "boolean",
            "description": "送信するにはtrueである必要があります。"
          },
          "data_protection_contact_email": {
            "type": "string",
            "format": "email",
            "description": "任意。"
          },
          "expected_monthly_transfers": {
            "type": "integer",
            "minimum": 0
          },
          "expected_monthly_volume_usd": {
            "type": "string",
            "format": "decimal",
            "description": "想定される月間取引量（USD、小数点以下2桁まで）です。文字列として返されます。"
          },
          "assets": {
            "type": "array",
            "minItems": 1,
            "maxItems": 200,
            "items": {
              "type": "string",
              "maxLength": 32
            },
            "description": "資産ティッカー。大文字で保存され、ソートおよび重複排除されます。"
          }
        }
      },
      "TravelRuleNetworkQuestionnaire": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "submitted",
              "changes_requested",
              "approved",
              "rejected"
            ],
            "description": "回答はdraftまたはchanges_requestedの間に保存できます。submitted、approved、rejectedへの移行はDiditが行います。"
          },
          "answers": {
            "$ref": "#/components/schemas/TravelRuleNetworkQuestionnaireAnswers"
          },
          "submitted_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "reviewed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "review_note": {
            "type": "string",
            "description": "前回の判定に関するDiditのメモです（例：変更すべき点）。"
          },
          "history": {
            "type": "array",
            "readOnly": true,
            "description": "すべてのステータス変更を古い順に示します。",
            "items": {
              "type": "object",
              "properties": {
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "from": {
                  "type": "string"
                },
                "to": {
                  "type": "string"
                },
                "note": {
                  "type": "string",
                  "description": "レビューメモ、またはネットワークからの回答（ある場合）。"
                }
              }
            }
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "TravelRuleNetworkParticipant": {
        "type": "object",
        "description": "1つのネットワーク上での、このアプリケーション自身の参加者。",
        "properties": {
          "network": {
            "type": "string",
            "enum": [
              "gtr",
              "trust",
              "verifyvasp",
              "sygna"
            ]
          },
          "rail": {
            "type": "string",
            "enum": [
              "GTR",
              "TRUST",
              "VERIFYVASP",
              "SYGNA"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "platform",
              "own"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "not_requested",
              "questionnaire_pending",
              "submitted_to_network",
              "active",
              "suspended",
              "rejected"
            ],
            "description": "not_requested：一度もリクエストされていない、またはネットワークが最初のリクエストを拒否した（last_errorを参照）。questionnaire_pending：デューデリジェンスのアンケートの承認待ち。submitted_to_network：ネットワークのオンボーディングに引き渡し済み。active：ネットワークがこのアプリケーションに独自の参加者コードを付与した。suspended / rejected：Diditが停止または拒否した。"
          },
          "participant_code": {
            "type": "string"
          },
          "requested_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "submitted_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "activated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "suspended_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_error": {
            "type": "string",
            "description": "登録を拒否した際のネットワークの回答です。それ以外の場合は空です。"
          },
          "history": {
            "type": "array",
            "readOnly": true,
            "description": "すべてのステータス変更を古い順に示します。",
            "items": {
              "type": "object",
              "properties": {
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "from": {
                  "type": "string"
                },
                "to": {
                  "type": "string"
                },
                "note": {
                  "type": "string",
                  "description": "レビューメモ、またはネットワークからの回答（ある場合）。"
                }
              }
            }
          }
        }
      },
      "TravelRuleNetworksOverview": {
        "type": "object",
        "properties": {
          "platform_networks_enabled": {
            "type": "boolean",
            "description": "Diditのメンバーシップを通じたネットワークアクセスが開放されているかどうかです。falseの間は、アンケートの保存、送信、ネットワークリクエストに403が返されます。"
          },
          "questionnaire": {
            "$ref": "#/components/schemas/TravelRuleNetworkQuestionnaire"
          },
          "participants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TravelRuleNetworkParticipant"
            }
          },
          "networks": {
            "type": "object",
            "readOnly": true,
            "description": "ネットワークごとに、このアプリケーションがどのように送信するか、および送信できない理由。GTRを含め、デフォルトで含まれるネットワークはありません。ネットワークには、自社で接続したメンバーシップを通じて到達するか、Diditのそのネットワークへのメンバーシップが稼働中で、かつそのネットワーク上の自社の参加者が有効になった時点でDiditのメンバーシップを通じて到達できます。リアルタイムの稼働状況チェックや配信チェックではありません。",
            "properties": {
              "gtr": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              },
              "trust": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              },
              "verifyvasp": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              },
              "sygna": {
                "$ref": "#/components/schemas/TravelRuleNetworkState"
              }
            }
          }
        }
      },
      "AddressValidationResult": {
        "type": "object",
        "description": "1件のAddress Validationの結果です。住所が存在するかどうかと、その正規化された形式を示します。住所の確認のみを行い、住所を個人と紐付けることはありません。",
        "required": [
          "status",
          "verification_level",
          "address",
          "formatted_address",
          "latitude",
          "longitude"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "verified",
              "partially_verified",
              "not_verified",
              "unavailable"
            ],
            "description": "`verified`：住所が建物単位（または部屋番号や私書箱単位）まで確認されました。`partially_verified`：通りまで、またはその場所について郵便参照データが保持する最も詳細なレベルまでしか確認されませんでした。`not_verified`：地域または市区町村のみが一致したか、何も一致しませんでした。`unavailable`：検証を実行できませんでした（例：参照サービスが応答しなかった場合）。この場合は課金されず、認証に影響することはありません。"
          },
          "verification_level": {
            "type": "string",
            "nullable": true,
            "enum": [
              "administrative_area",
              "locality",
              "thoroughfare",
              "premise",
              "delivery_point",
              null
            ],
            "description": "住所が一致した最も詳細なレベルです。何も一致しなかった場合、または`status`が`unavailable`の場合は`null`です。"
          },
          "address": {
            "type": "object",
            "nullable": true,
            "description": "正規化済みの住所。`status`が`unavailable`の場合は`null`です。",
            "properties": {
              "address_line_1": {
                "type": "string",
                "nullable": true,
                "description": "配送先住所の1行目です。その国の表記どおりに記載します。",
                "example": "1600 Amphitheatre Pkwy"
              },
              "address_line_2": {
                "type": "string",
                "nullable": true,
                "description": "住所に2行目がある場合の配送先情報の2行目（部屋番号、建物名、地区名など）。"
              },
              "city": {
                "type": "string",
                "nullable": true,
                "example": "Mountain View"
              },
              "region": {
                "type": "string",
                "nullable": true,
                "description": "州、県、または地域。",
                "example": "CA"
              },
              "postal_code": {
                "type": "string",
                "nullable": true,
                "example": "94043-1351"
              },
              "country": {
                "type": "string",
                "nullable": true,
                "description": "ISO 3166-1 alpha-2国コード。",
                "example": "US"
              }
            }
          },
          "formatted_address": {
            "type": "string",
            "nullable": true,
            "description": "1行にまとめた正規化済みの住所。",
            "example": "1600 Amphitheatre Pkwy, Mountain View CA 94043-1351"
          },
          "latitude": {
            "type": "number",
            "nullable": true,
            "example": 37.422022
          },
          "longitude": {
            "type": "number",
            "nullable": true,
            "example": -122.08429
          }
        }
      },
      "AddressValidationRequest": {
        "type": "object",
        "required": [
          "country"
        ],
        "description": "住所1件。1行（`address`）、または少なくとも`address_line_1`を含む構造化フィールドのいずれかで指定します。両方を指定することはできません。",
        "properties": {
          "address": {
            "type": "string",
            "maxLength": 500,
            "description": "1行で表した住所全体。",
            "example": "Paseo de la Castellana 259, 28046 Madrid"
          },
          "address_line_1": {
            "type": "string",
            "maxLength": 255,
            "description": "通り名と番地。",
            "example": "1600 Amphitheatre Pkwy"
          },
          "address_line_2": {
            "type": "string",
            "maxLength": 255,
            "description": "部屋番号、スイート、階、または建物名。"
          },
          "city": {
            "type": "string",
            "maxLength": 128,
            "description": "都市または地域。",
            "example": "Mountain View"
          },
          "region": {
            "type": "string",
            "maxLength": 128,
            "description": "州、県、または地域。",
            "example": "CA"
          },
          "postal_code": {
            "type": "string",
            "maxLength": 32,
            "example": "94043"
          },
          "country": {
            "type": "string",
            "maxLength": 3,
            "description": "住所の国を示すISO 3166-1 alpha-2またはalpha-3コード。",
            "example": "US"
          }
        }
      },
      "AddressValidationResponse": {
        "type": "object",
        "required": [
          "request_id",
          "address_validation",
          "created_at"
        ],
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "このリクエストの識別子です。サポートへの問い合わせ時に伝えてください。セッションは作成されません。"
          },
          "address_validation": {
            "$ref": "#/components/schemas/AddressValidationResult"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TravelRuleWalletProofFailureReason": {
        "type": "string",
        "enum": [
          "",
          "SIGNATURE_INVALID",
          "SIGNATURE_UNSUPPORTED_SCHEME",
          "DEPOSIT_NOT_FOUND",
          "DEPOSIT_UNCONFIRMED",
          "DEPOSIT_LOOKUP_FAILED",
          "DEPOSIT_MISMATCH",
          "DEPOSIT_STALE",
          "TXID_REUSED",
          "CHAIN_UNSUPPORTED",
          "WINDOW_EXPIRED",
          "OWNERSHIP_CHANGED",
          "METHOD_SWITCHED",
          "REVIEW_REJECTED",
          "ABANDONED"
        ],
        "description": "ウォレット所有権の証明、またはその最後の試行がVERIFIEDに至らなかった理由。何も失敗していない場合は空です。PENDINGの証明にも設定されることがあります。この場合、最後の試行が失敗しており、エンドユーザーは再試行できます。DEPOSIT_MISMATCH、DEPOSIT_STALE、TXID_REUSED、REVIEW_REJECTEDは、証明をREJECTEDとして終了させます。SIGNATURE_INVALID：署名がウォレットとチャレンジに一致しません。SIGNATURE_UNSUPPORTED_SCHEME：ウォレットが、Diditが検証しない形式で署名しました。DEPOSIT_NOT_FOUND、DEPOSIT_UNCONFIRMED、DEPOSIT_LOOKUP_FAILED：テスト入金を読み取れないか、まだ確定していません。Diditはテスト期間が終了するまで確認を続けます。DEPOSIT_MISMATCH：取引が、想定された金額をウォレットから入金アドレスへ送金していません。DEPOSIT_STALE：取引がチャレンジより前のものです。TXID_REUSED：この取引はすでに別のウォレットの証明に使われています。CHAIN_UNSUPPORTED：この方法はこのチェーンでは利用できません。WINDOW_EXPIRED：テスト期間が終了しました。OWNERSHIP_CHANGED：ウィジェットセッションの発行後に、ウォレットの保有者が変わったか、ウォレットがアドレス帳から削除されました。METHOD_SWITCHED：エンドユーザーがこの方法を完了する前に別の方法を選択しました。REVIEW_REJECTED：レビュアーがスクリーンショットを却下しました。ABANDONED：エンドユーザーが完了する前にウィジェットセッションが失効しました。"
      },
      "TravelRuleWidgetProofError": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "string",
            "description": "人が読める英語のメッセージ。"
          },
          "code": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleWalletProofFailureReason"
              }
            ],
            "description": "機械可読な理由です。クライアントはこれを使って独自に翻訳したメッセージを表示できます。"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "VERIFIED",
              "REJECTED",
              "EXPIRED"
            ],
            "description": "証明がクローズされた場合に含まれます。送信した入金によってREJECTEDになった場合（400）、またはすでにクローズされた証明に証拠を送信した場合のREJECTEDまたはEXPIRED（409）です。"
          },
          "proof_id": {
            "type": "string",
            "format": "uuid",
            "description": "statusとともに含まれます。クローズされた証明です。"
          },
          "method": {
            "type": "string",
            "enum": [
              "MESSAGE_SIGNING",
              "SATOSHI_TEST",
              "SCREENSHOT",
              "SELF_DECLARATION"
            ],
            "description": "statusとともに含まれます。クローズされた証明の方法です。"
          },
          "max_attempts": {
            "type": "integer",
            "description": "statusとともに含まれます。このセッションで許容されるウォレット証明の却下回数です。"
          },
          "attempts_used": {
            "type": "integer",
            "description": "statusとともに含まれます。これまでに却下された証明の数です。"
          },
          "attempts_remaining": {
            "type": "integer",
            "description": "statusとともに含まれます。0の場合、新たな証明を開始すると409が返されるため、新しいウィジェットセッションを発行してください。"
          }
        }
      },
      "TravelRuleWidgetProofCreate": {
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "MESSAGE_SIGNING",
              "SATOSHI_TEST",
              "SCREENSHOT",
              "SELF_DECLARATION"
            ],
            "description": "エンドユーザーが選択した証明方法です。コンテキストのallowed_methodsのいずれかである必要があります。"
          },
          "wallet_address": {
            "type": "string",
            "maxLength": 128,
            "description": "デフォルトはセッションのwallet_addressです。セッションが送金に紐付いている場合は、送金のウォレットと一致している必要があります。"
          },
          "chain": {
            "type": "string",
            "maxLength": 32,
            "description": "デフォルトはセッションのチェーンです。"
          }
        }
      },
      "TravelRuleWidgetProofVerifyResult": {
        "type": "object",
        "properties": {
          "proof_id": {
            "type": "string",
            "format": "uuid"
          },
          "method": {
            "type": "string",
            "enum": [
              "MESSAGE_SIGNING",
              "SATOSHI_TEST",
              "SCREENSHOT",
              "SELF_DECLARATION"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "VERIFIED",
              "REJECTED",
              "EXPIRED"
            ]
          },
          "is_ownership_verified": {
            "type": "boolean",
            "description": "証明がVERIFIEDの場合に含まれます。アドレス帳のエントリは所有権が検証済みになります。"
          },
          "transfer_status": {
            "type": "string",
            "nullable": true,
            "description": "証明がVERIFIEDの場合に含まれます。紐づいた送金のステータスで、送金がない場合はnullです。"
          },
          "detail": {
            "type": "string",
            "description": "証明がPENDINGのままの間に含まれます。レビュー待ちの送信済みスクリーンショット、またはまだ確認されていないテスト入金です。"
          },
          "code": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleWalletProofFailureReason"
              }
            ],
            "description": "保留中のテスト入金に含まれます。まだ確認されていない理由を示します。"
          }
        }
      },
      "TravelRuleWalletProofReview": {
        "type": "object",
        "properties": {
          "proof_id": {
            "type": "string",
            "format": "uuid"
          },
          "method": {
            "type": "string",
            "enum": [
              "SCREENSHOT"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "VERIFIED",
              "REJECTED",
              "EXPIRED"
            ]
          },
          "wallet_address": {
            "type": "string"
          },
          "chain": {
            "type": "string",
            "description": "正規チェーン識別子(例:ETH、BTC、SOL、TRX)。"
          },
          "holder_name": {
            "type": "string"
          },
          "is_ownership_verified": {
            "type": "boolean",
            "description": "アドレス帳エントリの所有権が、この証明または別の証明によって検証済みかどうか。"
          },
          "transaction_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "ウィジェットセッションの発行対象となったトラベルルール送金の取引。transaction_idなしで発行されたセッションの場合はnullです。"
          },
          "file_name": {
            "type": "string",
            "nullable": true
          },
          "content_type": {
            "type": "string",
            "nullable": true
          },
          "screenshot_url": {
            "type": "string",
            "nullable": true,
            "description": "アップロードされたスクリーンショットへの期限付きリンク。新しいリンクを取得するには、キューを再度一覧取得してください。"
          },
          "attempts": {
            "type": "integer",
            "description": "エンドユーザーがこの証明のためにアップロードしたファイルの数。"
          },
          "failure_reason": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TravelRuleWalletProofFailureReason"
              }
            ],
            "description": "却下後はREVIEW_REJECTED、判定前にウォレットの保有者が変わったか削除された場合はOWNERSHIP_CHANGEDとなります。それ以外の場合は空です。"
          },
          "method_chosen_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "エンドユーザーがスクリーンショット方式を選択した日時。"
          },
          "decided_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "decided_by": {
            "type": "string",
            "description": "証明をクローズした主体：コンソールのレビュアーの場合はreview:<user identifier>、APIキーによる判定の場合はreview、Diditが自動的にクローズした場合はwidgetまたはsweeperです。PENDINGの間は空です。"
          },
          "review_note": {
            "type": "string",
            "description": "判定とともに送信されたメモ。ない場合は空です。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TravelRuleWalletProofDecision": {
        "type": "object",
        "required": [
          "decision"
        ],
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "approve",
              "reject"
            ]
          },
          "note": {
            "type": "string",
            "maxLength": 512,
            "description": "任意。証明とともに保存され、review_noteとして返されます。"
          }
        }
      },
      "DigitalIdWalletApiWalletDigitalCredentialsRequest": {
        "type": "object",
        "properties": {
          "protocol": {
            "type": "string",
            "description": "openid4vp-v1-signed。"
          },
          "request": {
            "type": "object",
            "additionalProperties": {},
            "description": "そのまま渡してください。ブラウザではnavigator.credentials.get({digital: request})、AndroidではGetDigitalCredentialOptionのrequestJsonとしてJSON.stringify(request)を使用します。Diditがお客様のアプリケーション向けに署名しています。"
          }
        },
        "required": [
          "protocol",
          "request"
        ]
      },
      "DigitalIdWalletApiGoogleWalletWalletVerificationStartRequest": {
        "type": "object",
        "description": "Google Wallet認証を開始します(USA、GBR、BRA、SGP、TWN)。",
        "properties": {
          "vendor_data": {
            "type": "string",
            "nullable": true,
            "description": "この認証に対するお客様独自の参照値です（例：お客様のユーザーID）。結果とWebhookで返されます。"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "認証とともに保存され、結果とWebhookで返される任意のJSONオブジェクトです。"
          },
          "sandbox_scenario": {
            "type": "string",
            "minLength": 1,
            "description": "サンドボックスアプリケーション専用：シミュレートする結果です。'wallet_cancelled'、'wallet_timeout'、'wallet_provider_error'のいずれかを指定し、それ以外のシナリオ（または指定なし）は検証済みになります。本番アプリケーションでは拒否されます。全カタログはGET /v1/sandbox/scenarios/で確認できます。"
          },
          "country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DigitalIdWalletApiGoogleWalletWalletVerificationStartCountryEnum"
              }
            ],
            "description": "Google Wallet IDの国を示すISO 3166-1 alpha-3コード。\n\n* `USA` - USA\n* `GBR` - GBR\n* `BRA` - BRA\n* `SGP` - SGP\n* `TWN` - TWN"
          },
          "origin": {
            "type": "string",
            "minLength": 1,
            "description": "ページまたはアプリがウォレットに問い合わせる場所です。ページのhttpsオリジン（ホストがアプリケーションのallowed_return_hostsに含まれているか、ホワイトラベルドメインである必要があります。例: https://app.example.com）、またはandroid:apk-key-hash:<アプリ署名証明書のSHA-256をbase64化した値、パディングなし>を指定します。それ以外の場所からのリクエストはウォレットが拒否します。",
            "maxLength": 256
          }
        },
        "required": [
          "country",
          "origin"
        ]
      },
      "DigitalIdWalletApiGoogleWalletWalletVerificationStartCountryEnum": {
        "enum": [
          "USA",
          "GBR",
          "BRA",
          "SGP",
          "TWN"
        ],
        "type": "string",
        "description": "* `USA` - USA\n* `GBR` - GBR\n* `BRA` - BRA\n* `SGP` - SGP\n* `TWN` - TWN"
      },
      "DigitalIdWalletApiWalletDigitalCredentialResponseRequest": {
        "type": "object",
        "description": "``request_digital_credential``認証において、ウォレットがあなたのページまたはアプリに返した応答です。",
        "properties": {
          "response": {
            "type": "object",
            "additionalProperties": {},
            "description": "ウォレットが返した内容そのものです。navigator.credentials.getで取得したDigitalCredentialのprotocolとdata、またはAndroidのDigitalCredentialを解析したcredentialJsonです。Didit宛てに暗号化されているため、変更しないでください。"
          }
        },
        "required": [
          "response"
        ]
      },
      "SessionFilesExport": {
        "type": "object",
        "description": "セッションのすべてのファイルを元の品質のまま収めた1つのZIPファイル。",
        "required": [
          "export_id",
          "session_id",
          "status",
          "file_count",
          "size_bytes",
          "download_url",
          "expires_at",
          "error",
          "created_at",
          "completed_at"
        ],
        "properties": {
          "export_id": {
            "type": "string",
            "format": "uuid",
            "description": "エクスポートのID。`GET /v3/session/{sessionId}/files-export/{exportId}/`に渡します。"
          },
          "session_id": {
            "type": "string",
            "format": "uuid",
            "description": "ファイルの取得元のセッション。"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "PROCESSING",
              "READY",
              "FAILED",
              "EXPIRED"
            ],
            "description": "ZIPの準備中は`PENDING`および`PROCESSING`、ダウンロード可能になると`READY`、準備できなかった場合は`FAILED`（新しいエクスポートをリクエストしてください）、ZIPが削除されると`EXPIRED`です。"
          },
          "file_count": {
            "type": "integer",
            "nullable": true,
            "description": "ZIP内のファイル。`status`が`READY`の間のみ設定されます。"
          },
          "size_bytes": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "ZIPのサイズ(バイト単位)。`status`が`READY`の間のみ設定されます。"
          },
          "download_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "ZIPの署名付きURLで、有効期間は短時間です。`status`が`READY`の間のみ設定されます。新しいURLを取得するには、エクスポートを再度読み取ってください。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "ZIPが削除される日時で、準備完了から24時間後です。`status`が`READY`の間のみ設定されます。"
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "`status`が`FAILED`の場合に、エクスポートが失敗した理由。"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "エクスポートがリクエストされた日時。"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "ZIPの準備が完了した日時、またはエクスポートが失敗した日時。"
          }
        }
      },
      "TransactionRuleSuggestionsCreatedEvent": {
        "description": "取引ルール提案の実行により、アプリケーションに対する新しいルール変更が提案されました。ルール提案の設定でWebhook通知が有効になっている場合に送信されます。トップレベルの`status`はありません。",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEventEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "webhook_type": {
                "type": "string",
                "enum": [
                  "transaction_rule_suggestions.created"
                ],
                "description": "常に`transaction_rule_suggestions.created`です。"
              },
              "run_id": {
                "type": "string",
                "format": "uuid",
                "description": "新しい提案を生成した提案の実行。"
              },
              "open_count": {
                "type": "integer",
                "description": "今回の実行後もオープンのままの提案の数です。新しい提案も含みます。"
              },
              "suggestions": {
                "type": "array",
                "description": "この実行で作成された提案。",
                "items": {
                  "type": "object",
                  "required": [
                    "suggestion_id",
                    "kind",
                    "title",
                    "rule_id",
                    "expected_impact"
                  ],
                  "properties": {
                    "suggestion_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "ADD",
                        "TWEAK",
                        "DISABLE"
                      ],
                      "description": "`ADD`は新しいルールを提案し、`TWEAK`は既存のルールを変更し、`DISABLE`はルールを無効にします。"
                    },
                    "title": {
                      "type": "string"
                    },
                    "rule_id": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true,
                      "description": "`TWEAK`または`DISABLE`の提案が適用されるルールです。`ADD`の場合は`null`です。"
                    },
                    "expected_impact": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "変更によって何が起こるかを、Consoleで提案に表示されるとおりに示します。"
                    }
                  }
                }
              }
            },
            "required": [
              "webhook_type",
              "run_id",
              "open_count",
              "suggestions"
            ]
          }
        ]
      },
      "GeolocationCheck": {
        "type": "object",
        "description": "1件の位置情報検証結果で、1つのワークフローノードで受理された試行です。測定値、不確実性、真正性は別々のキーであるため、精度は高いが証明されていない測位と、精度は低いが証明された測位は異なる内容として読み取れます。",
        "properties": {
          "node_id": {
            "type": "string",
            "nullable": true,
            "description": "この結果を生成したワークフローノード。これにより、位置情報検証ステップを2つ持つワークフローでも結果を判別できます。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Finished",
              "Approved",
              "Declined",
              "In Review",
              "Resub Requested"
            ],
            "description": "この位置情報検証ステップの機能レベルのステータスで、その警告に基づいて決定されます。セッションの`status`とは独立しています。"
          },
          "outcome": {
            "type": "string",
            "nullable": true,
            "description": "この試行で発生した内容。",
            "enum": [
              "verified",
              "low_accuracy",
              "accuracy_undetermined",
              "stale",
              "approximate",
              "denied",
              "restricted",
              "unavailable",
              "timeout",
              "mock_detected",
              "outside_geofence",
              "in_blocked_area",
              "anonymizer_detected",
              "skipped",
              "replay_rejected",
              "unsupported_client",
              null
            ]
          },
          "permission": {
            "type": "string",
            "nullable": true,
            "description": "OSまたはブラウザーが付与した権限です。`not_requested`は、ステップが接続のIP位置情報のみを使用することを意味するため、本人に権限を求めることはありません。",
            "enum": [
              "granted_precise",
              "granted_approximate",
              "denied",
              "restricted",
              "unavailable",
              "timeout",
              "dismissed",
              "not_requested",
              null
            ]
          },
          "latitude": {
            "type": "number",
            "nullable": true,
            "description": "測位結果のWGS84緯度。測位結果がない場合は`null`です。",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "nullable": true,
            "description": "測位結果のWGS84経度。測位結果がない場合は`null`です。",
            "format": "double"
          },
          "accuracy_m": {
            "type": "number",
            "nullable": true,
            "description": "`accuracy_confidence`の信頼水準における不確かさの半径（メートル単位）。",
            "format": "double"
          },
          "accuracy_confidence": {
            "type": "string",
            "nullable": true,
            "description": "プラットフォームが`accuracy_m`に付与する信頼水準：`p95`（ブラウザ）、`p68`（Android）、または`unspecified`（iOS）。",
            "enum": [
              "p95",
              "p68",
              "unspecified",
              null
            ]
          },
          "measured_at": {
            "type": "string",
            "nullable": true,
            "description": "デバイスが位置情報を取得した日時（デバイス自身の時計による）。",
            "format": "date-time"
          },
          "age_seconds": {
            "type": "integer",
            "nullable": true,
            "description": "デバイスが位置情報を取得してからDiditが受信するまでの秒数。"
          },
          "source": {
            "type": "string",
            "nullable": true,
            "description": "位置情報の取得元（プラットフォームが提供する場合）。`ip`は、位置が接続のIPロケーションであることを示します。",
            "enum": [
              "gps",
              "fused",
              "network",
              "wifi",
              "cell",
              "browser",
              "unknown",
              "ip",
              null
            ]
          },
          "platform": {
            "type": "string",
            "nullable": true,
            "description": "測位結果を生成したクライアント。",
            "enum": [
              "web",
              "ios",
              "android",
              "react_native",
              "flutter",
              null
            ]
          },
          "sdk_version": {
            "type": "string",
            "nullable": true,
            "description": "測位結果を生成したSDKのバージョン。"
          },
          "is_mock": {
            "type": "boolean",
            "nullable": true,
            "description": "位置情報が模擬位置情報プロバイダーまたはシミュレーションソフトウェアから取得されたとデバイスが報告した場合は`true`です。プラットフォームがこれを報告しない場合（ブラウザでは判別できません）は`null`になります。`null`は`false`を意味しません。"
          },
          "produced_by_accessory": {
            "type": "boolean",
            "nullable": true,
            "description": "iOSのみ：位置情報が外部アクセサリーから取得された場合は`true`。それ以外の環境では`null`。"
          },
          "integrity": {
            "type": "string",
            "enum": [
              "attested",
              "not_attested",
              "failed",
              "unsupported",
              "not_determined"
            ],
            "description": "デバイスアテステーションによって位置情報が裏付けられているかどうかです。Webにはアテステーションの仕組みがないため、ブラウザは`unsupported`を報告します。これは失敗ではありません。"
          },
          "country_code": {
            "type": "string",
            "nullable": true,
            "description": "測位地点が所在する国を示すISO 3166-1 alpha-2コード。"
          },
          "region_code": {
            "type": "string",
            "nullable": true,
            "description": "測位地点が属するISO 3166-2地域区分。"
          },
          "city": {
            "type": "string",
            "nullable": true,
            "description": "最寄りの居住地。レビュアー向けのラベルです。"
          },
          "geofence": {
            "type": "object",
            "description": "ステップの国および地域ルールの結果。",
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "ステップが国または地域のルールを適用しているかどうか。"
              },
              "result": {
                "type": "string",
                "nullable": true,
                "description": "ルールに対する位置の関係です。`undetermined`は、精度円が境界をまたいでいるか、位置がどの国にも特定されなかったことを意味します。これは外側にいることの証拠ではありません。",
                "enum": [
                  "inside",
                  "outside",
                  "undetermined",
                  null
                ]
              }
            }
          },
          "inside_geofence": {
            "type": "boolean",
            "nullable": true,
            "description": "`geofence.result`が`inside`の場合は`true`、`outside`の場合は`false`、それ以外の場合は`null`です。"
          },
          "geofence_basis": {
            "type": "string",
            "nullable": true,
            "description": "エリア判定の基準とした位置：`device`の測位、または接続の`ip`の位置情報。",
            "enum": [
              "device",
              "ip",
              null
            ]
          },
          "inside_areas": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "位置が含まれる、設定済みの許可エリアのID。"
          },
          "blocked_areas": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "位置が含まれる、設定済みのブロック対象エリアのID。"
          },
          "position_source": {
            "type": "string",
            "nullable": true,
            "description": "設定に基づいてステップが位置を取得する元です。IP位置情報と照合したデバイス、デバイスのみ、またはIP位置情報のみのいずれかです。",
            "enum": [
              "device_and_ip",
              "device_only",
              "ip_only",
              null
            ]
          },
          "anonymizers": {
            "type": "object",
            "nullable": true,
            "description": "接続とデバイスの状態です。各項目は`true`、`false`、またはソースが判別できない場合は`null`です。",
            "properties": {
              "vpn": {
                "type": "boolean",
                "nullable": true
              },
              "proxy": {
                "type": "boolean",
                "nullable": true
              },
              "tor": {
                "type": "boolean",
                "nullable": true
              },
              "spoofing": {
                "type": "boolean",
                "nullable": true
              },
              "emulator": {
                "type": "boolean",
                "nullable": true
              }
            }
          },
          "ip_distance_km": {
            "type": "number",
            "nullable": true,
            "description": "両方の不確実性半径を差し引いた後の、セッションのIP位置情報までの距離。両者が重なる場合は`0`。",
            "format": "double"
          },
          "ip_distance_uncertainty_km": {
            "type": "number",
            "nullable": true,
            "description": "差し引かれた合計半径: IP位置の半径にこの測位の精度を加えた値。",
            "format": "double"
          },
          "ip_consistent": {
            "type": "boolean",
            "nullable": true,
            "description": "`ip_distance_km`がステップで設定された距離以内かどうかです。いずれかが不明な場合は`null`です。"
          },
          "document_distance_km": {
            "type": "number",
            "nullable": true,
            "description": "身分証明書または住所証明の書類に記載された住所をジオコーディングした地点までの距離。登録済みの住所がない場合は`null`。",
            "format": "double"
          },
          "travel_excused": {
            "type": "boolean",
            "nullable": true,
            "description": "ステップの移動許容範囲によって住所からの距離が許容されたかどうか。許容範囲がオフの場合は`null`です。"
          },
          "consecutive_mismatches": {
            "type": "integer",
            "nullable": true,
            "description": "最終試行時: このチェックに、同一人物のそれ以前の連続した不一致を加えた数。"
          },
          "attempts": {
            "type": "integer",
            "description": "ノード内でのこの試行の番号です。1から始まります。"
          },
          "consent": {
            "type": "object",
            "nullable": true,
            "description": "システムプロンプトの前に本人が与えた同意。本人が見た文言のバージョンと言語とともに記録されます。",
            "properties": {
              "accepted_at": {
                "type": "string",
                "format": "date-time"
              },
              "version": {
                "type": "string",
                "nullable": true
              },
              "locale": {
                "type": "string",
                "nullable": true
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "feature": {
                  "type": "string",
                  "enum": [
                    "ID_VERIFICATION",
                    "NFC",
                    "LIVENESS",
                    "FACEMATCH",
                    "PROOF_OF_ADDRESS",
                    "PHONE",
                    "EMAIL",
                    "AML",
                    "LOCATION",
                    "DATABASE_VALIDATION",
                    "QUESTIONNAIRE",
                    "DOCUMENT_AI",
                    "KYB_REGISTRY",
                    "KYB_DOCUMENTS",
                    "KYB_KEY_PEOPLE",
                    "GEOLOCATION",
                    "SIGNATURE"
                  ],
                  "description": "この警告を生成した機能です。この値は、警告が属する機能ブロックを示します。各モジュールのwarnings配列では通常そのモジュールに対応する値が使われます（例: `phone_verifications[].warnings`内の`PHONE`）が、判定ペイロード上のすべての機能の警告については、上記のenumが正式な定義です。"
                },
                "risk": {
                  "type": "string"
                },
                "additional_data": {
                  "type": "object",
                  "nullable": true
                },
                "log_type": {
                  "type": "string"
                },
                "short_description": {
                  "type": "string"
                },
                "long_description": {
                  "type": "string"
                },
                "node_id": {
                  "type": "string",
                  "description": "この警告を生成したワークフローグラフのノードID"
                }
              }
            },
            "description": "この位置情報検証ステップで発生した警告。`feature`は`GEOLOCATION`に設定されます。警告コードは`LOCATION_`で始まります。"
          }
        }
      },
      "GeolocationAttempt": {
        "type": "object",
        "description": "位置情報検証ステップの1回の試行。`warnings`を除き`geolocation_checks[]`と同じキーを持ち、さらにDiditが受信した日時を含みます。",
        "properties": {
          "node_id": {
            "type": "string",
            "nullable": true,
            "description": "この結果を生成したワークフローノード。これにより、位置情報検証ステップを2つ持つワークフローでも結果を判別できます。"
          },
          "status": {
            "type": "string",
            "enum": [
              "Not Finished",
              "Approved",
              "Declined",
              "In Review",
              "Resub Requested"
            ],
            "description": "この位置情報検証ステップの機能レベルのステータスで、その警告に基づいて決定されます。セッションの`status`とは独立しています。"
          },
          "outcome": {
            "type": "string",
            "nullable": true,
            "description": "この試行で発生した内容。",
            "enum": [
              "verified",
              "low_accuracy",
              "accuracy_undetermined",
              "stale",
              "approximate",
              "denied",
              "restricted",
              "unavailable",
              "timeout",
              "mock_detected",
              "outside_geofence",
              "in_blocked_area",
              "anonymizer_detected",
              "skipped",
              "replay_rejected",
              "unsupported_client",
              null
            ]
          },
          "permission": {
            "type": "string",
            "nullable": true,
            "description": "OSまたはブラウザーが付与した権限です。`not_requested`は、ステップが接続のIP位置情報のみを使用することを意味するため、本人に権限を求めることはありません。",
            "enum": [
              "granted_precise",
              "granted_approximate",
              "denied",
              "restricted",
              "unavailable",
              "timeout",
              "dismissed",
              "not_requested",
              null
            ]
          },
          "latitude": {
            "type": "number",
            "nullable": true,
            "description": "測位結果のWGS84緯度。測位結果がない場合は`null`です。",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "nullable": true,
            "description": "測位結果のWGS84経度。測位結果がない場合は`null`です。",
            "format": "double"
          },
          "accuracy_m": {
            "type": "number",
            "nullable": true,
            "description": "`accuracy_confidence`の信頼水準における不確かさの半径（メートル単位）。",
            "format": "double"
          },
          "accuracy_confidence": {
            "type": "string",
            "nullable": true,
            "description": "プラットフォームが`accuracy_m`に付与する信頼水準：`p95`（ブラウザ）、`p68`（Android）、または`unspecified`（iOS）。",
            "enum": [
              "p95",
              "p68",
              "unspecified",
              null
            ]
          },
          "measured_at": {
            "type": "string",
            "nullable": true,
            "description": "デバイスが位置情報を取得した日時（デバイス自身の時計による）。",
            "format": "date-time"
          },
          "age_seconds": {
            "type": "integer",
            "nullable": true,
            "description": "デバイスが位置情報を取得してからDiditが受信するまでの秒数。"
          },
          "source": {
            "type": "string",
            "nullable": true,
            "description": "位置情報の取得元（プラットフォームが提供する場合）。`ip`は、位置が接続のIPロケーションであることを示します。",
            "enum": [
              "gps",
              "fused",
              "network",
              "wifi",
              "cell",
              "browser",
              "unknown",
              "ip",
              null
            ]
          },
          "platform": {
            "type": "string",
            "nullable": true,
            "description": "測位結果を生成したクライアント。",
            "enum": [
              "web",
              "ios",
              "android",
              "react_native",
              "flutter",
              null
            ]
          },
          "sdk_version": {
            "type": "string",
            "nullable": true,
            "description": "測位結果を生成したSDKのバージョン。"
          },
          "is_mock": {
            "type": "boolean",
            "nullable": true,
            "description": "位置情報が模擬位置情報プロバイダーまたはシミュレーションソフトウェアから取得されたとデバイスが報告した場合は`true`です。プラットフォームがこれを報告しない場合（ブラウザでは判別できません）は`null`になります。`null`は`false`を意味しません。"
          },
          "produced_by_accessory": {
            "type": "boolean",
            "nullable": true,
            "description": "iOSのみ：位置情報が外部アクセサリーから取得された場合は`true`。それ以外の環境では`null`。"
          },
          "integrity": {
            "type": "string",
            "enum": [
              "attested",
              "not_attested",
              "failed",
              "unsupported",
              "not_determined"
            ],
            "description": "デバイスアテステーションによって位置情報が裏付けられているかどうかです。Webにはアテステーションの仕組みがないため、ブラウザは`unsupported`を報告します。これは失敗ではありません。"
          },
          "country_code": {
            "type": "string",
            "nullable": true,
            "description": "測位地点が所在する国を示すISO 3166-1 alpha-2コード。"
          },
          "region_code": {
            "type": "string",
            "nullable": true,
            "description": "測位地点が属するISO 3166-2地域区分。"
          },
          "city": {
            "type": "string",
            "nullable": true,
            "description": "最寄りの居住地。レビュアー向けのラベルです。"
          },
          "geofence": {
            "type": "object",
            "description": "ステップの国および地域ルールの結果。",
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "ステップが国または地域のルールを適用しているかどうか。"
              },
              "result": {
                "type": "string",
                "nullable": true,
                "description": "ルールに対する位置の関係です。`undetermined`は、精度円が境界をまたいでいるか、位置がどの国にも特定されなかったことを意味します。これは外側にいることの証拠ではありません。",
                "enum": [
                  "inside",
                  "outside",
                  "undetermined",
                  null
                ]
              }
            }
          },
          "inside_geofence": {
            "type": "boolean",
            "nullable": true,
            "description": "`geofence.result`が`inside`の場合は`true`、`outside`の場合は`false`、それ以外の場合は`null`です。"
          },
          "geofence_basis": {
            "type": "string",
            "nullable": true,
            "description": "エリア判定の基準とした位置：`device`の測位、または接続の`ip`の位置情報。",
            "enum": [
              "device",
              "ip",
              null
            ]
          },
          "inside_areas": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "位置が含まれる、設定済みの許可エリアのID。"
          },
          "blocked_areas": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "位置が含まれる、設定済みのブロック対象エリアのID。"
          },
          "position_source": {
            "type": "string",
            "nullable": true,
            "description": "設定に基づいてステップが位置を取得する元です。IP位置情報と照合したデバイス、デバイスのみ、またはIP位置情報のみのいずれかです。",
            "enum": [
              "device_and_ip",
              "device_only",
              "ip_only",
              null
            ]
          },
          "anonymizers": {
            "type": "object",
            "nullable": true,
            "description": "接続とデバイスの状態です。各項目は`true`、`false`、またはソースが判別できない場合は`null`です。",
            "properties": {
              "vpn": {
                "type": "boolean",
                "nullable": true
              },
              "proxy": {
                "type": "boolean",
                "nullable": true
              },
              "tor": {
                "type": "boolean",
                "nullable": true
              },
              "spoofing": {
                "type": "boolean",
                "nullable": true
              },
              "emulator": {
                "type": "boolean",
                "nullable": true
              }
            }
          },
          "ip_distance_km": {
            "type": "number",
            "nullable": true,
            "description": "両方の不確実性半径を差し引いた後の、セッションのIP位置情報までの距離。両者が重なる場合は`0`。",
            "format": "double"
          },
          "ip_distance_uncertainty_km": {
            "type": "number",
            "nullable": true,
            "description": "差し引かれた合計半径: IP位置の半径にこの測位の精度を加えた値。",
            "format": "double"
          },
          "ip_consistent": {
            "type": "boolean",
            "nullable": true,
            "description": "`ip_distance_km`がステップで設定された距離以内かどうかです。いずれかが不明な場合は`null`です。"
          },
          "document_distance_km": {
            "type": "number",
            "nullable": true,
            "description": "身分証明書または住所証明の書類に記載された住所をジオコーディングした地点までの距離。登録済みの住所がない場合は`null`。",
            "format": "double"
          },
          "travel_excused": {
            "type": "boolean",
            "nullable": true,
            "description": "ステップの移動許容範囲によって住所からの距離が許容されたかどうか。許容範囲がオフの場合は`null`です。"
          },
          "consecutive_mismatches": {
            "type": "integer",
            "nullable": true,
            "description": "最終試行時: このチェックに、同一人物のそれ以前の連続した不一致を加えた数。"
          },
          "attempts": {
            "type": "integer",
            "description": "ノード内でのこの試行の番号です。1から始まります。"
          },
          "consent": {
            "type": "object",
            "nullable": true,
            "description": "システムプロンプトの前に本人が与えた同意。本人が見た文言のバージョンと言語とともに記録されます。",
            "properties": {
              "accepted_at": {
                "type": "string",
                "format": "date-time"
              },
              "version": {
                "type": "string",
                "nullable": true
              },
              "locale": {
                "type": "string",
                "nullable": true
              }
            }
          },
          "received_at": {
            "type": "string",
            "nullable": true,
            "description": "Diditが試行を受信した日時です。",
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BiometricRetention": {
        "type": "object",
        "description": "このセッションのライブ生体データが削除される日時。",
        "required": [
          "jurisdictions",
          "deletes_at"
        ],
        "properties": {
          "jurisdictions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "生体認証に関する規則でこの人物の削除期限を定めている米国の州のコード（州が不明な場合は`US`）。該当するものがない場合は空です。"
          },
          "deletes_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "このセッションのライブ生体データ（顔画像とテンプレート）が削除される日付です。アプリケーションのデータ保持設定と、該当する場合は本人の法域における法的上限に基づいて決まります。まだ適用される日付がない場合は`null`です。"
          }
        }
      },
      "TravelRuleManualMatchRequest": {
        "type": "object",
        "required": [
          "transaction_id"
        ],
        "properties": {
          "transaction_id": {
            "type": "string",
            "format": "uuid",
            "description": "受信したトラベルルールメッセージ（`kind: message`の行）の`transaction_id`です。"
          }
        }
      },
      "TravelRuleManualMatchResponse": {
        "type": "object",
        "required": [
          "deposit",
          "message"
        ],
        "properties": {
          "deposit": {
            "$ref": "#/components/schemas/TravelRuleTransferRow"
          },
          "message": {
            "$ref": "#/components/schemas/TravelRuleTransferRow"
          }
        }
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権（なし、読み取り、書き込み）、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys"
      },
      "TransactionTokenAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Transaction-Token",
        "description": "バックエンドがPOST /v3/transactions/sdk-token/で発行する有効期間の短いスコープ付きトークン。Didit SDKがデバイス向けの/v1/transactions/エンドポイントで使用します。"
      },
      "SessionTokenAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "Session-Token",
        "description": "POST /v3/session/の`session_token`フィールドで返される有効期間の短いトークン。ホスト型検証フロー（およびカスタムのサンドボックスUI）が、サーバー側のAPIキーを使わずに、認証中のユーザーに代わってセッションスコープのエンドポイントを呼び出すために使用します。"
      },
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "アプリケーションのクライアントクレデンシャルのアクセストークン。"
      },
      "CaseRequestToken": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Case-Request-Token",
        "description": "セキュアリンクから取得するリクエスト固有の認証情報。このリクエストへのアクセスのみを許可します。"
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "未認証",
        "content": {
          "application/json": {
            "examples": {
              "Invalid API Key": {
                "summary": "無効なAPIキー",
                "value": {
                  "detail": "Invalid API Key."
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "アクセス禁止",
        "content": {
          "application/json": {
            "examples": {
              "No Permission": {
                "summary": "権限がありません",
                "value": {
                  "detail": "You do not have permission to perform this action."
                }
              },
              "Not Enough Credits": {
                "summary": "クレジット不足",
                "value": {
                  "error": "You don't have enough credits to perform this request. Please top up at https://business.didit.me"
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "見つかりません",
        "content": {
          "application/json": {
            "examples": {
              "Not Found": {
                "summary": "見つかりません",
                "value": {
                  "detail": "Resource not found."
                }
              }
            }
          }
        }
      },
      "PhoneRiskValidationError": {
        "description": "リクエストのバリデーションに失敗しました。",
        "content": {
          "application/json": {
            "examples": {
              "Missing phone number": {
                "summary": "電話番号がありません",
                "value": {
                  "phone_number": [
                    "This field is required."
                  ]
                }
              },
              "Invalid phone number": {
                "summary": "電話番号が無効です",
                "value": {
                  "phone_number": [
                    "Invalid phone number provided."
                  ]
                }
              },
              "Invalid signal IP": {
                "summary": "シグナルのIPが無効です",
                "value": {
                  "signals": {
                    "ip": [
                      "Enter a valid IPv4 or IPv6 address."
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "EmailRiskValidationError": {
        "description": "リクエストのバリデーションに失敗しました。",
        "content": {
          "application/json": {
            "examples": {
              "Missing email": {
                "summary": "メールアドレスがありません",
                "value": {
                  "email": [
                    "This field is required."
                  ]
                }
              },
              "Invalid email": {
                "summary": "メールアドレスが無効です",
                "value": {
                  "email": [
                    "Enter a valid email address."
                  ]
                }
              },
              "Invalid country hint": {
                "summary": "国のヒントが無効です",
                "value": {
                  "country_code": [
                    "Ensure this field has no more than 3 characters."
                  ]
                }
              }
            }
          }
        }
      },
      "IPRiskValidationError": {
        "description": "リクエストのバリデーションに失敗しました。",
        "content": {
          "application/json": {
            "examples": {
              "Missing IP address": {
                "summary": "IPアドレスがありません",
                "value": {
                  "ip_address": [
                    "This field is required."
                  ]
                }
              },
              "Invalid IP address": {
                "summary": "無効なIPアドレス",
                "value": {
                  "ip_address": [
                    "Enter a valid IPv4 or IPv6 address."
                  ]
                }
              },
              "Country hint too long": {
                "summary": "国のヒントが長すぎます",
                "value": {
                  "claimed_country": [
                    "Ensure this field has no more than 3 characters."
                  ]
                }
              }
            }
          }
        }
      },
      "RiskPermissionDenied": {
        "description": "APIキーがないか無効である、または組織がライブ照会の費用を賄えません。このAPIが`401`を返すことはありません。",
        "content": {
          "application/json": {
            "examples": {
              "Missing or invalid API key": {
                "summary": "`x-api-key`ヘッダーがないか、キーが無効または失効しています",
                "value": {
                  "detail": "You do not have permission to perform this action."
                }
              },
              "Not enough credits": {
                "summary": "組織の残高で照会料金を賄えません",
                "value": {
                  "error": "You don't have enough credits to perform this request."
                }
              }
            }
          }
        }
      },
      "RateLimitedWrite": {
        "description": "APIキーあたり毎分300リクエストの共有書き込み制限を超えました。再試行する前に`Retry-After`に従ってください。",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "detail"
              ],
              "properties": {
                "detail": {
                  "type": "string"
                }
              }
            },
            "example": {
              "detail": "Write request rate limit exceeded. You can make up to 300 requests per minute."
            }
          }
        }
      },
      "AddressValidationValidationError": {
        "description": "リクエストボディが無効です: `country`がないか不明、住所がない、または`address`と構造化フィールドの両方が指定されています。",
        "content": {
          "application/json": {
            "examples": {
              "Unknown country": {
                "value": {
                  "country": [
                    "Use an ISO 3166-1 alpha-2 or alpha-3 country code, e.g. 'US' or 'USA'."
                  ]
                }
              },
              "No address": {
                "value": {
                  "address": [
                    "Send the address: 'address' on one line, or the structured fields with 'address_line_1'."
                  ]
                }
              },
              "Both shapes": {
                "value": {
                  "address": [
                    "Send either 'address' or the structured fields (address_line_1, ...), not both."
                  ]
                }
              }
            }
          }
        }
      },
      "AddressValidationPermissionDenied": {
        "description": "APIキーがないか無効である、スコープ付きキーに`sessions`の書き込みアクセス権がない、または組織が検証の費用を賄えません。このAPIが`401`を返すことはありません。",
        "content": {
          "application/json": {
            "examples": {
              "Missing or invalid API key": {
                "value": {
                  "detail": "You do not have permission to perform this action."
                }
              },
              "Not enough credits": {
                "value": {
                  "detail": "You don't have enough credits to perform this request. Please top up at https://business.didit.me",
                  "code": "insufficient_credits"
                }
              }
            }
          }
        }
      }
    },
    "parameters": {
      "WebhookSignature": {
        "name": "X-Signature",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "送信先のシークレットをキーとした、受信したままの生のリクエスト本文の小文字16進HMAC-SHA256。"
      },
      "WebhookSignatureV2": {
        "name": "X-Signature-V2",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "送信先のシークレットをキーとした、本文の正規化JSON（キーをソートし、空白なし、非ASCII文字はエスケープしない）の小文字16進HMAC-SHA256。本文を再エンコードするミドルウェアを経由しても有効なため、推奨されます。"
      },
      "WebhookSignatureSimple": {
        "name": "X-Signature-Simple",
        "in": "header",
        "required": true,
        "deprecated": true,
        "schema": {
          "type": "string"
        },
        "description": "送信先のシークレットをキーとした、`{timestamp}:{session_id}:{status}:{webhook_type}`（欠落したフィールドは空文字列）の小文字16進HMAC-SHA256。エンベロープのみが対象で、ペイロードは決して対象になりません。"
      },
      "WebhookTimestamp": {
        "name": "X-Timestamp",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Unix時刻(秒)で、本文の`timestamp`と同じ値です。数分以上前の配信は拒否してください。"
      }
    }
  },
  "x-webhooks": {
    "status.updated": {
      "post": {
        "summary": "セッションステータスが変更されました",
        "description": "認証セッションのステータスが変更されました。`decision`は`Approved`、`Declined`、`In Review`、`Abandoned`の場合にのみ送信されます。Webhookバージョン3(デフォルト)の送信先では`GET /v3/session/{sessionId}/decision/`と同じ形式、バージョン1または2の送信先では以前の簡略化された形式になります。企業のセッションは常にバージョン3の企業向け判定を受け取ります。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SessionStatusUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "data.updated": {
      "post": {
        "summary": "セッションデータが変更されました",
        "description": "ステータスの変更を伴わずに認証セッションのデータが変更されたことを示します。たとえば、手動レビューでの編集、ステップのオーバーライド、継続的なモニタリングによる再スクリーニングの後に発生します。`decision`は`Approved`、`Declined`、`In Review`、`Abandoned`の場合にのみ送信されます。Webhookバージョン3（デフォルト）の送信先では`GET /v3/session/{sessionId}/decision/`と同じ形式、バージョン1または2の送信先では従来の簡略化された形式になります。企業セッションには常にバージョン3の企業向け判定が送信されます。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SessionDataUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "user.status.updated": {
      "post": {
        "summary": "ユーザーステータスが変更されました",
        "description": "ユーザーのステータスが変更されました。ユーザーの作成時には送信されません。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserStatusUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "user.data.updated": {
      "post": {
        "summary": "ユーザーデータが変更されました",
        "description": "ユーザーのフィールドが変更されました。ユーザーの作成時には送信されません。1回の保存でステータスイベントとデータイベントの両方が発生することがあります。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserDataUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "business.status.updated": {
      "post": {
        "summary": "企業ステータスが変更されました",
        "description": "企業のステータスが変更されました。企業の作成時には送信されません。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessStatusUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "business.data.updated": {
      "post": {
        "summary": "企業データが変更されました",
        "description": "企業のフィールドが変更されました。企業の作成時には送信されません。1回の保存でステータスイベントとデータイベントの両方が発生することがあります。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessDataUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "transaction.created": {
      "post": {
        "summary": "取引が作成されました",
        "description": "取引が作成され、スクリーニングされました。本番環境のアプリケーションでのみ送信されます。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionCreatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "transaction.status.updated": {
      "post": {
        "summary": "取引ステータスの変更",
        "description": "ルール、レビュー、またはエンドユーザーのアクションによって取引のステータスが変更されました。本番環境のアプリケーションでのみ送信されます。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionStatusUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "travel_rule.status.updated": {
      "post": {
        "summary": "トラベルルールのステータスの変更",
        "description": "トラベルルールのやり取りのステータスが変更されました。`FINISHED`、`CANCELLED`、`EXPIRED`までの（これらを含む）すべての遷移で送信され、それ以降は送信されません。本番アプリケーションに対して送信され、トラベルルールのやり取りについてはサンドボックスアプリケーション（`environment: sandbox`）にも送信されます。トップレベルの`status`はありません。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TravelRuleStatusUpdatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "workflow.compliance_changed": {
      "post": {
        "summary": "ワークフローのコンプライアンスが変更されました",
        "description": "再評価の後、公開済みワークフローのコンプライアンスステータスが変更されました。ワークフローごとに1件のイベントです。トップレベルの`status`はありません。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowComplianceChangedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "kyb.registry_search.resolved": {
      "post": {
        "summary": "企業検索が完了しました(署名なしのコールバック)",
        "description": "登記検索が完了した時点で、`POST /v3/kyb/search/`の`webhook_url`に送信されるコールバックの本文。署名はされていません。リクエストには`X-Didit-Unsigned-Callback: true`が付与され、署名ヘッダーは一切含まれないため、`request_id`を自分が開始した検索と照合して確認してください。`webhook_type`ではなく`event_type`を使用します。",
        "tags": [
          "Webhook"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KYBRegistrySearchResolvedCallback"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    },
    "transaction_rule_suggestions.created": {
      "post": {
        "summary": "取引ルールの提案が作成されました",
        "description": "取引ルール提案の実行により、アプリケーションに対する新しいルール変更が提案されました。ルール提案の設定でWebhook通知が有効になっている場合に送信されます。トップレベルの`status`はありません。",
        "tags": [
          "Webhook"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignature"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureV2"
          },
          {
            "$ref": "#/components/parameters/WebhookSignatureSimple"
          },
          {
            "$ref": "#/components/parameters/WebhookTimestamp"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleSuggestionsCreatedEvent"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "2xxレスポンスはいずれも配信の受領を示します。それ以外のレスポンスやタイムアウトは再試行されます。詳細はこちら：https://docs.didit.me/integration/webhooks"
          }
        }
      }
    }
  }
}
