> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# データモデル：Didit レポートの JSON スキーマ

> Didit の全レポートオブジェクトの正規 JSON スキーマ。NFC、ID、ライブネス、顔照合、AML、IP、住所証明、電話、メール、KYB 法人登記、書類、主要人物に対応。

## 概要

機能ごとのレポートはすべて、`service-didit-verification`で定義されたV3シリアライザーの形式に従います。同じオブジェクトが3か所に現れるため、ここに示すスキーマがそれらすべてに共通する唯一の信頼できる情報源です。

* `GET /v3/session/{sessionId}/decision/`：各機能は複数形の配列として返されます（`id_verifications[]`、`nfc_verifications[]`、`liveness_checks[]`、`face_matches[]`、`poa_verifications[]`、`phone_verifications[]`、`email_verifications[]`、`aml_screenings[]`、`ip_analyses[]`、`database_validations[]`、`questionnaire_responses[]`、`signatures[]`、`bank_verifications[]`（[銀行認証の方法](https://docs.didit.me/ja/core-technology/bank-verification/verification-methods.md#結果で方法を確認する)を参照）、およびKYBの対応項目である`registry_checks[]`、`document_verifications[]`、`key_people_checks[]`）。
* Webhookペイロード（`status.updated`、`data.updated`）：`decision`エンベロープ内で同じ形式です。
* スタンドアロンAPI：単一オブジェクトのレスポンス（顔検索、年齢推定、生体認証）も同じフィールドセットを使用します。

> [!NOTE]
>
> V3ではマルチインスタンスのワークフローが導入されました。すべての機能オブジェクトには`node_id`が含まれ、レポートを生成したワークフローグラフのノードにそのレポートを紐付けます。V2エンドポイント（単数形の`kyc`、`face`、`aml`など）は後方互換性を維持していますが、最初のインスタンスのみを返します。

## 共通フィールド

すべてのレポートオブジェクトは次のフィールドを持ちます。

| フィールド | 型 | 説明 |
| - | - | - |
| `status` | string | 機能レベルのライフサイクルステータス。[ステータスenum](#ステータス列挙値リファレンス)のいずれかの値です。ソース：`common/config/choices.py:FeatureStatusChoices`（343〜348行目）。親セッションの最上位の`status`は、より範囲の広いセッションenum（`StatusChoices`、106〜117行目）を使用します。 |
| `node_id` | string \| null | ワークフローグラフのノード識別子。V3のマルチインスタンスワークフローでは値が設定され、従来の単一機能セッションでは`null`になります。 |
| `warnings` | [警告オブジェクト](#警告オブジェクト)の配列 | この機能と`node_id`で絞り込まれたリスクシグナル。`Session.get_logs(...)`（`sessions/models/session.py:1611`）が返します。 |

メディアフィールド（`portrait_image`、`front_image`、`document_file`など）は、有効期間が限られた事前署名付きURLです。URLを保存するのではなく、速やかにダウンロードしてください。例では`https://<media-host>/...`と表記しています。

## 警告オブジェクト

すべての`warnings[]`配列で返されます。スキーマは`logs/serializers/log.py:8-65`（`LogV3Serializer`）に基づきます。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `feature` | string（enum） | いいえ | 警告を出した機能。値は`LogWarningChoices`（`common/config/choices.py:190-204`）に由来し、`ID_VERIFICATION`、`NFC`、`LIVENESS`、`FACEMATCH`、`PROOF_OF_ADDRESS`、`PHONE`、`EMAIL`、`AML`、`LOCATION`、`DATABASE_VALIDATION`、`QUESTIONNAIRE`、`KYB_REGISTRY`、`KYB_DOCUMENTS`、`KYB_KEY_PEOPLE`のいずれかです。 | `"ID_VERIFICATION"` |
| `risk` | string | いいえ | 固定のリスクコード（例：`DOCUMENT_EXPIRED`、`LOW_LIVENESS_SCORE`）。値は`logs/choices.py:RiskChoices`に由来します。説明テーブルのキーとして使用されます。 | `"DOCUMENT_EXPIRED"` |
| `additional_data` | object \| null | はい | リスク固有のコンテキスト（例：スコアのしきい値、一致したフィールド）。形式はリスクコードによって異なります。 | `{ "score": 42.1, "threshold": 70 }` |
| `log_type` | string（enum） | いいえ | `error`、`warning`、`information`のいずれか。`LogTypeChoices`（`common/config/choices.py:207-210`）に由来します。 | `"error"` |
| `short_description` | string | いいえ | リスクを表す、人が読める形式のラベル。`logs/choices.py:RISK_SHORT_DESCRIPTIONS`に由来します。 | `"Document expired"` |
| `long_description` | string | いいえ | エンドユーザー向けの画面での表示に適した、人が読める形式の詳しい説明。`logs/choices.py:RISK_LONG_DESCRIPTIONS`に由来します。 | `"The document's expiration date has passed, rendering it no longer valid for use."` |
| `node_id` | string \| null | はい | 警告の発生元となったワークフローグラフのノード。`node_id`を持たない従来のV2ログでは`null`になります。 | `"first_id_verification"` |

```json theme={null}
{
  "feature": "ID_VERIFICATION",
  "risk": "DOCUMENT_EXPIRED",
  "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.",
  "node_id": "first_id_verification"
}
```

## レポートオブジェクト

残りのセクションでは、機能ごとのレポートオブジェクトを説明します。H3見出しのテキストは、他のドキュメントからディープリンクできるよう意図的に固定しています。

### 本人確認

ユーザーが提出したKYC/本人確認書類ごとに返されます。`GET /v3/session/{sessionId}/decision/`では`id_verifications[]`として、V2のレスポンスでは`kyc`フィールド内に含まれます。ソース：`kyc/serializers/kyc.py:383-414`（`IDVerificationV3Serializer`。`kyc/serializers/kyc.py:320-380`の`IDVerificationV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `document_type` | string | はい | 人が読める形式の書類クラス（`Passport`、`Identity Card`、`Driver's License`、`Residence Permit`、`Health Insurance Card`、`Tax Card`、`Social Security Card`、`Work Permit`、`Visa`、`Public Service Card`、`Birth Certificate`、`Firearm License`、`Other`）。ソース：`DOC_TYPE_MAPPING`（`common/config/choices.py:1275-1289`）。 | `"Passport"` |
| `document_subtype` | string | はい | Diditの書類レジストリにおける書類サブタイプコードで、ワークフローの書類設定で受け付けるものに絞り込まれます。地域固有の書類には地域が含まれます。コードの一覧：[書類サブタイプ](https://docs.didit.me/ja/core-technology/id-verification/document-subtypes-id-verification.md)。 | `"QUEENSLAND_DRIVER_LICENSE_GENERIC"` |
| `document_number` | string | はい | OCRで抽出された書類番号。 | `"AB1234567"` |
| `personal_number` | string | はい | OCRで抽出された個人番号/国民識別番号。 | `"99999999R"` |
| `portrait_image` | string (URL) | はい | 顔部分の切り抜き画像の署名付きURL。 | `"https://<media-host>/.../portrait.jpg?..."` |
| `front_image` | string (URL) | はい | 補正済みの書類表面画像の署名付きURL。 | `"https://<media-host>/.../front.jpg?..."` |
| `front_video` | string (URL) | はい | 表面撮影時の動画の署名付きURL（利用可能な場合）。 | `"https://<media-host>/.../front.mp4?..."` |
| `back_image` | string (URL) | はい | 補正済みの書類裏面画像の署名付きURL。 | `"https://<media-host>/.../back.jpg?..."` |
| `back_video` | string (URL) | はい | 裏面撮影時の動画の署名付きURL。 | `null` |
| `full_front_image` | string (URL) | はい | 切り抜き前（フルフレーム）の表面撮影画像。 | `"https://<media-host>/.../full_front.jpg?..."` |
| `full_back_image` | string (URL) | はい | 切り抜き前（フルフレーム）の裏面撮影画像。 | `null` |
| `front_image_camera_front` | string (URL) | はい | 書類表面の撮影と同時にフロントカメラで撮影された画像。 | `null` |
| `back_image_camera_front` | string (URL) | はい | 書類裏面の撮影と同時にフロントカメラで撮影された画像。 | `null` |
| `front_image_camera_front_face_match_score` | float (0-100) | はい | 書類の顔写真とフロントカメラ撮影画像の類似度。 | `null` |
| `back_image_camera_front_face_match_score` | float (0-100) | はい | 上記と同じですが、裏面撮影が対象です。 | `null` |
| `document_selfie_face_matches` | array | はい | 書類撮影中に撮影されたセルフィーと一致した過去のセッション、または顔のブロックリストのエントリ。エントリの形式は`liveness_checks[].matches`と同じです。検索が実行されなかった場合は`null`、一致がなかった場合は`[]`です。 | `null` |
| `front_image_quality_score` | object | はい | 表面画像の品質指標：0-100のスコア（`focus_score`、`brightness_score`、`resolution_score`、`overall_score`）に加え、`brightness_issue`（`ok`、`too_dark`、`too_bright`）と`is_document_fully_visible`（boolean）。 | `{ "focus_score": 91.0, "overall_score": 88.5 }` |
| `back_image_quality_score` | object | はい | `front_image_quality_score`と同じ形式です。 | `null` |
| `date_of_birth` | string (YYYY-MM-DD) | はい | OCRで抽出された生年月日。 | `"1990-05-12"` |
| `age` | integer | はい | 抽出時点で算出された年齢（年単位）。 | `35` |
| `expiration_date` | string (YYYY-MM-DD) | はい | 書類の有効期限。 | `"2032-05-11"` |
| `date_of_issue` | string (YYYY-MM-DD) | はい | 書類の発行日。 | `"2022-05-11"` |
| `issuing_state` | string (ISO 3166-1 alpha-3) | はい | 発行国コード。 | `"ESP"` |
| `issuing_state_name` | string | はい | ローカライズされた発行国名。 | `"Spain"` |
| `first_name` | string | はい | OCRで抽出された名（複数の場合あり）。 | `"María"` |
| `last_name` | string | はい | OCRで抽出された姓（複数の場合あり）。 | `"García López"` |
| `full_name` | string | はい | 正規化された氏名（ベンダー提供）。 | `"María García López"` |
| `gender` | string | はい | `M`、`F`、またはベンダーが提供するその他の値。 | `"F"` |
| `address` | string | はい | OCRで抽出された未加工の住所行。 | `"Calle Mayor 1, 28001 Madrid"` |
| `formatted_address` | string | はい | ジオコーディング/整形済みの住所（解析可能な場合）。 | `"Calle Mayor 1, 28001 Madrid, Spain"` |
| `parsed_address` | object | はい | 構造化され、ジオコーディングされた住所：`street_1`、`street_2`、`city`、`region`、`country`、`postal_code`、`address_type`、`formatted_address`、`document_location`（`{latitude, longitude}`）、`raw_results`、`is_best_match`。ソース：`kyc/utils/address.py:147-197`。 | `{ "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" }` |
| `place_of_birth` | string | はい | OCRで抽出された出生地。 | `"Madrid"` |
| `marital_status` | string | はい | 抽出可能な場合に返されます。 | `null` |
| `nationality` | string (ISO 3166-1 alpha-3) | はい | OCRで抽出された国籍。 | `"ESP"` |
| `extra_fields` | object | はい | 標準スキーマに含まれない、書類タイプ固有のフィールド（例：運転免許証の区分）。 | `{ "DL Class": "B" }` |
| `mrz` | object | はい | MRZが存在する場合に解析されたMRZフィールド（`document_number`、`birth_date`、`expiry_date`、`surname`、`given_names`、…）。 | `{ "document_number": "AB1234567", "surname": "GARCIA", "given_names": "MARIA" }` |
| `extra_files` | array of strings (URL) | いいえ | 追加でアップロードされたファイルの署名付きURL。 | `[]` |
| `matches` | array of objects | いいえ | セッション間での書類の一致。各項目：`{ session_id, session_number, vendor_data, verification_date, user_details: { name, document_type, document_number }, status, is_blocklisted, api_service, front_image_url }`。`front_image_url`は署名付きURLです。 | `[]` |
| `verification_method` | string | No | この行を生成した[本人確認の方式](https://docs.didit.me/ja/core-technology/id-verification/verification-methods.md)：`document`、`id_lookup`、`wallet`のいずれか。撮影された書類の場合は常に`document`です。ほかの方式が導入される前に作成されたすべてのセッションも含みます。 | `"id_lookup"` |
| `assurance` | string | No | `verification_method`から導出される保証レベル：`documentary`、`data_match`、`cryptographic`のいずれか。 | `"data_match"` |
| `wallet_provider` | string \| null | Yes | この行をウォレットが生成した場合の、カタログ上のウォレットID（`mitid`、`bankid_se`、`itsme`など）。それ以外の場合は`null`。 | `"mitid"` |
| `fallback_from` | object \| null | Yes | 書類以外の方式がIDステップを終了させた理由：`{ method, reason, action }`。照会またはウォレットでのサインインが失敗し、その国の切り替え設定が`decline`だった場合に、却下された行に設定されます。現在のステージング環境では、フォールバック後に生成された書類認証にもこの値が保持されます。本番環境への展開状況を確認してください。それ以前に書類以外の方式の失敗が記録されていない場合は`null`。 | `{ "method": "id_lookup", "reason": "no_match", "action": "decline" }` |
| `id_lookup` | object \| null | Yes | 情報源の証拠。`verification_method`が`id_lookup`の場合のみ存在します：`source`（照会した正確な情報源。ほとんどの国では政府の登録簿、一部の国では信用情報機関または住民記録のファイル）、`checked_at`、`attempts`、`max_attempts`、`outcome`（`match`、`partial_match`、`no_match`、`provider_error`、`format_rejected`）、`comparison[]`（`{ field, label, provided, record, result }`。`field`は`identification_number`、`full_name`、`date_of_birth`、`address`のいずれかで、`result`は`match`、`partial`、`no_match`のいずれかです。以前のリリースでは`error`付きの`provider`行が含まれる場合があります）、`source_errors[]`（現在のステージング環境：情報源ごとの個別の診断情報。本番環境への展開状況を確認してください）、`registry_portrait`（署名付きURL。顔画像を返す情報源の場合のみ）、`face_match_score`。 | 下記参照 |
| `wallet_verification` | object \| null | Yes | 認証情報の証拠。`verification_method`が`wallet`の場合のみ存在します：`provider`、`provider_name`、`issuing_authority`、`issuing_country`、`credential_type`、`level_of_assurance`（`low`、`substantial`、`high`）、`verified_at`、`signature_valid`、`attributes`（ウォレットが共有した情報）、`portrait`（ウォレットが顔画像を共有する場合の署名付きURL）、`face_match_score`。 | 下記参照 |
| `document_liveness` | object \| null | Yes | 不正の種類ごと（`portrait_replace`、`printed_copy`、`screen_replay`）の書類ライブネススコア。警告が発生したかどうかにかかわらず報告されます。各項目：`score`（0-100。高いほど本物である可能性が高い。低い方の面の値で、判定に使用された値）、`front`、`back`、`decline_threshold`、`review_threshold`、`bucket`（`approve`、`review`、`decline`、または`null`）。しきい値とバケットは評価時点で保存されます。過去の評価の証拠が利用できない場合は3つすべてが`null`になりますが、保存済みのスコアは引き続き表示されます。チェックが実行されなかった場合は`null`。[書類ライブネススコア](https://docs.didit.me/ja/core-technology/id-verification/report-id-verification.md#書類の真正性検知スコア)を参照してください。V3のみ。 | `{ "portrait_replace": { "score": 96.46, "bucket": "approve" } }` |
| `node_id` | string \| null | Yes | ワークフローのノード識別子（V3）。 | `"first_id_verification"` |
| `warnings` | array | No | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |
| `region` | string | Yes | 書類で特定される場合、発行国の地域または州。 | `"CA"` |
| `extracted_data` | object | Yes | 書類から抽出され、本人に確認のため表示されたデータのスナップショット。確認済みの値と比較できるよう、その値と並べて保持されます。本人に確認を求めなかった場合は`null`。 | |
| `barcodes` | array of objects | No | 書類のバーコードから読み取ったデータ。バーコードごとに1件のエントリがあり、`type`、`position`、`data`、`data_raw`、`side`を含みます。バーコードがない場合は`[]`。 | `[]` |

```json theme={null}
{
  "status": "Approved",
  "document_type": "Passport",
  "document_subtype": "PASSPORT_GENERIC",
  "document_number": "AB1234567",
  "personal_number": "99999999R",
  "portrait_image": "https://<media-host>/.../portrait.jpg?signature=...",
  "front_image": "https://<media-host>/.../front.jpg?signature=...",
  "front_video": null,
  "back_image": "https://<media-host>/.../back.jpg?signature=...",
  "back_video": null,
  "full_front_image": "https://<media-host>/.../full_front.jpg?signature=...",
  "full_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": 91.0,
    "brightness_score": 88.0,
    "brightness_issue": "ok",
    "is_document_fully_visible": true,
    "resolution_score": 95.0,
    "overall_score": 88.5
  },
  "back_image_quality_score": null,
  "date_of_birth": "1990-05-12",
  "age": 35,
  "expiration_date": "2032-05-11",
  "date_of_issue": "2022-05-11",
  "issuing_state": "ESP",
  "issuing_state_name": "Spain",
  "first_name": "María",
  "last_name": "García López",
  "full_name": "María García López",
  "gender": "F",
  "address": "Calle Mayor 1, 28001 Madrid",
  "formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
  "parsed_address": { "street_1": "Calle Mayor 1", "street_2": null, "city": "Madrid", "region": "Madrid", "postal_code": "28001", "country": "ES", "address_type": "Calle" },
  "place_of_birth": "Madrid",
  "marital_status": null,
  "nationality": "ESP",
  "extra_fields": {},
  "mrz": {
    "document_number": "AB1234567",
    "surname": "GARCIA",
    "given_names": "MARIA",
    "birth_date": "900512",
    "expiry_date": "320511"
  },
  "extra_files": [],
  "matches": [],
  "node_id": "first_id_verification",
  "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"
    }
  },
  "warnings": []
}
```

書類以外の方式を使用した場合の同じオブジェクトです。変わるのは方式固有のキーのみです。書類の読み取りで入力される項目はすべて、代わりに登録簿のレコードまたはウォレットの属性から入力され、該当しないキーは`null`になります。

```json theme={null}
{
  "status": "Approved",
  "issuing_state": "ZAF",
  "first_name": "Thabo",
  "last_name": "Mokoena",
  "full_name": "Thabo Mokoena",
  "date_of_birth": "1991-06-15",
  "personal_number": "9106155043088",
  "node_id": "first_id_verification",
  "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?signature=...",
    "face_match_score": 96.4
  },
  "wallet_verification": null,
  "warnings": []
}
```

```json theme={null}
{
  "status": "Approved",
  "issuing_state": "DNK",
  "first_name": "Freja",
  "last_name": "Nielsen",
  "full_name": "Freja Nielsen",
  "date_of_birth": "1988-03-02",
  "node_id": "first_id_verification",
  "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認証

ID書類に対して読み取られたチップごとに返されます。対象は、ICAO 9303のePassportまたはeIDチップ、あるいはJPKI経由で読み取った日本のマイナンバーカード（`chip_protocol: "jpki"`）です。`GET /v3/session/{sessionId}/decision/`の`nfc_verifications[]`として表示されます（親KYCレコード1件につき1つ）。ソース：`kyc/serializers/epassport.py:121-139`（`NFCV3Serializer`。`kyc/serializers/epassport.py:83-118`の`NFCV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | No | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `portrait_image` | string (URL) | Yes | チップから抽出された顔画像の署名付きURL。 | `"https://<media-host>/.../nfc_portrait.jpg?..."` |
| `signature_image` | string (URL) | Yes | チップから抽出された署名画像の署名付きURL（チップに保存されている場合）。 | `null` |
| `chip_data` | object | Yes | チップのData Groupsから解析し、フラット化した個人データ（`kyc/utils/epassport.py:165-212`）：`dgs`（読み取ったData Groups）、`surname`、`name`、`country`、`nationality`、`birth_date`（`YYYY-MM-DD`）、`expiry_date`（`YYYY-MM-DD`）、`sex`（`M`/`F`）、`document_type`（MRZの書類コード）、`document_number`、`optional_data`、MRZのチェックディジット（`birth_date_hash`、`expiry_date_hash`、`document_number_hash`、`optional_data_hash`、`final_hash`）、`mrz_string`、`mrz_type`（`TD1`/`TD2`/`TD3`）。さらに、チップがDG11を保持している場合は`place_of_birth`と`address`（非ラテン文字の氏名の場合は`full_name` / `full_name_non_latin`も）が含まれます。それ以外の場合、これらのキーは存在しません。NFCステップがスキップされた場合は`null`。 | `{ "document_number": "AB1234567", "name": "MARIA" }` |
| `authenticity` | object | Yes | `{ sod_integrity, dg_integrity }`。JPKIによる読み取りの場合は`null`。`sod_integrity`は、Document Security Object（SOD）の署名が発行国の有効なCSCAまで連鎖していること（かつDSCが失効も期限切れもしていないこと）を検証します。`dg_integrity`は、各Data Groupのハッシュが SODと一致することを検証します。両方が`true`の場合、チップは本物で改ざんされていないことを意味します。 | `{ "sod_integrity": true, "dg_integrity": true }` |
| `certificate_summary` | object | はい | 文書署名者証明書の概要（`kyc/utils/epassport.py:338-348`）: `issuer`、`subject`、`serial_number`（integer）、`not_valid_before`、`not_valid_after`（`YYYY-MM-DD HH:MM:SS`）、および`validation`オブジェクト`{ csca_verified, dsc_revoked, dsc_expired, csca_expired }`（`kyc/views/epassport.py:86`）。 | `{ "issuer": "Common Name: CSCA SPAIN, Country: ES", "not_valid_after": "2031-02-18 10:21:11" }` |
| `node_id` | string \| null | はい | ワークフローのノード識別子（V3）。 | `"first_nfc"` |
| `is_nfc_skipped` | boolean | いいえ | このNFCステップが読み取られずに明示的にスキップされた場合は`true`です。理由は`skip_reason`に示されます。 | `false` |
| `skip_reason` | string | はい | ステップがスキップされた理由。`is_nfc_skipped`が`true`の場合にのみ設定されます。`USER_SKIPPED`、`DOCUMENT_WITHOUT_CHIP`、`CHIP_CERTIFICATE_UNAVAILABLE`、`DEVICE_WITHOUT_NFC`、`INTEGRATION_WITHOUT_NFC_ACCESS`、`MRZ_KEY_UNAVAILABLE`、`JPKI_UNAVAILABLE`のいずれかです。[スキップ理由](https://docs.didit.me/ja/core-technology/nfc-verification/warnings-nfc-verification.md#スキップ理由)を参照してください。判定ペイロードには、同じ分類を使うセッションレベルの`nfc_skip_reason`も含まれ、レポートが作成される前に省略されたNFCステップを対象とします。 | `null` |
| `chip_protocol` | string | いいえ | チップの読み取り方式: `icao`（ICAO 9303のeパスポートまたはeIDチップ）または`jpki`（日本のマイナンバーカード）。`jpki`の場合、`portrait_image`、`signature_image`、`chip_data`、`authenticity`、`certificate_summary`は`null`になります。スキップされたステップにも設定されます。 | `"icao"` |
| `jpki` | object | はい | マイナンバーカードの読み取りで証明された内容: `certificate_types`、`chain_valid`、`signature_valid`、`revocation_status`（`good`、`revoked`、`unchecked`のいずれか）、`ca_generation`、`certificate_expires_at`、`certificates[]`、`attributes`（署名用証明書の氏名、生年月日、性別、住所）、`attributes_match_ocr`、`mismatched_attributes`。証明書そのもの、そのシリアル番号、署名は決して含まれません。ICAOチップの場合、スキップされたステップの場合、およびカードを一度も読み取らずにステップが終了した場合は`null`です。[JPKIフィールド](https://docs.didit.me/ja/core-technology/nfc-verification/report-nfc-verification.md#jpkiフィールド)を参照してください。 | `null` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

```json theme={null}
{
  "status": "Approved",
  "portrait_image": "https://<media-host>/.../nfc_portrait.jpg?signature=...",
  "signature_image": null,
  "chip_data": {
    "dgs": ["DG1", "DG2", "DG11"],
    "surname": "GARCIA LOPEZ",
    "name": "MARIA",
    "country": "ESP",
    "nationality": "ESP",
    "birth_date": "1990-05-12",
    "expiry_date": "2032-05-11",
    "sex": "F",
    "document_type": "P",
    "document_number": "AB1234567",
    "optional_data": "",
    "birth_date_hash": "4",
    "expiry_date_hash": "7",
    "document_number_hash": "3",
    "optional_data_hash": "",
    "final_hash": "8",
    "mrz_string": "P<ESPGARCIA<LOPEZ<<MARIA<<<<<<<<<<<<<<<<<<<<AB1234567ESP9005124F3205117<<<<<<<<<<<<<<08",
    "mrz_type": "TD3",
    "place_of_birth": "MADRID",
    "address": "CALLE MAYOR 1, MADRID"
  },
  "authenticity": { "sod_integrity": true, "dg_integrity": true },
  "certificate_summary": {
    "issuer": "Common Name: CSCA SPAIN, 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_before": "2020-11-18 10:21:11",
    "not_valid_after": "2031-02-18 10:21:11",
    "validation": {
      "csca_verified": true,
      "dsc_revoked": false,
      "dsc_expired": false,
      "csca_expired": false
    }
  },
  "node_id": "first_nfc",
  "is_nfc_skipped": false,
  "skip_reason": null,
  "chip_protocol": "icao",
  "jpki": null,
  "warnings": []
}
```

### ライブネスチェック

ライブネスセッションごとに返されます。`GET /v3/session/{sessionId}/decision/`では`liveness_checks[]`として含まれます。ソース: `face/serializers/face.py:301-320`（`LivenessV3Serializer`。`face/serializers/face.py:216-298`の`LivenessV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `method` | string (enum) | はい | `ACTIVE_3D`、`FLASHING`、`PASSIVE`のいずれか（`LivenessMethodChoices`、`common/config/choices.py:514-517`）。パッシブは、デスクトップでのセッションが許可されており、かつユーザーがデスクトップを使用している場合に実行されます。 | `"PASSIVE"` |
| `score` | float (0-100) | はい | ライブネスの信頼度。小数点以下2桁に丸められます。 | `92.41` |
| `reference_image` | string (URL) | はい | ユーザーの参照用の顔切り抜き画像への署名付きURL。 | `"https://<media-host>/.../reference.jpg?..."` |
| `video_url` | string (URL) | はい | ライブネス動画への署名付きURL（アクティブモードのみ）。 | `"https://<media-host>/.../liveness.webm?..."` |
| `age_estimation` | float | はい | 参照画像内で最も大きい顔の推定年齢（年単位）。 | `34.2` |
| `matches` | array of objects | いいえ | セッションをまたいだ顔の一致結果。各要素: `{ session_id, session_number, similarity_percentage, vendor_data, vendor_user_id, biometric_template_id, verification_date, user_details: { full_name, document_type, document_number }, match_image_url, status, is_blocklisted, is_allowlisted, api_service, source }`。`source`は`session`、`imported`、`list_entry`、`retained_template`のいずれかです。保持されたテンプレートとの一致には`vendor_user_id`、`vendor_data`、`biometric_template_id`が含まれ、セッション、画像、本人情報の詳細、ステータス、APIサービスの各フィールドは`null`になります。 | `[]` |
| `face_quality` | float (0-100) | はい | パッシブライブネスの顔品質スコア（パーセンテージに正規化）。 | `87.50` |
| `face_luminance` | float (0-100) | はい | パッシブライブネスの顔輝度スコア（0-255からパーセンテージに正規化）。 | `54.12` |
| `node_id` | string \| null | はい | ワークフローのノード識別子（V3）。 | `"first_liveness"` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

```json theme={null}
{
  "status": "Approved",
  "method": "PASSIVE",
  "score": 92.41,
  "reference_image": "https://<media-host>/.../reference.jpg?signature=...",
  "video_url": null,
  "age_estimation": 34.2,
  "matches": [],
  "face_quality": 87.50,
  "face_luminance": 54.12,
  "node_id": "first_liveness",
  "warnings": []
}
```

### 顔照合

顔照合の比較ごとに返されます（通常は、ユーザーのライブネス時の顔と書類の顔写真との比較）。`GET /v3/session/{sessionId}/decision/`では`face_matches[]`として含まれます。ソース: `face/serializers/face.py:367-389`（`FaceMatchV3Serializer`。`face/serializers/face.py:323-364`の`FaceMatchV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `score` | float (0-100) | はい | 類似度。小数点以下2桁に丸められます。プロバイダーが`unmatched_faces[].Confidence`のみを返す場合は、`100 - confidence`に変換されます。 | `97.83` |
| `source_image_session_id` | string (UUID) | はい | 保存済みの顔写真がソース（参照）画像として使われたセッション。顔写真ベースのフロー（生体認証、またはセッション作成時に顔写真が渡された場合）で設定されます。参照画像が同じセッションの書類の顔写真である場合は`null`です。 | `null` |
| `source_image` | string (URL) | はい | ソース（参照）画像への署名付きURL。通常は書類の顔写真で、生体認証フローでは保存済みの顔写真です。 | `"https://<media-host>/.../source.jpg?..."` |
| `target_image` | string (URL) | はい | ライブネス中に撮影されたターゲット（ライブの顔）画像への署名付きURL。 | `"https://<media-host>/.../target.jpg?..."` |
| `node_id` | string \| null | はい | ワークフローのノード識別子（V3）。 | `"first_face_match"` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |
| `face_coverage` | object | はい | 撮影画像で`eyes`、`mouth`、`face`が覆われているかどうか。各領域には`covered`、`calibrated`、`visibility_score`があります。`calibrated: false`は、どの警告にも使われないシャドー（参考用）の証拠であることを意味します。`GET /v3/session/{sessionId}/decision/`でのみ返され、Webhookペイロードには決して含まれません。 | `{ "eyes": { "covered": false, "calibrated": true, "visibility_score": 0.98 } }` |

```json theme={null}
{
  "status": "Approved",
  "score": 97.83,
  "source_image_session_id": null,
  "source_image": "https://<media-host>/.../source.jpg?signature=...",
  "target_image": "https://<media-host>/.../target.jpg?signature=...",
  "node_id": "first_face_match",
  "warnings": []
}
```

### 顔検索

スタンドアロンの顔検索API(`POST /v3/face-search/`)から返されます。顔検索が`/v3/session/{sessionId}/decision/`で複数形の配列として現れることはありません。`save_api_request=true`で保存した場合、そのセッションは`features[]`内の`FACE_SEARCH`エントリと、保存された`matches`を持つ`liveness_checks[]`の項目として表示されます。ソース: `apis/serializers/face_search.py:8-79`(`FaceSearchDetailsSerializer`をラップする`FaceSearchResponseSerializer`)。マッチの辞書は`face/utils/utils.py:869-884`で構築されます。

トップレベルのレスポンス:

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `request_id` | string (UUID) | いいえ | `save_api_request=true`の場合は保存されたセッションID(`GET /v3/session/{sessionId}/decision/`で使用可能)、それ以外の場合は一時的な相関UUIDです。 | `"4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f"` |
| `face_search` | object | いいえ | 検索詳細のペイロードです。以下のフィールドを参照してください。 | - |
| `vendor_data` | string | はい | リクエストの`vendor_data`をそのまま返します。 | `null` |
| `metadata` | object | はい | リクエストの`metadata`をそのまま返します。 | `null` |
| `created_at` | string (ISO 8601) | いいえ | サーバー側のリクエストタイムスタンプです。 | `"2026-06-12T01:04:42.763237+00:00"` |

`face_search`オブジェクト:

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | `FACE_IN_BLOCKLIST`または`POSSIBLE_FACE_IN_BLOCKLIST`の警告が発生した場合にのみ`Declined`、それ以外は`Approved`です。重複マッチだけで却下されることはありません(`apis/views/face_search.py:242-248`)。 | `"Approved"` |
| `total_matches` | integer | いいえ | `matches[]`で返されたマッチの数(0〜5)です。 | `1` |
| `matches` | array of [face-search match objects](#顔検索のマッチオブジェクト) | いいえ | 類似度の下限を超えたマッチを最大5件、類似度の降順で返します(`search_type=blocklisted_or_approved`の場合はブロックリスト登録済みのエントリが先頭)。 | `[…]` |
| `user_image` | object | いいえ | 送信された画像の検出結果です: `{ entities: [{ bbox, confidence }], best_angle }`。検出された顔1つにつき1エンティティです。 | `{ "entities": [{ "bbox": [40, 40, 120, 120], "confidence": 0.73 }], "best_angle": 0 }` |
| `warnings` | array of objects | いいえ | このスタンドアロンAPI向けの簡略化された警告の形式で、`node_id`はありません。シリアライザーの仕様では`{ risk, additional_data, log_type, short_description, long_description }`が宣言されています(`apis/serializers/face_search.py:49-54`)。実行時のペイロードには`feature`も含まれ、常に`"LIVENESS"`です(`apis/views/face_search.py:332-341`)。 | `[]` |

#### 顔検索のマッチオブジェクト

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `session_id` | string (UUID) | はい | マッチした認証セッションです。`source`が`imported`、`list_entry`、`retained_template`の場合は`null`です。 | `"a3f2a6f1-…"` |
| `session_number` | integer | はい | マッチしたセッションのコンソール表示用の番号です。セッション以外のマッチでは`null`です。 | `1024` |
| `similarity_percentage` | float (0-100) | いいえ | 送信された顔とマッチした顔の類似度です。 | `96.42` |
| `source` | string (enum) | いいえ | マッチした顔の登録元です: `session`(認証セッションまたは保存されたスタンドアロン呼び出し)、`imported`(ユーザープロファイルへの直接の顔アップロード)、`list_entry`(リストに紐づけられた顔)、`retained_template`(元のセッションが削除された後に保持された、画像を含まない[生体認証テンプレート](https://docs.didit.me/ja/management-api/biometric-templates/overview.md))。 | `"session"` |
| `vendor_data` | string | はい | マッチしたセッションの`vendor_data`です。`imported`および`retained_template`のマッチでは、紐づけられたUserの値です。 | `"user-12345"` |
| `vendor_user_id` | string (UUID) | はい | 紐づけられたUserです。`list_entry`のマッチ、およびUserのないセッションでは`null`です。 | `"2f7c1a9e-…"` |
| `biometric_template_id` | string (UUID) | はい | マッチした保持テンプレートです。`retained_template`のマッチでのみ設定されます。`GET`/`DELETE /v3/biometric-templates/{id}/`で使用します。 | `null` |
| `verification_date` | string (ISO 8601) | はい | マッチした顔が撮影された日時、または`retained_template`が保持された日時です。`list_entry`のマッチでは`null`です。 | `"2024-11-04T09:14:02Z"` |
| `user_details` | object | はい | マッチしたセッションの書類認証から得た`{ full_name, document_type, document_number }`です。`imported`のマッチでは`full_name`のみ設定されます。本人情報が存在しない場合は`null`で、`retained_template`のマッチでは常に`null`です。 | `{ "full_name": "María García López", "document_type": "Passport", "document_number": "AB1234567" }` |
| `match_image_url` | string (URL) | はい | マッチしたユーザーの参照用の顔画像です。`save_api_request=true`の場合は署名付きURL、それ以外の場合はストレージの生のパスです。画像を保持しない`retained_template`のマッチでは常に`null`です。 | `"https://<media-host>/.../matched.jpg?..."` |
| `status` | string | はい | マッチしたセッションの認証ステータスです([Status enum](#ステータス列挙値リファレンス)を参照)。セッション以外のマッチでは`null`です。 | `"Approved"` |
| `is_blocklisted` | boolean | いいえ | マッチした顔が顔のブロックリストに含まれているかどうかです。`retained_template`のマッチでは常に`false`です。ブロックリストに登録された顔は、別途`list_entry`のマッチとして報告されます。 | `false` |
| `is_allowlisted` | boolean | いいえ | マッチした顔がいずれかの許可リストに含まれているかどうかです。 | `false` |
| `api_service` | string (enum) | はい | マッチしたセッションの大文字のスタンドアロンAPI種別です(例: `PASSIVE_LIVENESS`、`FACE_MATCH`)。ワークフローのセッションおよびセッション以外のマッチでは`null`です。 | `null` |

```json theme={null}
{
  "request_id": "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f",
  "face_search": {
    "status": "Approved",
    "total_matches": 1,
    "matches": [
      {
        "session_id": "a3f2a6f1-1c1c-4eec-8b69-1c1c2f3a2c7f",
        "session_number": 1024,
        "similarity_percentage": 96.42,
        "source": "session",
        "vendor_data": "user-12345",
        "verification_date": "2024-11-04T09:14:02Z",
        "user_details": {
          "full_name": "María García López",
          "document_type": "Passport",
          "document_number": "AB1234567"
        },
        "match_image_url": "https://<media-host>/.../matched.jpg?signature=...",
        "status": "Approved",
        "is_blocklisted": false,
        "is_allowlisted": false,
        "api_service": null
      }
    ],
    "user_image": {
      "entities": [
        {
          "bbox": [40, 40, 120, 120],
          "confidence": 0.732973
        }
      ],
      "best_angle": 0
    },
    "warnings": []
  },
  "vendor_data": null,
  "metadata": null,
  "created_at": "2026-06-12T01:04:42.763237+00:00"
}
```

### AMLスクリーニング

スクリーニング対象のエンティティごとに返されます。KYCとKYBの両方のセッションで、`GET /v3/session/{sessionId}/decision/`の`aml_screenings[]`として表示されます。ソース: `aml/serializers/aml.py:63-85`(`AMLV3Serializer`。`aml/serializers/aml.py:28-60`の`AMLV2Serializer`を拡張)。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [Status enum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `total_hits` | integer | いいえ | スクリーニングのヒット数です(常に存在し、デフォルトは`0`)。 | `2` |
| `entity_type` | string (enum) | はい | `person`または`company`です(`EntityTypeChoices`、`common/config/choices.py:675-677`)。 | `"person"` |
| `hits` | array of objects | いいえ | ヒット1件につき1エントリです。主なフィールド: `id`、`caption`、`match`(bool)、`target`(bool \| null。エンティティが掲載の直接の対象かどうか)、`match_score`(本人一致の信頼度を示す0-100のfloat)、`risk_score`(エンティティのリスクを示す0-100のfloat)、`score`(非推奨の0-1のfloat)、`datasets[]`(例: `PEP`、`PEP Level 1`-`4`、`Sanctions`、`Adverse Media`、`Warnings and Regulatory Enforcement`、`Fitness and Probity`)、`properties`(氏名、別名、生年月日など)、`features`、`url`、`first_seen`、`last_seen`、`rca_name`、`risk_view`、`score_breakdown`、`pep_matches`、`sanction_matches`、`warning_matches`、`adverse_media_matches`、`adverse_media_details`、`linked_entities`、`additional_information`、および`review_status`(`Unreviewed`、`Confirmed Match`、`False Positive`、`Inconclusive`。AMLヒットステータス更新エンドポイントで編集可能、`AMLHitStatusChoices`)。 | `[…]` |
| `score` | float (0-100) | はい | 総合スクリーニングスコア。`False Positive`とマークされていないヒットのうち最も高い`risk_score`です（`aml/services/aml.py:832-842`）。すべてのヒットが誤検知の場合は`0`になります。算出されるまでは`null`です。 | `42.7` |
| `screened_data` | object | はい | スクリーニングに送信されたデータのスナップショット：`full_name`、`nationality`、`date_of_birth`、`document_number`。 | `{ "full_name": "María García López", "date_of_birth": "1990-05-12" }` |
| `is_ongoing_monitoring_enabled` | boolean | いいえ | エンティティが継続的なモニタリングによる再スクリーニングに登録されているかどうか。 | `false` |
| `next_ongoing_monitoring_bill_date` | string (YYYY-MM-DD) | はい | 継続的なモニタリングが有効な場合、`last_aml_bill_date + 365 days`として算出されます。スクリーニング日ではなく**請求**日です。 | `null` |
| `last_ongoing_screening_at` | string (ISO 8601) | はい | 継続的なモニタリングがこのレコードの再スクリーニングを最後に完了した日時です。結果が変わったかどうかは問いません。一度も再スクリーニングされていない場合は`null`で、遡って値が埋められることはありません。 | `"2026-09-12T04:03:11Z"` |
| `last_ongoing_screening_datasets_updated_at` | string (ISO 8601) | はい | そのスクリーニングについてプロバイダーが報告した、最新のAMLデータセット更新日時です。データセットの日付が報告されなかった場合は`null`で、推定されることはありません。 | `null` |
| `node_id` | string \| null | はい | ワークフローノードの識別子（V3）。 | `"first_aml"` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

```json theme={null}
{
  "status": "In Review",
  "total_hits": 1,
  "entity_type": "person",
  "hits": [
    {
      "id": "Q7XW3-aml-hit-1",
      "caption": "Maria Garcia Lopez",
      "match": true,
      "target": true,
      "match_score": 86.4,
      "risk_score": 42.7,
      "datasets": ["PEP Level 2"],
      "properties": {
        "name": ["María García López", "M. García"],
        "alias": ["Maria Garcia"],
        "birthDate": ["1990-05-12"]
      },
      "url": "https://example.org/registry/entities/Q7XW3",
      "first_seen": "2023-11-02T00:00:00Z",
      "last_seen": "2026-05-01T00:00:00Z",
      "review_status": "Unreviewed"
    }
  ],
  "score": 42.7,
  "screened_data": {
    "full_name": "María García López",
    "date_of_birth": "1990-05-12",
    "nationality": "ES",
    "document_number": "AB1234567"
  },
  "is_ongoing_monitoring_enabled": false,
  "next_ongoing_monitoring_bill_date": null,
  "last_ongoing_screening_at": null,
  "last_ongoing_screening_datasets_updated_at": null,
  "node_id": "first_aml",
  "warnings": []
}
```

### IP分析

取得されたネットワークロケーションごとに返されます。KYCセッションとKYBセッションの両方で、`GET /v3/session/{sessionId}/decision/`の`ip_analyses[]`として含まれます。ソース：`kyc/serializers/location.py:196-243`（`IPAnalysisSerializerV3`）。

| フィールド | 型 | null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `node_id` | string \| null | はい | ワークフローノードの識別子（V3）。 | `"first_ip_analysis"` |
| `device_brand` | string | はい | ユーザーエージェントから取得したデバイスのブランド。 | `"Apple"` |
| `device_model` | string | はい | デバイスのモデル。 | `"iPhone"` |
| `browser_family` | string | はい | ブラウザファミリー。 | `"Mobile Safari"` |
| `os_family` | string | はい | OSファミリー。 | `"iOS"` |
| `platform` | string | はい | 大まかなプラットフォーム（`mobile`、`desktop`、`tablet`）。 | `"mobile"` |
| `device_fingerprint` | string | はい | デバイスごとに不変のフィンガープリントハッシュ。 | `"f2a3…"` |
| `ip_country` | string | はい | IPから解決された国名。 | `"Spain"` |
| `ip_country_code` | string (ISO 3166-1 alpha-2) | はい | IPから解決された国コード。 | `"ES"` |
| `ip_state` | string | はい | IPから解決された地域・州。 | `"Comunidad de Madrid"` |
| `ip_city` | string | はい | IPから解決された都市。 | `"Madrid"` |
| `latitude` | float | はい | IPから導出された緯度。 | `40.4168` |
| `longitude` | float | はい | IPから導出された経度。 | `-3.7038` |
| `ip_address` | string | はい | 取得されたIPアドレス。 | `"203.0.113.42"` |
| `isp` | string | はい | ISP名。 | `"Telefonica de Espana"` |
| `organization` | string | はい | 組織名（多くの場合ISPと同じ）。 | `"Telefonica de Espana"` |
| `is_vpn_or_tor` | boolean | はい | IPがVPN、プロキシ、またはTorの出口ノードに属する場合は`true`。 | `false` |
| `is_data_center` | boolean | はい | IPが既知のホスティング・データセンターのASNに属する場合は`true`。 | `false` |
| `time_zone` | string | はい | IANAタイムゾーン名。 | `"Europe/Madrid"` |
| `time_zone_offset` | string | はい | UTCオフセット。 | `"+02:00"` |
| `ip` | object | いいえ | `{ location, distance_from_id_document, distance_from_poa_document }`。`location = { latitude, longitude }`。距離の単位はkmで、どちらか一方が欠けている場合は`null`です。 | `{ "location": { "latitude": 40.4168, "longitude": -3.7038 }, "distance_from_id_document": 3.4, "distance_from_poa_document": 1.1 }` |
| `id_document` | object | いいえ | `{ location, distance_from_ip, distance_from_poa_document }`。本人確認書類の位置は、`issuing_state`と解析済みの住所から解決されます。 | `{ "location": { "latitude": 40.4165, "longitude": -3.7026 }, "distance_from_ip": 3.4, "distance_from_poa_document": 4.0 }` |
| `poa_document` | object | いいえ | `{ location, distance_from_ip, distance_from_id_document }`。住所証明の住所をジオコーディングしたものです。 | `{ "location": { "latitude": 40.4170, "longitude": -3.7040 }, "distance_from_ip": 1.1, "distance_from_id_document": 4.0 }` |
| `matches` | objectの配列 | いいえ | セッション間のIP・デバイスの一致。各項目：`{ session_id, session_number, vendor_data, verification_date, match_type, match_source, matched_value, status, is_blocklisted, api_service, source, device_info, location_info, confidence, match_mode }`。`match_type`は`ip_address`または`device_fingerprint`、`match_source`は`ip_address`、`persistent_id`、`legacy_fp`、`recovered_high`のいずれかです（復元された一致には`recovery_similarity`、`tls_ja4_corroborated`、`recovery_gate_reason`も含まれます）。上限はIPの一致5件とデバイスの一致5件です。 | `[]` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |
| `browser_version`, `os_version` | string | はい | ユーザーエージェントから取得したブラウザとOSのバージョン。 | `"17.4"` |
| `user_agent`, `accept_language` | string | はい | ブラウザが送信したユーザーエージェント文字列と`Accept-Language`ヘッダー。 | `"en-US,en;q=0.9"` |
| `session_identifier`, `session_age_ms` | string, integer | はい | ステップが実行されたブラウジングセッションと、その経過時間（ミリ秒）。 | `48210` |
| `coords_accuracy` | float | はい | デバイスが報告した座標の精度半径（メートル）。 | `35.0` |
| `raw_device_data` | object | はい | ステップで収集された生のデバイスシグナル。 | `{}` |

```json theme={null}
{
  "status": "Approved",
  "node_id": "first_ip_analysis",
  "device_brand": "Apple",
  "device_model": "iPhone",
  "browser_family": "Mobile Safari",
  "os_family": "iOS",
  "platform": "mobile",
  "device_fingerprint": "f2a3c1de8b994a3f9e4cdf3a02b1a7c9",
  "ip_country": "Spain",
  "ip_country_code": "ES",
  "ip_state": "Comunidad de Madrid",
  "ip_city": "Madrid",
  "latitude": 40.4168,
  "longitude": -3.7038,
  "ip_address": "203.0.113.42",
  "isp": "Telefonica de Espana",
  "organization": "Telefonica de Espana",
  "is_vpn_or_tor": false,
  "is_data_center": false,
  "time_zone": "Europe/Madrid",
  "time_zone_offset": "+02:00",
  "ip": {
    "location": { "latitude": 40.4168, "longitude": -3.7038 },
    "distance_from_id_document": 3.4,
    "distance_from_poa_document": 1.1
  },
  "id_document": {
    "location": { "latitude": 40.4165, "longitude": -3.7026 },
    "distance_from_ip": 3.4,
    "distance_from_poa_document": 4.0
  },
  "poa_document": {
    "location": { "latitude": 40.4170, "longitude": -3.7040 },
    "distance_from_ip": 1.1,
    "distance_from_id_document": 4.0
  },
  "matches": [],
  "warnings": []
}
```

### 位置情報検証

[位置情報検証](https://docs.didit.me/ja/core-technology/location-verification/overview.md)ステップごとに返されます。`GET /v3/session/{sessionId}/decision/`の`geolocation_checks[]`として含まれ、ステップごとに1項目で、そのステップで採用された試行が入ります。`geolocation_attempts[]`には、すべてのステップのすべての試行が古い順に列挙されます。このステップを含まないワークフローでは、どちらも`null`です。ソース：`GeolocationDecisionSerializer`。

| フィールド | 型 | null許容 | 説明 | 例 |
| - | - | - | - | - |
| `node_id` | string | はい | 結果を生成したワークフローノード。 | `"geolocation_1"` |
| `status` | string | いいえ | [ステータス列挙型](#ステータス列挙値リファレンス)を参照してください。 | `"Declined"` |
| `outcome` | string | はい | 試行の結果です。`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`のいずれかです。 | `"outside_geofence"` |
| `permission` | string | はい | システムが付与した権限です。`granted_precise`、`granted_approximate`、`denied`、`restricted`、`unavailable`、`timeout`、`dismissed`、または`not_requested`のいずれかです。 | `"granted_precise"` |
| `latitude`, `longitude` | float | はい | WGS84の位置です。位置がない場合は`null`です。 | `48.8566` |
| `accuracy_m` | float | はい | 不確実性の半径(メートル単位)です。 | `35.0` |
| `accuracy_confidence` | string | はい | `p95`、`p68`、または`unspecified`です。 | `"p95"` |
| `measured_at`, `age_seconds` | datetime, integer | はい | デバイスが測位した時刻と、Diditがそれを受信するまでの秒数です。 | `2` |
| `source`, `platform`, `sdk_version` | string | はい | 測位の取得元、それを生成したクライアント、およびそのSDKバージョンです。 | `"browser"` |
| `is_mock`, `produced_by_accessory` | boolean | はい | プラットフォームが報告するなりすましの証拠です。`null`は、プラットフォームがそれを報告しないことを意味します。 | `null` |
| `integrity` | string | いいえ | `attested`、`not_attested`、`failed`、`unsupported`(Web)、または`not_determined`です。 | `"unsupported"` |
| `country_code`, `region_code`, `city` | string | はい | 測位結果が示す場所です。 | `"FR"` |
| `geofence`, `inside_geofence`, `geofence_basis`, `inside_areas`, `blocked_areas` | object, boolean, string, arrays | はい | 国およびエリアの判定結果です。 | `{ "enabled": true, "result": "outside" }` |
| `position_source`, `anonymizers` | string, object | はい | ステップが位置情報を取得する元と、VPN、プロキシ、Tor、なりすまし、エミュレーターのシグナルです。 | `"device_and_ip"` |
| `ip_distance_km`, `ip_distance_uncertainty_km`, `ip_consistent`, `document_distance_km`, `travel_excused`, `consecutive_mismatches` | number, boolean, integer | はい | IPアドレスの位置情報および登録済みの住所との比較結果です。 | `12.4` |
| `attempts` | integer | いいえ | ステップ内での試行番号です。 | `3` |
| `consent` | object | はい | 本人が同意した通知の`accepted_at`、`version`、`locale`です。 | |
| `warnings` | [警告オブジェクト](#警告オブジェクト)の配列 | いいえ | ステップの`LOCATION_*`警告です。`geolocation_attempts[]`には含まれず、代わりに`received_at`と`created_at`が追加されます。 | `[]` |

すべてのフィールドと例は[位置情報検証レポート](https://docs.didit.me/ja/core-technology/location-verification/report-location-verification.md)に記載されています。

### 住所証明

提出された住所書類ごとに返されます。`GET /v3/session/{sessionId}/decision/`では`poa_verifications[]`として表示されます。ソース:`poa/serializers/poa.py:212-227`(`POAV3Serializer`。`poa/serializers/poa.py:173-209`の`POAV2Serializer`を拡張)。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータス列挙型](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `issuing_state` | string (ISO 3166-1 alpha-3) | はい | 書類発行者の国コードです。 | `"ESP"` |
| `document_type` | string | いいえ | `PoaDocumentTypeChoices`(`common/config/choices.py:868-873`)による大分類の種別です。`UTILITY_BILL`、`BANK_STATEMENT`、`GOVERNMENT_ISSUED_DOCUMENT`、`OTHER_POA_DOCUMENT`のいずれかです。判別できない場合は`UNKNOWN`になり、`null`になることはありません。 | `"UTILITY_BILL"` |
| `document_subtype` | string | いいえ | `PoaDocumentSubtypeChoices`によるサブタイプコードです(例:`ELECTRICITY_BILL`、`WATER_BILL`、`ACCOUNT_STATEMENT`)。判別できない場合は`UNKNOWN`になり、`null`になることはありません。 | `"ELECTRICITY_BILL"` |
| `issuer` | string | はい | 発行元の名称です。 | `"Iberdrola"` |
| `issue_date` | string (YYYY-MM-DD) | はい | 書類の発行日です。 | `"2026-04-15"` |
| `expiration_date` | string (YYYY-MM-DD) | はい | 書類に記載されている有効期限です(記載がある場合)。 | `null` |
| `poa_address` | string | はい | OCRで抽出された未加工の住所です。 | `"Calle Mayor 1, 28001 Madrid"` |
| `poa_formatted_address` | string | はい | ジオコーディング・整形済みの住所です。 | `"Calle Mayor 1, 28001 Madrid, Spain"` |
| `poa_parsed_address` | object | はい | 構造化された住所です(`street_1`、`street_2`、`city`、`region`、`postal_code`、`country`(alpha-2)、`address_type`、`document_location`など)。 | `{ "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001" }` |
| `document_file` | string (URL) | はい | アップロードされた書類の署名付きURLです。 | `"https://<media-host>/.../poa.pdf?..."` |
| `document_language` | string | はい | 検出された書類の言語です(ISO 639-1)。 | `"es"` |
| `document_metadata` | object | はい | フィルタリング済みのメタデータです。`file_size`、`content_type`、`creation_date`、`modified_date`、`creator`、`producer`、`software`、`encryption`、`is_signed`、`is_tampered`、`signature_info`、`exif_original_date`、`exif_digitized_date`、`processed_by_known_editor`、`has_different_creation_mod_date`、`overlay_manipulation`を含みます。 | `{ "file_size": 184221, "content_type": "application/pdf", "is_tampered": false }` |
| `extra_fields` | object | いいえ | 銀行口座フィールド(`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`、およびレコードに保存されたカスタムキーです。 | `{ "bank_iban": null, "additional_names": [] }` |
| `name_on_document` | string | はい | 住所証明書類に記載されている氏名です。 | `"María García López"` |
| `expected_details_address` | string | はい | 顧客がサインアップ時に入力した住所です(入力されたとおり)。 | `"Calle Mayor 1, Madrid"` |
| `expected_details_formatted_address` | string | はい | ジオコーディングされた想定住所です。 | `"Calle Mayor 1, 28001 Madrid, Spain"` |
| `expected_details_parsed_address` | object | はい | 構造化された想定住所です。 | `{ "city": "Madrid", "postal_code": "28001" }` |
| `name_match_score_expected_details` | float (0-100) | はい | `name_on_document`と、セッション作成時に指定された氏名とのあいまい一致スコアです。 | `94.0` |
| `name_match_score_id_verification` | float (0-100) | はい | `name_on_document`と、確認済みIDの`full_name`とのあいまい一致スコアです。 | `100.0` |
| `extra_files` | 文字列の配列（URL） | いいえ | 追加でアップロードされたファイルの署名付きURL。 | `[]` |
| `detected_codes` | オブジェクトの配列 | いいえ | 書類の処理済みの全ページで検出されたQRコードとバーコード：`type`、`page_number`（1始まり）、`position`（ポリゴン）、`x`/`y`/`width`/`height`（バウンディングボックス）、`page_width`/`page_height`、`raw_payload`（base64）、`parsed_payload`（デコードされた値。コードの位置は特定できたもののデコードできなかった場合は`null`）。何も検出されなかった場合は空の配列です。 | `[{ "type": "QR_CODE", "page_number": 1, "parsed_payload": "https://issuer.example/inv/9981" }]` |
| `node_id` | 文字列 \| null | はい | ワークフローノードの識別子（V3）。 | `"first_poa"` |
| `warnings` | 配列 | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

```json theme={null}
{
  "status": "Approved",
  "issuing_state": "ESP",
  "document_type": "UTILITY_BILL",
  "document_subtype": "ELECTRICITY_BILL",
  "issuer": "Iberdrola",
  "issue_date": "2026-04-15",
  "expiration_date": null,
  "poa_address": "Calle Mayor 1, 28001 Madrid",
  "poa_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
  "poa_parsed_address": { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" },
  "document_file": "https://<media-host>/.../poa.pdf?signature=...",
  "document_language": "es",
  "document_metadata": {
    "file_size": 184221,
    "content_type": "application/pdf",
    "creation_date": "2026-04-15T08:11:32Z",
    "modified_date": "2026-04-15T08:11:32Z",
    "creator": "Iberdrola Billing",
    "producer": "Adobe PDF Library 15.0",
    "software": null,
    "encryption": null,
    "is_signed": true,
    "is_tampered": false,
    "signature_info": { "signer_name": "Iberdrola Clientes", "date": "2026-04-15T08:11:32Z" },
    "exif_original_date": null,
    "exif_digitized_date": null,
    "processed_by_known_editor": false,
    "has_different_creation_mod_date": false,
    "overlay_manipulation": null
  },
  "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": []
  },
  "name_on_document": "María García López",
  "expected_details_address": "Calle Mayor 1, Madrid",
  "expected_details_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
  "expected_details_parsed_address": { "city": "Madrid", "postal_code": "28001", "country": "ES" },
  "name_match_score_expected_details": 94.0,
  "name_match_score_id_verification": 100.0,
  "extra_files": [],
  "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": "aHR0cHM6Ly9pYmVyZHJvbGEuZXMvZmFjdHVyYS85OTgx",
      "parsed_payload": "https://iberdrola.es/factura/9981"
    },
    {
      "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": "MDA5OTgxMDAwNDI=",
      "parsed_payload": "0099810042"
    }
  ],
  "node_id": "first_poa",
  "warnings": []
}
```

### 電話番号検証

電話番号検証の試行ごとに返されます。KYCセッションとKYBセッションの両方で、`GET /v3/session/{sessionId}/decision/`内の`phone_verifications[]`として表示されます。ソース：`phone/serializers/phone.py:251-266`（`PhoneV3Serializer`。`phone/serializers/phone.py:103-248`の`PhoneV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | 文字列 | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `phone_number_prefix` | 文字列 | いいえ | E.164の国番号プレフィックス（`+`付き）。 | `"+34"` |
| `phone_number` | 文字列 | いいえ | プレフィックスを除いた加入者番号。 | `"612345678"` |
| `full_number` | 文字列 | いいえ | E.164形式の完全な番号（`phone_number_prefix + phone_number`）。 | `"+34612345678"` |
| `country_code` | 文字列（ISO 3166-1 alpha-2） | はい | 番号の国。 | `"ES"` |
| `country_name` | 文字列 | はい | ローカライズされた国名。 | `"Spain"` |
| `carrier` | オブジェクト | いいえ | `{ name, type }`。`type`は`LineTypeChoices`の値（`common/config/choices.py:648-667`）：`mobile`、`fixed_line`、`voip`、`isp`、`vpn`、`toll_free`、`premium_rate`、`satellite`、`pager`、`payphone`、`voice_mail`、`unknown`、およびその他の回線種別。 | `{ "name": "Movistar", "type": "mobile" }` |
| `is_disposable` | 真偽値 | いいえ | 通信事業者がこの番号を一時的または使い捨てとしてマークしている場合は`true`。 | `false` |
| `is_virtual` | 真偽値 | いいえ | `carrier.type`が`voip`、`isp`、`vpn`のいずれかの場合は`true`。 | `false` |
| `verification_method` | 文字列 | いいえ | OTPの配信に使用されたチャネル（`whatsapp`、`sms`、…）。最後の送信試行の`actual_channel`から読み取ります（ない場合はリクエストされた`channel`、次に`sms`にフォールバック）。 | `"whatsapp"` |
| `verification_attempts` | 整数 | いいえ | OTP送信試行の合計回数（初回送信と再送信を含む）。 | `1` |
| `verified_at` | 文字列（ISO 8601） | はい | OTPが正しく入力された日時。 | `"2026-05-17T10:14:02Z"` |
| `lifecycle` | オブジェクトの配列 | いいえ | 時系列のイベント：送信試行、配信コールバック、コード確認、最終ステータスイベント。各イベントは`{ type, timestamp, details, fee }`です。イベントタイプは`PhoneEventChoices`に由来します。 | `[…]` |
| `matches` | オブジェクトの配列 | いいえ | セッション間での電話番号の一致。各項目：`{ session_id, session_number, vendor_data, verification_date, phone_number, status, is_blocklisted, api_service, source }`。`source`は`session`または`list_entry`です。 | `[]` |
| `node_id` | 文字列 \| null | はい | ワークフローノードの識別子（V3）。 | `"first_phone"` |
| `warnings` | 配列 | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |
| `phone_intelligence` | オブジェクト | はい | 電話番号インテリジェンスのシグナル。この番号に対してインテリジェンスアドオンが実行された場合にのみ存在します。 | |
| `phone_social` | オブジェクト | はい | 番号のソーシャルフットプリント。ソーシャルフットプリントアドオンが実行された場合にのみ存在します。 | |

```json theme={null}
{
  "status": "Approved",
  "phone_number_prefix": "+34",
  "phone_number": "612345678",
  "full_number": "+34612345678",
  "country_code": "ES",
  "country_name": "Spain",
  "carrier": { "name": "Movistar", "type": "mobile" },
  "is_disposable": false,
  "is_virtual": false,
  "verification_method": "whatsapp",
  "verification_attempts": 1,
  "verified_at": "2026-05-17T10:14:02Z",
  "lifecycle": [
    {
      "type": "PHONE_VERIFICATION_MESSAGE_SENT",
      "timestamp": "2026-05-17T10:13:51Z",
      "details": { "status": "Success", "reason": null, "channel": "whatsapp", "actual_channel": "whatsapp" },
      "fee": 0.02
    },
    {
      "type": "PHONE_DELIVERY_DELIVERED",
      "timestamp": "2026-05-17T10:13:52Z",
      "details": { "channel": "whatsapp", "status": "delivered" },
      "fee": 0
    },
    {
      "type": "VALID_CODE_ENTERED",
      "timestamp": "2026-05-17T10:14:02Z",
      "details": { "code_tried": "482917", "status": "Approved" },
      "fee": 0
    },
    {
      "type": "PHONE_VERIFICATION_APPROVED",
      "timestamp": "2026-05-17T10:14:02Z",
      "details": null,
      "fee": 0
    }
  ],
  "matches": [],
  "node_id": "first_phone",
  "warnings": []
}
```

### メールアドレス認証

メールアドレス認証の試行ごとに返されます。KYCセッションとKYBセッションの両方で、`GET /v3/session/{sessionId}/decision/`内の`email_verifications[]`として表示されます。ソース：`email_verification/serializers/email.py:149-164`（`EmailV3Serializer`。`email_verification/serializers/email.py:38-146`の`EmailV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | 文字列 | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `email` | 文字列 | いいえ | 送信されたメールアドレス。 | `"maria.garcia@example.com"` |
| `is_breached` | 真偽値 | いいえ | このメールアドレスが既知のデータ侵害に含まれている場合は`true`。 | `false` |
| `breaches` | オブジェクトの配列 | いいえ | `is_breached`が`true`の場合の侵害ごとの詳細：`{ name, domain, logo_path, breach_date, description, is_verified, data_classes, breach_emails_count }`。 | `[]` |
| `is_disposable` | 真偽値 | いいえ | メールアドレスが使い捨てメールプロバイダーのものである場合は`true`。 | `false` |
| `is_undeliverable` | 真偽値 | いいえ | SMTP配信プローブにより、受信箱がメールを受け付けないと判明した場合は`true`。 | `false` |
| `verification_attempts` | 整数 | いいえ | OTP確認試行の合計回数。 | `1` |
| `verified_at` | 文字列（ISO 8601） | はい | OTPが正しく入力された日時。 | `"2026-05-17T10:15:22Z"` |
| `lifecycle` | オブジェクトの配列 | いいえ | 時系列のイベント：送信試行、コード確認、最終ステータスイベント。各イベントは`{ type, timestamp, details, fee }`です。イベントタイプは`EmailEventChoices`に由来します。 | `[…]` |
| `matches` | オブジェクトの配列 | いいえ | セッション間でのメールアドレスの一致。各項目：`{ session_id, session_number, vendor_data, verification_date, email, status, is_blocklisted, api_service, source }`。`source`は`session`または`list_entry`です。 | `[]` |
| `node_id` | 文字列 \| null | はい | ワークフローノードの識別子（V3）。 | `"first_email"` |
| `warnings` | 配列 | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |
| `email_intelligence` | オブジェクト | はい | メールアドレスインテリジェンスのシグナル。このアドレスに対してインテリジェンスアドオンが実行された場合にのみ存在します。 | |
| `email_social` | オブジェクト | はい | アドレスのソーシャルフットプリント。ソーシャルフットプリントアドオンが実行された場合にのみ存在します。 | |

```json theme={null}
{
  "status": "Approved",
  "email": "maria.garcia@example.com",
  "is_breached": false,
  "breaches": [],
  "is_disposable": false,
  "is_undeliverable": false,
  "verification_attempts": 1,
  "verified_at": "2026-05-17T10:15:22Z",
  "lifecycle": [
    {
      "type": "EMAIL_VERIFICATION_MESSAGE_SENT",
      "timestamp": "2026-05-17T10:15:11Z",
      "details": { "status": "Success", "reason": null },
      "fee": 0.02
    },
    {
      "type": "VALID_CODE_ENTERED",
      "timestamp": "2026-05-17T10:15:22Z",
      "details": { "code_tried": "739204", "status": "Approved" },
      "fee": 0
    },
    {
      "type": "EMAIL_VERIFICATION_APPROVED",
      "timestamp": "2026-05-17T10:15:22Z",
      "details": null,
      "fee": 0
    }
  ],
  "matches": [],
  "node_id": "first_email",
  "warnings": []
}
```

### データベース検証

ユーザーが送信したデータに対して実行されたデータベース照会ごとに返されます。`GET /v3/session/{sessionId}/decision/`内の`database_validations[]`として表示されます。ソース：`database_validation/serializers/database_validation.py:21-142`（`DatabaseValidationV3Serializer`。`DatabaseValidationV2Serializer`を拡張）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `issuing_state` | string (ISO 3166-1 alpha-3) | はい | 照会したレジストリが属する国。 | `"ESP"` |
| `validation_type` | string (enum) | いいえ | 結果の裏付け方法を示します。`one_by_one`(単一サービスの結果)、`two_by_two`(2つ以上の異なるサービスが、それぞれ独立して識別番号に完全一致)、または`not_enabled`(バリデーターがスキップされた、またはどのプロバイダーも応答しなかった場合。確定的な`no_match`の場合も`one_by_one`になります)のいずれかです。`null`になることはありません。ソース: `DatabaseValidationChoices`(`common/config/choices.py:1097-1100`)。 | `"one_by_one"` |
| `screened_data` | object | いいえ | レジストリに送信されたデータ。ファイルフィールド(`selfie`、`cnh_qr_code_image`、`document_image`)には、読み取り時に署名付きURLが発行されます。 | `{ "document_number": "99999999R", "date_of_birth": "1990-05-12" }` |
| `validations` | objectの配列 | いいえ | 一致結果を返したカタログサービスごとに1件のエントリ。各エントリには`service_id`、`service_name`、`validation`(プロバイダーの判定オブジェクト)、`outcome_code`、`outcome_detail`、`source_data`(整形済みの市民プロフィール: `full_name`、`gender`、`date_of_birth`、`photo`(署名付きURL)、`signature`(署名付きURL)、…)を含めることができます。 | `[…]` |
| `errors` | objectの配列 | はい | 照会に失敗した場合のサービスごとのエラー。空の場合はキー自体が省略されます。各エントリは、上流サービスのエラーオブジェクトに、そのエラーを返した`service_id`を加えたものです。 | `[]` |
| `match_type` | string (enum) | はい | 照会したすべてのサービスを集約した一致判定。`full_match`、`partial_match`、`no_match`のいずれかです(`DatabaseValidationMatchTypeChoices`、`common/config/choices.py:1103-1106`)。評価されるまでは`null`です。 | `"full_match"` |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `node_id` | string \| null | はい | ワークフローノードの識別子(V3)。 | `"first_db_validation"` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

```json theme={null}
{
  "issuing_state": "ESP",
  "validation_type": "one_by_one",
  "screened_data": {
    "document_number": "99999999R",
    "date_of_birth": "1990-05-12",
    "first_name": "María",
    "last_name": "García López"
  },
  "validations": [
    {
      "service_id": "esp_dni",
      "service_name": "Spain - DNI/NIE verification",
      "validation": { "is_valid": true, "match_score": 100 },
      "outcome_code": "MATCH",
      "outcome_detail": "All identifiers match the registry record.",
      "source_data": {
        "full_name": "María García López",
        "gender": "F",
        "date_of_birth": "1990-05-12",
        "photo": "https://<media-host>/.../registry_photo.jpg?signature=...",
        "signature": null
      }
    }
  ],
  "match_type": "full_match",
  "status": "Approved",
  "node_id": "first_db_validation",
  "warnings": []
}
```

### アンケートの回答

アンケートの提出ごとに返されます。KYCセッションとKYBセッションの両方で、`GET /v3/session/{sessionId}/decision/`の`questionnaire_responses[]`として含まれます。ソース: `questionnaires/serializers/questionnaire.py:591-597`(`QuestionnaireResponseV3Serializer`。`questionnaires/serializers/questionnaire.py:520-588`の`QuestionnaireResponseSerializer`を継承)。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `questionnaire_id` | string (UUID) | いいえ | 回答されたアンケートバージョンの識別子。 | `"6a0f1c2c-…"` |
| `title` | string | いいえ | Consoleで設定したアンケート名。 | `"Customer risk profile"` |
| `description` | string | はい | アンケートの説明。 | `"Short risk-profile questions."` |
| `languages` | stringの配列 | いいえ | アンケートが公開されている言語のコード。 | `["en", "es"]` |
| `default_language` | string | いいえ | フォールバック言語のコード。 | `"en"` |
| `is_active` | boolean | いいえ | このアンケートバージョンが有効なバージョンかどうか。 | `true` |
| `is_simple_questionnaire` | boolean | いいえ | アンケートに分岐がない(フラットなリストの)場合は`true`。 | `true` |
| `questionnaire_group_id` | string (UUID) | いいえ | 同じアンケートの全バージョンで共有される識別子。 | `"a7c2c2c2-…"` |
| `version` | integer | いいえ | 有効なテンプレートのバージョン番号。 | `3` |
| `status` | string | いいえ | `Approved`、`In Review`、`Not Finished`のいずれか(アンケート単位の却下は`In Review`にマッピングされます)。 | `"Approved"` |
| `published_at` | string (ISO 8601) | はい | テンプレートが公開された日時。 | `"2026-01-12T11:00:00Z"` |
| `sections` | objectの配列 | いいえ | グラフの走査と表示条件によるフィルタリングを適用した後の、順序付きのセクション。各セクションは`{ title, description, items[] }`です(title/descriptionは先頭の`SECTION_HEADER`から取得され、翻訳済みです)。各アイテムはフォーム要素(`uuid`、`value`(ノードID)、`element_type`、`is_required`、`title`、`description`、`placeholder`、`choices`、`max_files`、`required_if`、`repeatable_config`)で、さらに`answer`フィールドを持ちます。このフィールドは未回答の場合は`null`で、`HEADING`/`PARAGRAPH`/`SEPARATOR`のレイアウトアイテムでは省略されます。ファイルの回答には`{ files: [<presigned URL>, …] }`が含まれます。 | `[…]` |
| `node_id` | string \| null | はい | ワークフローノードの識別子(V3)。 | `"first_questionnaire"` |

```json theme={null}
{
  "questionnaire_id": "6a0f1c2c-3b7d-4d2c-9eb6-fdc6c7c92ef9",
  "title": "Customer risk profile",
  "description": "Short risk-profile questions.",
  "languages": ["en", "es"],
  "default_language": "en",
  "is_active": true,
  "is_simple_questionnaire": true,
  "questionnaire_group_id": "a7c2c2c2-1111-4d2c-9eb6-fdc6c7c92ef9",
  "version": 3,
  "status": "Approved",
  "published_at": "2026-01-12T11:00:00Z",
  "sections": [
    {
      "title": "Source of funds",
      "description": null,
      "items": [
        {
          "uuid": "4f1d5e2c-aaaa-4d2c-9eb6-fdc6c7c92ef9",
          "value": "q_source_of_funds",
          "element_type": "SINGLE_CHOICE",
          "is_required": true,
          "title": "What is your main source of funds?",
          "description": null,
          "placeholder": null,
          "choices": [
            { "label": "Salary", "value": "salary" },
            { "label": "Business income", "value": "business" },
            { "label": "Investments", "value": "investments" }
          ],
          "max_files": 1,
          "required_if": null,
          "repeatable_config": null,
          "answer": { "value": "salary" }
        }
      ]
    }
  ],
  "node_id": "first_questionnaire"
}
```

### 電子署名

[電子署名](https://docs.didit.me/ja/core-technology/electronic-signature/overview.md)ステップの署名者ごとに返されます。KYCセッションとKYBセッションの両方で、ワークフローにこのステップがある場合に限り、`GET /v3/session/{sessionId}/decision/`の`signatures[]`として含まれます。他のレポートオブジェクトとは異なり、`status`は署名の段階を表し、結果は`verdict`に入ります。また、`warnings[]`の各アイテムは[警告オブジェクト](#警告オブジェクト)ではなく`{ code, node_id }`です。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `id` | string (UUID) | いいえ | 署名者の署名。エビデンス取得ルートと検証ルートで`signature_id`として使用します。 | `"0e6c2a8e-…"` |
| `node_id` | string | いいえ | ワークフローノードの識別子。 | `"feature_signature"` |
| `status` | string | いいえ | 署名の段階。`intro`、`review`、`code`、`signing`、`signed`、`declined`のいずれかです。書類が署名済みであることを意味するのは`signed`のみです。 | `"signed"` |
| `verdict` | string | いいえ | `Not Finished`、`Approved`、`In Review`、`Declined`のいずれか。 | `"Approved"` |
| `level` | string | いいえ | `simple`(デフォルト)または`aes`。`qes`はアドオンで、まだ利用できません。 | `"aes"` |
| `format` | string | いいえ | Simple署名の場合は`pdf`、Advanced (AES)署名の場合は`pades`。 | `"pades"` |
| `profile` | string | はい | Advanced (AES)署名が署名されると`PAdES-B-LT`、それ以外はnull。 | `"PAdES-B-LT"` |
| `signer` | object | いいえ | `{ name, capacity, company, role, roles, identity_session_id }`。`capacity`は`self`(KYC)または`company`(KYB)です。 | `{ "name": "Jane Doe", "capacity": "self", … }` |
| `identity_used` | object | いいえ | `{ session_id, kyc_id, verified, expected_name }`: 署名の根拠となる検証済みの本人情報。検証済みの本人情報がないSimple署名の場合は空です。 | `{ "verified": true, … }` |
| `certificate` | object | はい | `{ issuer, issued_to, serial, valid_from, valid_until }`。署名されるまでは`null`で、Simple署名の場合は常に`null`です。 | `{ "serial": "5A3F9C21", … }` |
| `confirmation` | オブジェクト | いいえ | `{ channel, destination, confirmed_at, attempts }`。`destination`はマスクされます。`attempts`は入力されたコードの数で、正しいコードも含みます。Simple署名にはコードがないため、`channel`と`destination`は`null`になります。 | `{ "channel": "email", … }` |
| `timestamp` | オブジェクト | はい | `{ time, qualified, valid }`。AESでは`qualified`は常に`false`です。署名されるまでは`null`で、Simple署名では常に`null`です。 | `{ "qualified": false, … }` |
| `documents` | オブジェクトの配列 | いいえ | `{ id, uuid, title, file_name, pages, size_bytes, sha256_original, sha256_signed, status, opened_at, read_at, read_to_end, consented_at, consent, signed_file, mode, source_format, conversion, fields }`。`status`は`signed`、`declined`、`not_signed`、`not_reached`のいずれかです。`mode`は`fields`または`read_and_agree`です。`source_format`は`pdf`または`docx`です。`conversion`は元のWordファイルの情報を示し、PDFの場合は`null`です。 | `[…]` |
| `documents[].fields` | オブジェクトの配列 | いいえ | 書類上の各フィールドについての`{ key, type, role, label, page, x, y, width, height, required, value, display_value, value_source, filled_at, image_url, value_unavailable_reason }`。`value`は文字列、チェックボックスの場合はブール値、適用済みの署名またはイニシャルの場合は`true`です。フィールドのない書類では空です。 | `[…]` |
| `adopted_signature` | オブジェクト | はい | `{ method, font, adopted_at }`：署名者が採用した署名とイニシャル。`method`は`typed`または`drawn`です。`font`は入力された署名の手書きスタイルです。採用されるまでは`null`です。 | `{ "method": "drawn", … }` |
| `electronic_signature_consent_at` | 文字列 (ISO 8601) | はい | 署名者が書類に電子的に署名することに同意した日時。いずれかの書類にフィールドがある場合に設定されます。 | `"2026-11-03T10:41:40Z"` |
| `evidence_file` | 文字列 | はい | 署名後の証拠PDFのパス。 | `"/v3/session/…/evidence/?signature_id=…"` |
| `warnings` | オブジェクトの配列 | いいえ | `{ code, node_id }`。`code`は`SIGNATURE_DECLINED`、`SIGNATURE_OTP_FAILED`、`SIGNATURE_NAME_MISMATCH`、`SIGNATURE_IDENTITY_NOT_VERIFIED`、`SIGNATURE_DOCUMENT_CHANGED`のいずれかです。 | `[]` |
| `validation` | オブジェクト | はい | `{ valid, checked_at, documents[] }`：署名済み書類に対する最新の暗号学的検証。署名されるまでは`null`です。署名の結果を確認できなかった場合は`{ valid: null, reason: "signature_provider_outcome_unknown", checked_at }`になります。 | `{ "valid": true, … }` |
| `declined_at` | 文字列 (ISO 8601) | はい | 署名者が署名を拒否した日時。 | `null` |
| `declined_action` | 文字列 | いいえ | ステップの`signature_declined_action`。 | `"REVIEW"` |
| `signed_at` | 文字列 (ISO 8601) | はい | 書類が署名された日時。 | `"2026-11-03T10:42:24Z"` |
| `expires_at` | 文字列 (ISO 8601) | いいえ | 署名リンクが無効になる日時。 | `"2026-11-10T10:30:00Z"` |
| `email_sent_at` | 文字列 (ISO 8601) | はい | 署名済みのコピーが署名者にメール送信された日時。 | `"2026-11-03T10:42:30Z"` |
| `email_unavailable_reason` | 文字列 | はい | コピーが要求されたにもかかわらず、メール送信されなかった理由。 | `null` |
| `ip_address` | 文字列 | はい | 署名者がコードを要求した時点のIPアドレス。 | `"203.0.113.10"` |
| `place` | 文字列 | はい | 収集されません。常に`null`です。 | `null` |
| `place_unavailable_reason` | 文字列 | はい | `not_collected`。 | `"not_collected"` |

[電子署名レポート](https://docs.didit.me/ja/core-technology/electronic-signature/report-electronic-signature.md)に、完全な例とすべてのネストされたフィールドが記載されています。

### 年齢推定

スタンドアロンのAge Estimation API（`POST /v3/age-estimation/`）が返します。レスポンスは、`age_estimation`エンベロープの下に[`Liveness check`](#ライブネスチェック)の構造の一部（`status`、`method`、`score`、`age_estimation`、`warnings`）を含み、さらにスタンドアロン専用の`user_image`顔検出ブロックを含みます。`reference_image`、`video_url`、`matches`、`face_quality`、`face_luminance`は**含みません**。ワークフローのセッションでは個別の配列はなく、推定年齢は`GET /v3/session/{sessionId}/decision/`の`liveness_checks[].age_estimation`として返されます。ソース：`apis/serializers/age_estimation.py:50-55`（`AgeEstimationResponseSerializer`）。エンベロープは`apis/views/age_estimation.py:138-174`で組み立てられます。

| フィールド | 型 | NULL許容 | 説明 | 例 |
| - | - | - | - | - |
| `request_id` | 文字列 (UUID) | いいえ | `save_api_request=true`（デフォルト）の場合は永続化されたセッションID、それ以外の場合は一時的な相関UUID。 | `"3b1f1e2c-…"` |
| `age_estimation` | オブジェクト | いいえ | 結果エンベロープ：`status`（`Approved` / `Declined`）、`method`（常に`PASSIVE`）、`score`（ライブネス0-100、NULL許容）、`age_estimation`（最も大きい顔の推定年齢を歳で表した値、NULL許容）、`user_image`（顔ごとの`age`、`bbox` `[x_min, y_min, x_max, y_max]`、`confidence`、`gender`を含む`entities[]`、および`best_angle`）、`warnings[]`。 | `{ … }` |
| `vendor_data` | 文字列 | はい | リクエストの`vendor_data`をそのまま返します。 | `null` |
| `metadata` | オブジェクト | はい | リクエストの`metadata`をそのまま返します。 | `null` |
| `created_at` | 文字列 (ISO 8601) | いいえ | サーバー側で記録したリクエストのタイムスタンプ。 | `"2026-05-17T10:22:13.512941+00:00"` |

```json theme={null}
{
  "request_id": "3b1f1e2c-7777-4d2c-9eb6-fdc6c7c92ef9",
  "age_estimation": {
    "status": "Approved",
    "method": "PASSIVE",
    "score": 94.10,
    "age_estimation": 28.7,
    "user_image": {
      "entities": [
        { "age": 28.7, "bbox": [40, 40, 100, 100], "confidence": 0.72, "gender": "male" }
      ],
      "best_angle": 0
    },
    "warnings": []
  },
  "vendor_data": null,
  "metadata": null,
  "created_at": "2026-05-17T10:22:13.512941+00:00"
}
```

### 生体認証

生体認証は、標準のKYCで使われるものと同じLiveness + Face Matchパイプラインを実行しますが、新たにOCRで読み取った書類の顔写真ではなく、既存ユーザーの参照画像と撮影した顔を比較するように設定されています。専用のシリアライザーはなく、`GET /v3/session/{sessionId}/decision/`は標準の[Liveness check](#ライブネスチェック)オブジェクトと[Face match](#顔照合)オブジェクトを`liveness_checks[]`と`face_matches[]`の下に返します。セッションのワークフローは`workflow_type = "biometric_authentication"`（`WorkflowTypeChoices`、`common/config/choices.py:636`）で設定されます。

| フィールド | 型 | NULL許容 | 説明 | 例 |
| - | - | - | - | - |
| `liveness_checks` | [Liveness check](#ライブネスチェック)の配列 | いいえ | 認証試行のライブネス結果。 | `[ { "status": "Approved", … } ]` |
| `face_matches` | [Face match](#顔照合)の配列 | いいえ | 登録済みの参照画像との照合結果。`source_image_session_id`にはセッション自身の`session_id`が設定されます。参照顔（指定された`portrait_image`、または`portrait_image`を省略した場合は`vendor_data`経由で再利用される保存済みの顔）は、認証セッション自体の下に記録されます（`face/views/face.py:656-659`）。 | `[ { "status": "Approved", "source_image_session_id": "…", … } ]` |
| `status` | string | いいえ | セッションの最上位ステータス（[ステータスenum](#ステータス列挙値リファレンス)を参照）。 | `"Approved"` |

```json theme={null}
{
  "session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
  "status": "Approved",
  "liveness_checks": [
    {
      "status": "Approved",
      "method": "PASSIVE",
      "score": 95.10,
      "reference_image": "https://<media-host>/.../reference.jpg?signature=...",
      "video_url": null,
      "age_estimation": null,
      "matches": [],
      "face_quality": 91.20,
      "face_luminance": 53.10,
      "node_id": "biometric_auth_liveness",
      "warnings": []
    }
  ],
  "face_matches": [
    {
      "status": "Approved",
      "score": 98.42,
      "source_image_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
      "source_image": "https://<media-host>/.../source.jpg?signature=...",
      "target_image": "https://<media-host>/.../target.jpg?signature=...",
      "node_id": "biometric_auth_face_match",
      "warnings": []
    }
  ]
}
```

### KYB登記

KYBワークフローで、登記情報により確認された企業ごとに返されます。企業セッションでは`GET /v3/session/{sessionId}/decision/`の`registry_checks[]`として含まれます。出典: `kyb/serializers/kyb.py:939-964`（`RegistryCheckV3Serializer`）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `node_id` | string \| null | はい | ワークフローのノード識別子（V3）。 | `"first_registry"` |
| `data_resolved` | boolean | いいえ | 登記情報の取得が完了した場合（または`is_from_registry`が`false`で、データが手動入力されたことを意味する場合）に`true`になります。 | `true` |
| `company` | object | いいえ | 企業の完全なペイロード。下記の[Companyオブジェクト](#companyオブジェクト)を参照してください。 | `{ … }` |
| `ownership_structure` | object | はい | 法人登記で裏付けられた資本構成表。`shareholders[]`と`beneficial_owners[]`を含み、各所有者には登記上の身元情報、持分、正規化された`shareholding`が含まれます。 | `{ "shareholders": [...], "beneficial_owners": [] }` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

#### Companyオブジェクト

出典: `kyb/serializers/kyb.py:220-321`（`KYBCompanyResponseSerializer`）。

| フィールド | 型 | Null許容 | 説明 |
| - | - | - | - |
| `uuid` | string (UUID) | いいえ | 企業の内部識別子。 |
| `node_id` | string \| null | はい | ワークフローのノード識別子。 |
| `status` | string | いいえ | 機能のステータス（`FeatureStatusChoices`）。 |
| `registry_status` | string | はい | 法人登記上の企業ステータス（`active`、`dissolved`など）。 |
| `data_resolved` | boolean | いいえ | 親オブジェクトと同じ定義です。 |
| `company_name` | string | はい | 登記上の企業名。 |
| `registration_number` | string | はい | 登記上の識別子。 |
| `country_code` | string (ISO 3166-1 alpha-2) | はい | 設立国。 |
| `region` | string | はい | 該当する場合のISO 3166-2の行政区画（例: `US-CA`）。 |
| `company_type` | string | はい | 法人形態（`LLC`、`SL`など）。 |
| `incorporation_date` | string (YYYY-MM-DD) | はい | 設立日。 |
| `registered_address` | string | はい | 登記上の法定住所。 |
| `tax_number` | string | はい | 税務識別番号またはVAT番号。 |
| `risk_level` | string | はい | プロバイダーが提供するリスク評価。 |
| `verification_status` | string | はい | 内部の検証ステータスenum。 |
| `is_from_registry` | boolean | いいえ | 法人登記から取得した場合（手動入力ではない場合）に`true`になります。 |
| `fetch_status` | string | はい | `pending`、`resolved`、`failed`。 |
| `alternative_names` | string | はい | カンマ区切りの別の商号。 |
| `nature_of_business` | string | はい | 事業内容を説明する自由記述テキスト。 |
| `registered_capital` | string | はい | 人が読める文字列形式の登録資本金。 |
| `registered_capital_amount` | string (decimal) | はい | 解析済みの登録資本金額。 |
| `registered_capital_currency` | string (ISO 4217) | はい | 通貨コード。 |
| `website` | string (URL) | はい | 企業のWebサイト。 |
| `email` | string | はい | 公開されている連絡先メールアドレス。 |
| `phone` | string | はい | 公開されている連絡先電話番号。 |
| `legal_entity_identifier` | string | はい | 利用可能な場合のLEI。 |
| `location_of_registration` | string | はい | 登記所または登記地域。 |
| `vat_number` | string | はい | 企業について提出されたVAT番号。 |
| `vat_validation_status` | string | いいえ | VAT番号（存在しない場合は`tax_number`）の検証結果: `valid`、`invalid`、`format_valid`、`invalid_format`、`could_not_validate`、または`not_applicable`。[VATおよび納税者番号の検証](https://docs.didit.me/ja/business-verification/company-data.md#vatおよび納税者番号の検証)を参照してください。 |
| `vat_validated_number` | string | はい | 確認された番号（ソース側で把握されている形式）。 |
| `vat_validation_source` | string | はい | ステータスを判定したソース: `eu_vies`、`pl_vat_white_list`、`no_brreg`、`ch_uid_register`、`br_receita_federal`、`co_rues`、`cr_hacienda`、`ec_sri`、`py_dnit`、または`format_rules`。 |
| `vat_validated_name` | string | はい | ソースに登録されている名称（ソースが開示しない場合は空）。 |
| `vat_validated_address` | string | はい | ソースに登録されている住所（開示されない場合は空）。 |
| `vat_checked_at` | string (ISO 8601) | はい | 確認のタイムスタンプ。確認が実行されなかった場合は`null`です。 |
| `financial_summary` | object | はい | 法人登記から提供された場合の、最新の財務ハイライトのスナップショット。 |
| `officers` | array of objects | いいえ | B2C向けに安全な役員リスト: `{ uuid, name, designation, role, nationality, is_active, kyc_status, kyc_session_url }`。 |
| `beneficial_owners` | array of objects | いいえ | B2C向けに安全なUBOリスト: `{ uuid, name, first_name, last_name, entity_type, roles, ownership_min_shares, ownership_max_shares, is_active, kyc_status, kyc_session_url, effective_ownership_percent }`。 |
| `addresses` | array of objects | はい | 法人登記から取得した住所ごとの詳細。 |
| `industries` | array of objects | はい | SIC/NAICS形式の業種分類。 |
| `accounts` | array of objects | はい | 提出済み決算書のメタデータ。 |
| `registry_data` | object | はい | Diditが正規化した登記詳細（所有構造の判定結果、コンソールでの修正、専用フィールドを持たない登記上の事実）。安定した仕様としては保証されません。 |
| `user_provided_data` | object | はい | ユーザーが編集したフィールドのスナップショット。 |
| `confirmed_by_user_at` | string (ISO 8601) | はい | ユーザーが抽出データを確認したタイムスタンプ。 |
| `last_console_edit_at` | string (ISO 8601) | はい | コンソールで最後に編集されたタイムスタンプ。 |
| `is_editable` | boolean | いいえ | 法人登記から取得したデータをエンドユーザーがまだ編集できる間は`true`になります。 |

```json theme={null}
{
  "status": "Approved",
  "node_id": "first_registry",
  "data_resolved": true,
  "company": {
    "uuid": "b1f1e2c2-9999-4d2c-9eb6-fdc6c7c92ef9",
    "node_id": "first_registry",
    "status": "Approved",
    "registry_status": "active",
    "data_resolved": true,
    "company_name": "Sante Clinics SL",
    "registration_number": "B12345678",
    "country_code": "ES",
    "region": null,
    "company_type": "SL",
    "incorporation_date": "2018-03-22",
    "registered_address": "Calle Mayor 1, 28001 Madrid, Spain",
    "tax_number": "B12345678",
    "risk_level": "low",
    "verification_status": "verified",
    "is_from_registry": true,
    "fetch_status": "resolved",
    "alternative_names": "Sante Clinics",
    "nature_of_business": "Medical clinic operations",
    "registered_capital": "EUR 50,000",
    "registered_capital_amount": "50000.00",
    "registered_capital_currency": "EUR",
    "website": "https://santeclinics.com",
    "email": "info@santeclinics.com",
    "phone": "+34911223344",
    "legal_entity_identifier": null,
    "location_of_registration": "Registro Mercantil de Madrid",
    "vat_number": "ESB12345678",
    "vat_validation_status": "valid",
    "vat_validated_name": "SANTE CLINICS SL",
    "vat_validated_address": "CALLE MAYOR 1, 28001 MADRID",
    "vat_checked_at": "2026-05-17T10:11:05Z",
    "financial_summary": null,
    "officers": [
      {
        "uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
        "name": "María García López",
        "designation": "Administrador único",
        "role": "Director",
        "nationality": "ESP",
        "is_active": true,
        "kyc_status": "Approved",
        "kyc_session_url": "https://verify.didit.me/s/…"
      }
    ],
    "beneficial_owners": [
      {
        "uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
        "name": "María García López",
        "first_name": "María",
        "last_name": "García López",
        "entity_type": "person",
        "roles": ["UBO"],
        "ownership_min_shares": "75.00",
        "ownership_max_shares": "75.00",
        "is_active": true,
        "kyc_status": "Approved",
        "kyc_session_url": "https://verify.didit.me/s/…",
        "effective_ownership_percent": 75.0
      }
    ],
    "addresses": [],
    "industries": [],
    "accounts": [],
    "registry_data": {},
    "user_provided_data": {},
    "confirmed_by_user_at": "2026-05-17T10:11:02Z",
    "last_console_edit_at": null,
    "is_editable": false
  },
  "ownership_structure": null,
  "warnings": []
}
```

### KYB書類

KYBの補足書類を収集するノードごとに返されます。企業セッションでは`GET /v3/session/{sessionId}/decision/`の`document_verifications[]`として含まれ、`node_id`ごとに1件のエントリがあり、`items[]`にアップロードされた各書類が列挙されます。出典: `kyb/serializers/kyb.py:1053-1068`（`DocumentVerificationV3Serializer`）。各項目は`kyb/serializers/kyb.py:811-851`（`KYBDocumentResponseSerializer`）に従います。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | このノードの書類全体の集約ステータスです。パイプラインのすべての書類が承認済みの場合にのみ`Approved`、いずれかが却下された場合は`Declined`、それ以外は`In Review`、保留中は`Not Finished`になります。[ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `node_id` | string \| null | はい | ワークフローノードの識別子（V3）。 | `"first_kyb_documents"` |
| `items` | [KYB書類アイテムオブジェクト](#kyb書類アイテムオブジェクト)の配列 | いいえ | アップロードまたは要求された書類ごとに1件のエントリ。 | `[…]` |
| `groups` | object | いいえ | 書類グループごとの件数: `{ <group_name>: { total, approved, pending, declined, in_review, other, missing } }`。 | `{ "incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 } }` |
| `required_groups` | stringの配列 | いいえ | ワークフロー設定で必須とされている書類グループ。 | `["incorporation_certificate", "shareholder_register"]` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

#### KYB書類アイテムオブジェクト

| フィールド | 型 | Null許容 | 説明 |
| - | - | - | - |
| `uuid` | string (UUID) | いいえ | 内部の書類識別子。 |
| `document_type` | string | はい | 上位のグループ（`incorporation_certificate`、`shareholder_register`、…）。 |
| `document_subtype` | string | はい | プロバイダー固有のサブタイプ。 |
| `document_group` | string | はい | `document_type`のミラー（わかりやすさのために残されているエイリアス）。 |
| `file_url` | string (URL) | はい | クリーニング済みファイルへの署名付きURL。 |
| `original_filename` | string | はい | アップロード時のファイル名。 |
| `file_size` | integer | はい | バイト単位のファイルサイズ。 |
| `status` | string | いいえ | 書類ごとのステータス（`FeatureStatusChoices`）。 |
| `created_at` | string (ISO 8601) | いいえ | アップロード日時のタイムスタンプ。 |
| `cross_check_result` | object | はい | 法人登記や他の書類との照合結果。 |
| `document_metadata` | object | はい | POAの`document_metadata`と同じ形式のフィルタリング済みメタデータ。 |
| `description` | string | はい | レビュアーまたはシステムが付与した説明。 |
| `is_requested` | boolean | いいえ | ワークフローがこの書類を想定していた場合は`true`。 |
| `ocr_data` | object | はい | 利用可能な場合、OCRで抽出されたフィールド。 |
| `is_console_upload` | boolean | いいえ | コンソールのレビュアーが書類をアップロードした場合は`true`（集約判定からは除外されます）。 |
| `is_confirmed` | boolean | いいえ | レビュアーが書類を明示的に確認した場合は`true`。 |

```json theme={null}
{
  "status": "Approved",
  "node_id": "first_kyb_documents",
  "items": [
    {
      "uuid": "e1f1e2c2-cccc-4d2c-9eb6-fdc6c7c92ef9",
      "document_type": "incorporation_certificate",
      "document_subtype": "registro_mercantil_extract",
      "document_group": "incorporation_certificate",
      "file_url": "https://<media-host>/.../incorporation.pdf?signature=...",
      "original_filename": "incorporation_certificate.pdf",
      "file_size": 256412,
      "status": "Approved",
      "created_at": "2026-05-17T10:08:00Z",
      "cross_check_result": { "matches_registry_name": true, "matches_registration_number": true },
      "document_metadata": {
        "file_size": 256412,
        "content_type": "application/pdf",
        "is_signed": true,
        "is_tampered": false
      },
      "description": null,
      "is_requested": true,
      "ocr_data": { "company_name": "Sante Clinics SL", "registration_number": "B12345678" },
      "is_console_upload": false,
      "is_confirmed": true
    }
  ],
  "groups": {
    "incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 }
  },
  "required_groups": ["incorporation_certificate", "shareholder_register"],
  "warnings": []
}
```

### KYB主要人物

KYBワークフロー内の主要人物ノードごとに返されます。企業のセッションでは、`GET /v3/session/{sessionId}/decision/`の`key_people_checks[]`として表示されます。ソース: `kyb/serializers/kyb.py:967-1050`（`KeyPeopleCheckV3Serializer`）。

| フィールド | 型 | Null許容 | 説明 | 例 |
| - | - | - | - | - |
| `status` | string | いいえ | [ステータスenum](#ステータス列挙値リファレンス)を参照してください。 | `"Approved"` |
| `node_id` | string \| null | はい | ワークフローノードの識別子（V3）。 | `"first_key_people"` |
| `registry` | object | いいえ | 法人登記から抽出された`{ officers[], beneficial_owners[] }`。役員は`KYBPersonResponseSerializer`（`kyb/serializers/kyb.py:533-645`）に従います。実質的支配者は`KYBBeneficialOwnerResponseSerializer`（`kyb/serializers/kyb.py:648-788`。`date_of_birth`、`country_of_birth`、`email`、`company_name`、`registration_number`、`entity_type`、`roles`、`ownership_min_shares`、`ownership_max_shares`、`child_beneficial_owners`、`effective_ownership_percent`が追加されます）に従います。どちらにも当事者ごとのAMLおよびKYCのエンリッチメント（`aml_status`、`kyc_status`、`kyc_session_url`、`kyc_session_id`、`verification_workflow_type`、`verification_workflow_id`、`verification_workflow_label`、`verification_workflow_features`、`didit_internal_id`、`kyc_document_type`、`kyc_nationality`、`kyc_liveness_passed`、`kyc_verified_at`、`kyc_aml_categories`、`kyc_notification_sent_at`）が含まれます。 | `{ "officers": [...], "beneficial_owners": [...] }` |
| `submitted` | object | いいえ | `{ parties[] }`。企業が主要人物フローで確認または送信したエントリです（`source=USER`の`BusinessParty`行）。各当事者は`BusinessPartySubmissionResponseSerializer`（`kyb/serializers/party.py:146-194`）に従います: `uuid`、`entity_type`、`source`、`name`、`first_name`、`last_name`、`company_name`、`registration_number`、`email`、`nationality`、`phone_number`、`date_of_birth`、`position`、`custom_fields`、`is_active`、`is_skipped`、`requires_verification`、`roles[]`（`{ role, ownership_percent, voting_percent }`）、`kyc_session_id`、`kyc_session_status`、`kyc_session_url`、`kyc_session_deleted`、`kyb_sub_session_id`、`kyb_sub_session_status`、`kyb_sub_session_url`、`kyb_sub_session_deleted`、`verification_workflow_type`、`verification_workflow_id`、`verification_workflow_label`、`verification_workflow_features`、`didit_internal_id`。`kyc_session_deleted` / `kyb_sub_session_deleted`は、子セッションが削除されたことを示します。そのステータスは削除時点の値のまま固定され、リンクが解決できなくなるため対応する`*_session_url`は`null`で返されます。また、その当事者は親をブロックしなくなります（代わりにチェックは`In Review`になります）。[`PATCH /v3/session/{id}/kyb/parties/{party_uuid}/`](https://docs.didit.me/ja/sessions-api/update-data#主要人物の当事者をスキップ)でクリアできます。 | `{ "parties": [...] }` |
| `ubo_kyc_summary` | object | はい | KYCが紐付けられたアクティブなUBO全体の件数: `{ total, approved, flagged, pending }`。KYCが紐付けられたアクティブなUBOがない場合は`null`。 | `{ "total": 2, "approved": 2, "flagged": 0, "pending": 0 }` |
| `warnings` | array | いいえ | [警告オブジェクト](#警告オブジェクト)を参照してください。 | `[]` |

```json theme={null}
{
  "status": "Approved",
  "node_id": "first_key_people",
  "registry": {
    "officers": [
      {
        "uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
        "name": "María García López",
        "designation": "Administrador único",
        "role": "Director",
        "nationality": "ESP",
        "appointment_date": "2018-03-22",
        "termination_date": null,
        "is_active": true,
        "address": "Calle Mayor 1, 28001 Madrid",
        "aml_status": "Approved",
        "kyc_status": "Approved",
        "kyc_session_url": "https://verify.didit.me/s/…",
        "kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
        "verification_workflow_type": "kyc",
        "verification_workflow_id": "11111111-1111-1111-1111-111111111111",
        "verification_workflow_label": "KYB officer KYC",
        "verification_workflow_features": [
          { "feature": "ID_VERIFICATION", "status": "Approved" },
          { "feature": "LIVENESS", "status": "Approved" },
          { "feature": "FACE_MATCH", "status": "Approved" }
        ],
        "didit_internal_id": "user-12345",
        "kyc_document_type": "Passport",
        "kyc_nationality": "ESP",
        "kyc_liveness_passed": true,
        "kyc_verified_at": "2026-05-17T10:10:11Z",
        "kyc_aml_categories": [],
        "kyc_notification_sent_at": "2026-05-15T08:00:00Z"
      }
    ],
    "beneficial_owners": []
  },
  "submitted": {
    "parties": [
      {
        "uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
        "entity_type": "person",
        "source": "USER",
        "name": "María García López",
        "first_name": "María",
        "last_name": "García López",
        "company_name": null,
        "registration_number": null,
        "email": "maria.garcia@example.com",
        "nationality": "ESP",
        "phone_number": null,
        "date_of_birth": "1990-05-12",
        "position": "Administrador único",
        "custom_fields": {},
        "is_active": true,
        "is_skipped": false,
        "requires_verification": true,
        "roles": [
          { "role": "UBO", "ownership_percent": 75.0, "voting_percent": null }
        ],
        "kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
        "kyc_session_status": "Approved",
        "kyc_session_url": "https://verify.didit.me/s/…",
        "kyb_sub_session_id": null,
        "kyb_sub_session_status": null,
        "kyb_sub_session_url": null,
        "verification_workflow_type": "kyc",
        "verification_workflow_id": "11111111-1111-1111-1111-111111111111",
        "verification_workflow_label": "KYB officer KYC",
        "verification_workflow_features": [
          { "feature": "ID_VERIFICATION", "status": "Approved" },
          { "feature": "LIVENESS", "status": "Approved" }
        ],
        "didit_internal_id": "user-12345"
      }
    ]
  },
  "ubo_kyc_summary": { "total": 1, "approved": 1, "flagged": 0, "pending": 0 },
  "warnings": []
}
```

## 判定レベルのフィールド

これらのキーは、`GET /v3/session/{sessionId}/decision/`では機能の配列と同じ階層に、Webhookでは`decision`の中に含まれます。

| フィールド | 型 | Null許容 | 説明 |
| - | - | - | - |
| `status_override` | object | はい | レビュアーが`status`を手動で設定した後の`{ overridden_at, automatic_status }`。ステータスが自動判定によるものである場合は`null`です。 |
| `decision_trace` | object | いいえ | ステータスが決定された経緯: `status`、`decided_by`（`manual`、`automatic`または`investigator`）、`decided_at`、`automatic_status`、`terminal_node_id`、`actor`、`warning_counts`、`status_warnings`。 |
| `linked_records` | object | はい | `same_face`、`earlier_verifications`、`networks`の概要。表示する情報がない場合は`null`です。 |
| `biometric_retention` | object | いいえ | `{ jurisdictions, deletes_at }`。`deletes_at`はセッションのライブ生体データが削除される日付で、まだ適用される日付がない場合は`null`です。 |
| `database_validation_not_performed_reason` | object | はい | 設定済みのデータベース検証で結果が得られなかった理由を説明する`{ code, message }`。 |
| `assignee`, `waiting_since`, `sla_due_at` | object, datetime | はい | セッションを担当しているConsoleのレビュアーと、そのレビューの時間管理情報。時間管理情報は、セッションが`In Review`の場合を除き`null`です。 |
| `shared_from_session`, `shared_from_session_number` | UUID, integer | はい | インポートされたセッションの元のセッション。 |
| `sandbox_scenario` | string | はい | サンドボックスセッションの作成時に指定されたシナリオ。 |
| `fraud_check` | object | はい | Fraud Check APIの結果。それ以外のすべてのセッションでは`null`です。 |
| `full_session_video`, `full_session_video_recorded_at` | URL, datetime | はい | 録画データとその録画日時。組織がセッション全体の動画を録画している場合にのみ返されます。 |

読み取り方法については[セッションの取得](https://docs.didit.me/ja/sessions-api/retrieve-session.md#ステータス、判定トレース、レビューのフィールド)を参照してください。

## 生体情報の利用同意

ユーザー認証のすべての判定とセッションのWebhookには、単一の`biometric_consent`オブジェクト(配列ではありません)が含まれます。このオブジェクトは、セッションで生体情報の明示的な同意が必要だったかどうか、その理由、および回答の証跡を示します。セッションが一度も評価されなかった場合(顔撮影を含まないワークフローなど)は`null`になります。ソース: `BiometricConsentDecisionSerializer`(`sessions/serializers/biometric_consent.py`)。このステップが表示される条件と各ケースの意味については、[生体情報の利用同意](https://docs.didit.me/ja/getting-started/biometric-consent.md)で説明しています。

値が記録されていないフィールドは`null`になり、空文字列になることはありません。

| フィールド | 型 | 説明 |
| - | - | - |
| `required` | boolean | セッションで生体情報の明示的な同意を取得する必要があるかどうか。`false`に戻ることはありません。 |
| `trigger` | string (enum) \| null | 同意が必要な理由、または同意がどのように満たされたか: `declared_state`、`ip_state`、`ip_unknown`、`document_issuer`、`forced`(アプリケーションのモードが「常に」)、`customer_collected`(セッション作成時に`biometric_consent`を送信した場合)。同意が不要な間は`null`です。 |
| `status` | string (enum) | `not_required`、`pending`(必要だが未取得)、`given`、`declined`(拒否が記録された。現在、拒否を選択できるDiditの画面はありません)。 |
| `given_at` | string (ISO 8601) \| null | 同意が得られた日時。`customer_collected`の場合は、送信された`given_at`です。 |
| `declined_at` | string (ISO 8601) \| null | 拒否が記録された日時。 |
| `text_version` | string \| null | 本人が回答した同意文のバージョンID、または送信されたバージョンID。 |
| `text_hash` | string \| null | 表示された言語での正確な文面のSHA-256(16進数)。 |
| `locale` | string \| null | 文面が表示された言語。 |
| `policy_url` | string \| null | ステップがリンクしていた生体データポリシー。 |
| `step` | string \| null | 本人が回答した時点でセッションがあったワークフローのステップ(例: `LIVENESS`)。 |
| `node_id` | string \| null | 本人が回答した時点でセッションがあったワークフローグラフのノード。 |
| `ip_address` | string \| null | 回答の送信元IP。 |
| `ip_country_code` | string \| null | 回答のIPのISO 3166-1 alpha-2の国。 |
| `ip_state` | string \| null | 回答のIPのISO 3166-2の行政区画(例: `US-IL`)。 |
| `ip_city` | string \| null | 回答のIPの都市。 |
| `user_agent` | string \| null | 回答のリクエストのユーザーエージェント。 |
| `detected_ip_address` | string \| null | 同意要否が最後に評価された際の本人のIP。本人が別のデバイスで回答した場合は、`ip_address`と異なることがあります。 |
| `detected_country_code` | string \| null | 検出されたIPのISO 3166-1 alpha-2の国。 |
| `detected_state` | string \| null | 検出されたIPのISO 3166-2の行政区画。 |
| `detected_city` | string \| null | 検出されたIPの都市。 |
| `declared_state` | string \| null | 申告されたISO 3166-2の行政区画: `user_state`、または`expected_details`内の米国の住所の州。 |
| `document_state` | string \| null | 本人確認書類を発行したISO 3166-2の行政区画。書類撮影時に読み取られます。 |
| `jurisdictions` | array of string | 生体情報に関する法律が本人に適用される米国の州(USPSコード、例: `IL`)。証跡から本人が米国内にいると判断されるが州が不明な場合は`US`です。該当がない場合は空になります。 |
| `retention_months` | integer \| null | `jurisdictions`のうち最も短い生体情報の保持期限(月数)。該当がない場合は`null`です。 |
| `reason` | string (enum) \| null | `BIOMETRIC_CONSENT_UNSUPPORTED_SDK`: 同意が必要であったにもかかわらず、4.10.0未満のネイティブSDK、またはバージョンを報告しなかったネイティブSDKが、ステップを経ずに顔を撮影した場合です。`status`は`pending`のまま、または本人が後でホスト型フローで同意した場合は`given`になります。`BIOMETRIC_CONSENT_DECLINED`: 拒否が記録された場合です(SDKの理由に置き換わります)。それ以外は`null`で、セッションで同意が不要だった場合は常に`null`です。 |
| `decline_reason` | string \| null | 記録された拒否によってセッションが終了した場合は`BIOMETRIC_CONSENT_DECLINED`、それ以外は`null`です。 |
| `face_data_deleted_at` | string (ISO 8601) \| null | 拒否によってセッションの顔画像、動画、顔テンプレートが削除された日時。拒否が記録されていない場合は`null`です。 |

イリノイ州のセッションで、4.10.0未満のネイティブSDKがステップを経ずにセルフィーを撮影した例:

```json theme={null}
{
  "required": true,
  "trigger": "ip_state",
  "status": "pending",
  "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": "203.0.113.42",
  "detected_country_code": "US",
  "detected_state": "US-IL",
  "detected_city": "Chicago",
  "declared_state": null,
  "document_state": null,
  "jurisdictions": ["IL"],
  "retention_months": 36,
  "reason": "BIOMETRIC_CONSENT_UNSUPPORTED_SDK",
  "decline_reason": null,
  "face_data_deleted_at": null
}
```

米国外に出口があるVPNを使用している本人が、ホスト型フローで同意した例:

```json theme={null}
{
  "required": true,
  "trigger": "declared_state",
  "status": "given",
  "given_at": "2026-10-13T18:31:07.412000Z",
  "declined_at": null,
  "text_version": "bio-consent-2026-10-12",
  "text_hash": "9b2f0c5e4d8a7f61c3e2b4a5d6f7081923a4b5c6d7e8f90a1b2c3d4e5f6a7b8c",
  "locale": "en",
  "policy_url": "https://didit.me/legal/biometric-data-policy",
  "step": "LIVENESS",
  "node_id": "feature_liveness_1",
  "ip_address": "198.51.100.23",
  "ip_country_code": "ES",
  "ip_state": "ES-M",
  "ip_city": "Madrid",
  "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",
  "detected_ip_address": "198.51.100.23",
  "detected_country_code": "ES",
  "detected_state": "ES-M",
  "detected_city": "Madrid",
  "declared_state": null,
  "document_state": null,
  "jurisdictions": ["IL"],
  "retention_months": 36,
  "reason": null,
  "decline_reason": null,
  "face_data_deleted_at": null
}
```

## ステータス列挙値リファレンス

`status`というフィールド名は、関連する2種類の値で共通して使用されます。このページの機能ごとのレポートオブジェクトはすべて機能レベルの列挙値を使用し、親セッションのトップレベルの`status`はより範囲の広いセッション列挙値を使用します。

### 機能レベルのステータス

すべてのレポートオブジェクトの`status`フィールドで使用されます。ソース: `common/config/choices.py:343-348`(`FeatureStatusChoices`)。

| 値 | 意味 |
| - | - |
| `Not Finished` | 機能はプロビジョニング済みですが、ユーザーがまだ完了していません。 |
| `Approved` | 機能がすべてのチェックに合格しました。 |
| `Declined` | 機能が少なくとも1つのハードチェックに不合格となりました(`log_type: "error"`を含む`warnings[]`を参照)。 |
| `In Review` | 機能がソフトフェイルのシグナルをトリガーし、手動レビューを待っています(`log_type: "warning"`を含む`warnings[]`を参照)。 |
| `Resub Requested` | レビュアーがユーザーにこの機能の再提出を求めました。 |

電話番号検証、メールアドレス認証、本人確認では、ステップがタイムアウトした場合に`Expired`が返されることもあります(`PhoneStatusChoices`は`common/config/choices.py:377-382`、`EmailStatusChoices`は`common/config/choices.py:434-439`)。

### セッションレベルのステータス

親セッションのトップレベルの`status`で使用されます。ソース: `common/config/choices.py:106-117`(`StatusChoices`)。

| 値 | 意味 |
| - | - |
| `Not Started` | セッションは作成済みですが、ユーザーがまだ開始していません。 |
| `In Progress` | ユーザーがフローを開始しましたが、結果はまだ確定していません。 |
| `Approved` | セッションがすべてのチェックに合格しました。 |
| `Declined` | セッションが少なくとも1つのハードチェックに不合格となりました。 |
| `In Review` | セッションは手動レビューを待っています。 |
| `Expired` | セッションが完了前に期限切れになりました。 |
| `Abandoned` | ユーザーがフローを完了せずに離脱しました。 |
| `Kyc Expired` | KYCの有効期間が経過しました(再検証フローで使用されます)。 |
| `Resubmitted` | 以前の却下の後にユーザーが再提出しました。このセッションはより新しいセッションに置き換えられています。 |
| `Awaiting User` | システムがユーザー側のアクション(OTPの入力など)を待っています。 |

> [!TIP]
>
> セッションの終端ステータスは`Approved`、`Declined`、`In Review`、`Expired`、`Kyc Expired`、`Abandoned`です。個々の機能が`In Review`のままでも、セッション全体の判定が確定することがあります。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.