> ## 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.

# ワークフロー機能設定 APIリファレンス

> DiditのPOSTおよびPATCH /v3/workflows/で使える設定フィールドのリファレンス。features配列でシンプルな直線型ワークフローを構築する際に利用します。

[`POST /v3/workflows/`](https://docs.didit.me/ja/management-api/workflows/create)および[`PATCH /v3/workflows/{settings_uuid}/`](https://docs.didit.me/ja/management-api/workflows/update)では、`features`配列の各項目内で以下の`config`フィールドを使用します。

```json theme={null}
{
  "workflow_label": "Standard KYC",
  "features": [
    {
      "feature": "OCR",
      "config": {
        "documents_allowed": {
          "USA": {
            "DL": {
              "enabled": 1,
              "sides": 2
            }
          }
        }
      }
    }
  ]
}
```

v3ワークフローAPIは、順序付きの`features`配列から、ノードを直列につないだワークフローを構築します。機能は実際の実行順どおりに送信してください。

> [!NOTE]
>
> 機能をどのエンジンで実行するか(Didit独自のエンジンか、サードパーティのプロバイダーか)は、以下のconfigフィールドでは指定しません。これはコンソールの[Marketplace](https://docs.didit.me/ja/console/marketplace.md)で管理され、機能の`config`オブジェクトに`provider_key`と`fallback_to_native`が自動的に設定されます。

## バリデーションルール

* `config.documents_allowed`を省略した場合、または`null`か`{}`を指定した場合、`OCR`はサポートされているすべての国と書類タイプを対象とします。カスタムの`documents_allowed`オブジェクトを送信する場合は、有効な国と有効化された書類タイプをそれぞれ1つ以上含める必要があります。各書類設定では、`sides`を`1`(表面のみ撮影)または`2`(表面と裏面を撮影)に設定できます。
* `QUESTIONNAIRE`には`config.questionnaire_uuid`が必須です。
* `KYB_DOCUMENTS`には`config.kyb_required_document_groups`が必須です。
* `SIGNATURE`は、適格電子署名が利用可能になるまで`signature_level: "qes"`を`qes_not_available`で拒否します。また、ワークフローの`signature_availability.aes`が`false`の間は、`signature_level: "aes"`の新しいステップを`aes_not_available`で拒否します。署名対象の書類は、セッション作成時に存在している必要があります。`signature_documents_source`を`workflow`に設定した場合、ステップにはコンソールでアップロードされた書類が必要です。書類のないステップは下書きのまま保存できますが、公開はできません。`session`に設定した場合は、すべての作成リクエストで`sign.documents`を送信する必要があります。
* シンプルなワークフローリクエストでは、`FACE_MATCH`は`OCR`の後に配置する必要があります。
* `NFC`と`DATABASE_VALIDATION`を同じワークフローに含める場合は`OCR`が必要です。`AML`の前には`OCR`、`KYB_REGISTRY`、`DOCUMENT_AI`のいずれかが必要です。前に`DOCUMENT_AI`しかない場合は、スクリーニング対象の`full_name`に値を入れられる必要があります。値の取得元は、すでに`full_name`というキーを持つ上流のDocument AIフィールド(自動的にマッピングされます)か、明示的な`config.aml_field_sources`エントリーのいずれかです([AML](#aml)を参照)。
* `KYB_DOCUMENTS`や`KYB_KEY_PEOPLE`などのKYBサブ機能を使用するには、ワークフロー内でそれより前に`KYB_REGISTRY`が必要です。
* ワークフローは個人(KYC)ワークフローか企業(KYB)ワークフローのいずれかであり、両方を兼ねることはできません。KYB機能(`KYB_REGISTRY`、`KYB_DOCUMENTS`、`KYB_KEY_PEOPLE`)を使用するワークフローで組み合わせられるのは、`AML`、`DOCUMENT_AI`、`QUESTIONNAIRE`、`PHONE_VERIFICATION`、`EMAIL_VERIFICATION`、`IP_ANALYSIS`、`SIGNATURE`のみです。`OCR`、`LIVENESS`、`FACE_MATCH`、`NFC`、`PROOF_OF_ADDRESS`、`DATABASE_VALIDATION`、`AGE_ESTIMATION`などの個人専用機能は含めることができず、個人ワークフローにKYB機能を含めることもできません。企業ワークフローでは、`DOCUMENT_AI`は`is_full_name`が指定されたフィールドを、個人ではなく検証済みの企業と照合します。企業の背後にいる人物を検証するには、別のKYCワークフローを作成し、`kyb_ubo_verification_workflow`、`kyb_officer_verification_workflow`、`kyb_shareholder_verification_workflow`のいずれかを使って`KYB_KEY_PEOPLE`ノードから参照します。
* アクションフィールドには、以下の各フィールドで制限が明記されていない限り、`DECLINE`、`REVIEW`、`NO_ACTION`のいずれかを使用します。
* スコアおよびしきい値のフィールドは、より狭い範囲が記載されていない限り、`0`から`100`までの数値です。

## 共通のステータスルール

すべての機能で、任意の`status_rules`配列を指定できます。フィールドの条件に一致したときに機能のステータスを上書きするために使用します。

```json theme={null}
{
  "status_rules": [
    {
      "field": "kyc.issuing_state",
      "operator": "in",
      "value": ["VEN", "IRN"],
      "status": "In Review",
      "value_type": "literal"
    },
    {
      "field": "kyc.extra_fields.profession",
      "operator": "fuzzy_match",
      "value": "Soft. Engineer",
      "score": 80,
      "status": "Declined",
      "value_type": "literal"
    },
    {
      "field": "kyc.extra_fields.dl_class_code_b_to",
      "operator": "less_than",
      "value": "2030-01-01",
      "status": "In Review",
      "value_type": "literal"
    },
    {
      "field": "kyc.extra_fields.dl_class_code_b_from",
      "operator": "less_than",
      "value": { "direction": "past", "amount": 3, "unit": "years" },
      "status": "Declined",
      "value_type": "relative_date"
    }
  ]
}
```

| フィールド | 型 | 説明 |
| - | - | - |
| `field` | string | チェック対象のフィールドパス。例:`kyc.issuing_state`、`kyc.document_type`。 |
| `operator` | string | `equals`、`not_equals`、`greater_than`、`greater_than_or_equals`、`less_than`、`less_than_or_equals`、`contains`、`not_contains`、`in`、`not_in`、`is_empty`、`is_not_empty`、`regex`、`fuzzy_match`のいずれか。 |
| `value` | any | 比較する値。値を必要としない演算子では、省略するか`null`を送信します。 |
| `status` | string | `Approved`、`Declined`、`In Review`、`No Action`のいずれか。 |
| `value_type` | string | 任意。デフォルトは`literal`です。別のフィールドと比較する場合は`field`、実行時にDiditのリストUUIDを解決する場合は`list`、日付フィールドを今日から一定期間前後した日付と比較する場合は`relative_date`を使用します。 |
| `score` | number | `fuzzy_match`では必須です。`0`から`100`までの最小類似度スコアを指定します。算出された類似度がこの値以上(`similarity >= score`)のときにルールが一致します。たとえば、類似度が`80`以上であれば、`Software Engineer`は`Soft. Engineer`に一致し得ます。 |

上の例は、「`kyc.extra_fields.profession`が最小スコア`80`で`Soft. Engineer`にあいまい一致した場合 → 機能のステータスを`Declined`に設定する」という意味です。

本人確認では、抽出された`extra_fields`の値を対象にできます。たとえば`kyc.extra_fields.profession`、`kyc.extra_fields.dl_class_code_b_from`や`kyc.extra_fields.dl_class_code_b_to`のような運転免許証の区分ごとの有効期間の開始日・終了日、`kyc.extra_fields.dl_class_code_b_notes`(英国の運転免許証の第12欄)のような区分ごとの制限・情報コードです。これらの値はOCR結果の`extra_fields`オブジェクトから取得されるもので、`expected_details`には含まれません。

> [!NOTE]
>
> `dl_class_code_*_from`と`dl_class_code_*_to`は、常に有効なISO日付であるか、`extra_fields`に存在しないかのどちらかです。Diditが読み取れなかったOCRテキストを日付フィールドに返すことはありません。区分表のセルを読み取れない場合、そのフィールドは生の文字列として送信されるのではなく省略されます。そのため、フィールドが常に存在すると想定せず、`is_empty`演算子を使用して読み取れなかった区分の日付を振り分けてください。

日付フィールドでは、`value_type: "relative_date"`を使用し、値には`{ "direction": "past" | "future", "amount": number, "unit": "days" | "months" | "years" }`の形式のオブジェクトを指定します。たとえば、`operator: "less_than"`と`{ "direction": "past", "amount": 3, "unit": "years" }`を組み合わせると、今日から3年より前の日付に一致します。

### 特定のステップと比較する

グラフワークフローでは、同じ機能を複数回実行できます。たとえば、本人確認のステップを3つ配置する場合です。
`value_type: "field"`を使用する場合、値の末尾に`@<node_id>`を付けると、特定の1つのステップから値を読み取れます。
参照するノードは、ルールが設定されたステップに到達するすべての経路で、そのステップより必ず前に実行される機能ステップであるか、ルールが設定されたステップ自体である必要があります。
サフィックスのない値は、ルールが設定されたステップから読み取られます。

```json theme={null}
{
  "status_rules": [
    {
      "field": "kyc.full_name",
      "operator": "fuzzy_match",
      "value": "kyc.full_name@ocr_1",
      "value_type": "field",
      "score": 80,
      "status": "Declined"
    }
  ]
}
```

3つ目の本人確認ステップに設定されたこのルールは、「このステップの`kyc.full_name`が、ステップ`ocr_1`で読み取られた氏名と最小スコア`80`であいまい一致した場合 → 機能のステータスを`Declined`に設定する」という意味です。
コンソールでは、変数ピッカーに対象となる各ステップがキャンバス上の番号で表示され、サフィックスは自動的に保存されます。

## OCR / 本人確認

機能の値は`OCR`です。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `documents_allowed` | object | 任意です。省略するか、`null`または`{}`を送信すると、サポートされているすべての国と書類タイプが許可されます。ISO3国コードと書類タイプ設定の対応は、許可する書類を制限したい場合にのみ送信してください。カスタム書類のうち少なくとも1つは`enabled: 1`である必要があります。書類設定には、表面のみを撮影する`sides: 1`、または表面と裏面を撮影する`sides: 2`を含めることができます。書類タイプには`P`、`ID`、`DL`、`RP`、`HIC`、`TC`、`SSC`のほか、各国でサポートされているその他の値があります。 |
| `methods` | object | 各国が3つの[本人確認方法](https://docs.didit.me/ja/core-technology/id-verification/verification-methods.md)のうちどれを使用できるかを指定します。3つの方法とは、書類の撮影、政府機関またはその他の信頼できる情報源に対する書類なしの照会、デジタルIDウォレットです。キー、国、または国内の方法を省略すると、その国は書類撮影のみとなります。すべての方法とウォレットが、機能カタログでその国について利用可能とされている必要があり、そうでない場合は保存が拒否されます。下記の[国ごとの方法](#国ごとのメソッド)を参照してください。 |
| `document_blur_fields_by_country` | object | ISO3国コードと、書類画像上でぼかして墨消しするフィールド名の対応です。 |
| `image_capture_methods_allowed` | string\[] | 許可される撮影方法です。値には`CAMERA_SCAN`と`UPLOAD`があります。 |
| `duplicated_user_action` | action | 重複ユーザーに対するアクションです。 |
| `is_age_restrictions_enabled` | boolean | 最低年齢と最高年齢のチェックを有効にします。 |
| `age_restrictions_by_country` | object | ISO3国コードと、`minimum_age`、任意の`maximum_age`、任意の`states`を含む年齢設定の対応です。 |
| `minimum_age` | integer | 全体の最低年齢で、`1`から`120`までです。 |
| `minimum_age_action` | action | ユーザーが`minimum_age`未満の場合のアクションです。 |
| `maximum_age` | integer | 全体の最高年齢で、`1`から`120`までです。 |
| `maximum_age_action` | action | ユーザーが`maximum_age`を超える場合のアクションです。 |
| `expiration_date_not_detected_action` | action | 書類の有効期限が見つからない場合のアクションです。 |
| `invalid_code_action` | action | バーコードまたは機械読み取り式コードが無効な場合のアクションです。 |
| `invalid_mrz_action` | action | MRZが無効な場合のアクションです。 |
| `inconsistent_data_action` | action | 抽出した書類のフィールド同士が矛盾する場合のアクションです。 |
| `invalid_validation_action` | action | 書類の検証に失敗した場合のアクションです。 |
| `expected_details_mismatch_action` | action | 想定されるユーザー情報が書類と一致しない場合のアクションです。 |
| `image_too_blurry_action` | action | 書類画像がぼやけている場合のアクションです。 |
| `image_too_dark_action` | action | 書類画像が暗すぎる場合のアクションです。 |
| `image_too_bright_action` | action | 書類画像が露出オーバーの場合のアクションです。 |
| `unparsed_address_action` | action | 書類の住所を解析できない場合のアクションです。 |
| `address_validation_enabled` | boolean | このステップが読み取る住所（本人確認書類に印字された住所）を郵便の参照データと照合して検証します。住所が実在することを確認して正規化しますが、住所を個人と紐付けることは決してありません。結果は判定内のステップの`address_validation`オブジェクトに含まれます。**検証した住所1件につき\$0.10が課金されます**。実行できなかった検証（`unavailable`）は無料です。デフォルトでは無効です。 |
| `address_not_verified_action` | action | 住所検証で建物単位まで住所を確認できなかった場合（`ADDRESS_NOT_VERIFIED`: `partially_verified`または`not_verified`）のアクションです。`address_validation_enabled`が有効な間のみ適用されます。デフォルトは`NO_ACTION`で、警告を記録するだけです。 |
| `document_or_personal_number_format_mismatch_action` | action | 書類番号または個人番号の形式が想定されるパターンと一致しない場合のアクションです。 |
| `critical_field_occlusion_action` | action | 撮影された書類上で重要な印字フィールド（身分証番号、氏名、生年月日、有効期限）が物理的に覆われていたことを遮蔽チェックが報告した場合のアクションです。身分証番号を覆うことは撮影品質ではなく改ざんのシグナルであるため、デフォルトは`REVIEW`です。いずれの場合も、覆われたフィールドから読み取った値は抽出結果から除外されます。墨消しされた書類が決してレビュアーに届いてはならない場合は、`DECLINE`に引き上げてください。 |
| `document_without_portrait_action` | action | 認識された書類タイプが、どの面にも顔写真を持たない場合（一部の在留許可証、健康保険証、登録証明書、その他カタログ上で顔写真がないとわかっている書類群）のアクションです。デフォルトは`REVIEW`です。顔照合がワークフローの本人確認の中心となっている場合は、`DECLINE`を検討してください。 |
| `is_document_selfie_portrait_match_enabled` | boolean | 書類の顔写真とセルフィーの比較を有効にします。 |
| `document_selfie_portrait_match_decline_threshold` | integer | 書類の顔写真とセルフィーの照合における却下のしきい値です。 |
| `document_selfie_portrait_match_review_threshold` | integer | 書類の顔写真とセルフィーの照合におけるレビューのしきい値です。 |
| `document_selfie_face_search_enabled` | boolean | 書類撮影時に撮影されたセルフィーに対して[顔検索1:N](https://docs.didit.me/ja/core-technology/face-search/overview.md#書類撮影中に撮る自撮り)を実行し（`is_document_selfie_portrait_match_enabled`が必要です）、顔のブロックリストおよび過去に認証済みのユーザーと照合します。セルフィーは比較されるだけで、そのテンプレートが保存されることは決してありません。デフォルトで有効です。`false`にすると検索がスキップされ、書類セルフィーの重複顔アクションは判定の対象がなくなります。ライブネスステップで`face_search_enabled: false`にした場合も検索はスキップされます。このオプトアウトはセッション内のすべてのセルフィーに適用されるためです。 |
| `document_selfie_duplicated_face_action` | action | 書類撮影時のセルフィーが、このアプリケーションですでに認証済みのユーザーの顔と一致する、または一致する可能性がある場合の判定です。デフォルトは`NO_ACTION`です。 |
| `document_selfie_duplicated_face_name_mismatch_action` | action | 書類撮影時のセルフィーが、別の氏名で認証済みのユーザーと一致する場合の判定です。`document_selfie_duplicated_face_action`より厳しくすることしかできません。デフォルトは`REVIEW`です。 |
| `document_selfie_duplicated_face_document_mismatch_action` | action | 書類撮影時のセルフィーが、本人確認書類上の生年月日が異なる状態で認証済みのユーザーと一致する場合の判定です。同一人物が別の書類や更新後の書類を使用している場合はフラグが立てられません。`document_selfie_duplicated_face_action`より厳しくすることしかできません。デフォルトは`REVIEW`です。 |
| `id_verification_name_match_score_threshold` | integer | 複数の本人確認にわたる氏名一致のしきい値。 |
| `id_verification_max_retry_attempts` | integer | 本人確認の再試行回数の上限。`2`〜`5`。 |
| `id_document_quality_threshold` | integer | 書類画像が受け付けられるために満たす必要がある撮影品質スコアの最小値（`0`〜`100`）。品質チェックは常に実行され、設定できるのはこのしきい値のみです。デフォルトは`20`で、劣化した撮影や境界線上の撮影（ぼやけ、ブレ、判読できない文字）を却下しつつ、判読可能な書類は通過するよう調整されています。より厳しい撮影要件が必要な場合は値を上げてください。コンソールではこの値を知覚的なスライダーで表示し、デフォルトの`20`はバランスの取れた50%として表示されます。 |
| `cross_org_fraud_document_action` | action | この書類がネットワーク内の別の組織によって不正と判定されていた場合の判定。 |
| `document_audio_recording_enabled` | boolean | 書類撮影中にマイクの音声を録音し、レビュアーがセッションの音声を聞けるようにします。デフォルトはオフです。 |
| `document_liveness_portrait_replace_decline_threshold` | integer | 肖像差し替えスコア（`0`〜`100`、高いほど本物である可能性が高い）がこの値を下回ると、セッションは却下されます。デフォルトは`35`です。[書類ライブネスのしきい値](https://docs.didit.me/ja/core-technology/id-verification/warnings-id-verification.md#書類の真正性検知のしきい値を設定する)を参照してください。 |
| `document_liveness_portrait_replace_review_threshold` | integer | 肖像差し替えスコアがこの値を下回ると、まだ却下されていない場合にセッションはレビュー中になります。`100`にすると、ほぼすべてのセッションが保留されます。デフォルトは`70`です。[書類ライブネスのしきい値](https://docs.didit.me/ja/core-technology/id-verification/warnings-id-verification.md#書類の真正性検知のしきい値を設定する)を参照してください。 |
| `document_liveness_printed_copy_decline_threshold` | integer | 印刷コピースコア（`0`〜`100`、高いほど本物である可能性が高い）がこの値を下回ると、セッションは却下されます。デフォルトは`35`です。[書類ライブネスのしきい値](https://docs.didit.me/ja/core-technology/id-verification/warnings-id-verification.md#書類の真正性検知のしきい値を設定する)を参照してください。 |
| `document_liveness_printed_copy_review_threshold` | integer | 印刷コピースコアがこの値を下回ると、まだ却下されていない場合にセッションはレビュー中になります。`100`にすると、ほぼすべてのセッションが保留されます。デフォルトは`77`です。[書類ライブネスのしきい値](https://docs.didit.me/ja/core-technology/id-verification/warnings-id-verification.md#書類の真正性検知のしきい値を設定する)を参照してください。 |
| `document_liveness_screen_replay_decline_threshold` | integer | 画面撮影スコア（`0`〜`100`、高いほど本物である可能性が高い）がこの値を下回ると、セッションは却下されます。デフォルトは`30`です。[書類ライブネスのしきい値](https://docs.didit.me/ja/core-technology/id-verification/warnings-id-verification.md#書類の真正性検知のしきい値を設定する)を参照してください。 |
| `document_liveness_screen_replay_review_threshold` | integer | 画面撮影スコアがこの値を下回ると、まだ却下されていない場合にセッションはレビュー中になります。`100`にすると、ほぼすべてのセッションが保留されます。デフォルトは`70`です。[書類ライブネスのしきい値](https://docs.didit.me/ja/core-technology/id-verification/warnings-id-verification.md#書類の真正性検知のしきい値を設定する)を参照してください。 |
| `id_verification_injection_attack_action` | action | 書類、またはIDルックアップのために撮影されたセルフィーが、デバイス自体のカメラで撮影されたものではなく注入されたものだった場合（`INJECTION_ATTACK_DETECTED`）の判定。対象となるのは、ソフトウェアの仮想カメラ、ページやブラウザ自動化によって生成されたカメラ映像、フックされたカメラ、アプリにアタッチされた計装ツールです。値: `DECLINE`、`REVIEW`、`NO_ACTION`。デフォルトは`DECLINE`です。本物の人物が生じさせうるシグナルによってこれが発生することはありません。ライブネスと顔照合では、代わりに`frame_injection_action`がこのリスクを扱います。 |
| `image_quality_too_low_action` | action | 書類画像の全体的な品質が基準を下回る場合の判定。 |
| `is_image_capture_review_screen_enabled` | boolean | 書類を撮影するたびにユーザーに確認画面を表示し、送信前に写真を撮り直せるようにします。デフォルトはオフです。 |
| `is_ocr_id_verification_data_review_enabled` | boolean | ステップが完了する前に、抽出された本人情報をユーザーが確認・修正できるようにします。デフォルトはオフです。修正内容は`ocr_id_verification_data_review_critical_fields`に基づいて評価され、不一致があった場合はそれに応じて重要または軽微のアクションが適用されます。ワークフローにNFCが含まれていてもこの確認は実行され、その後のチップ読み取り結果で単に上書きされます。 |
| `ocr_id_verification_data_review_critical_fields` | string\[] | ユーザーがOCR結果を編集した際に重要とみなす抽出済みの本人情報フィールド。重要フィールドで不一致が生じた場合、軽微のアクションではなく重要のアクションが適用されます。形式: `["first_name" \| "last_name" \| "date_of_birth" \| ...]`。 |
| `ocr_id_verification_data_review_critical_mismatch_action` | restricted action | 重要フィールドについて、ユーザーの編集内容がOCRと一致しない場合の判定。 |
| `ocr_id_verification_data_review_minor_mismatch_action` | action | 重要でないフィールドについて、ユーザーの編集内容がOCRと一致しない場合の判定。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

> [!NOTE]
>
> 書類ライブネスは、シグナルごとのアクションフィールドではなく、上記の6つの`document_liveness_*`しきい値で設定します。
> `portrait_replacement_action`、`printed_copy_action`、
> `screen_capture_action`はアカウントレベルの設定であり、ワークフローの機能設定では**受け付けられません**。
> APIは保存時に未知の設定キーを削除するため、ここで送信しても効果はありません。各シグナルには、
> スコアが高いほど書類が本物である可能性が高いことを意味する`0`-`100`のスケールで、却下しきい値とレビューしきい値があります。

例:

```json theme={null}
{
  "feature": "OCR",
  "config": {
    "documents_allowed": {
      "USA": {
        "DL": {
          "enabled": 1,
          "sides": 2
        }
      }
    },
    "duplicated_user_action": "REVIEW",
    "image_capture_methods_allowed": ["CAMERA_SCAN", "UPLOAD"]
  }
}
```

### 国ごとのメソッド

`methods`のキーは[ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3)の国コードです。各国には最大3つのメソッドオブジェクトを指定でき、省略したものにはデフォルトが適用されます。

```json theme={null}
{
  "feature": "OCR",
  "config": {
    "methods": {
      "ZAF": {
        "document": { "enabled": true },
        "id_lookup": {
          "enabled": true,
          "max_attempts": 2,
          "skip_liveness_and_face_match": true,
          "on_partial_match": "fallback_to_document",
          "on_no_match": "fallback_to_document",
          "on_provider_error": "fallback_to_document"
        },
        "wallet": { "enabled": false, "providers": [], "on_failure": "fallback_to_document" }
      },
      "DNK": {
        "document": { "enabled": true },
        "id_lookup": { "enabled": true, "on_no_match": "decline" }
      }
    }
  }
}
```

最初の画面に書類を表示せず、ウォレットやルックアップが成功しなかった場合にのみ提示するには、`document.fallback_only`を設定します。この例ではフィンランドを使用しています。フィンランドではFinnish Trust Networkが最初に使われ、書類撮影はフォールバックです。また、フォールバック時に提示できる書類があるよう、フィンランドでも`documents_allowed`で書類タイプ（パスポートやIDカードなど）を有効にする必要があります。

```json theme={null}
{
  "FIN": {
    "document": { "enabled": true, "fallback_only": true },
    "wallet": { "enabled": true, "providers": ["ftn"], "on_failure": "fallback_to_document" }
  }
}
```

上記の2つのルックアップは現在のカタログでどちらも`available`のため、この設定はそのまま保存できます。ウォレットブロックは意図的にオフにしています。**本番環境で利用可能なウォレットはまだありません**。そのため`wallet.enabled: true`は拒否され、ルックアップの設定を含む保存全体が失敗します。カタログである国のウォレットが`available`になったら、その国に追加してください:

```json theme={null}
{
  "DNK": {
    "document": { "enabled": true },
    "wallet": { "enabled": true, "providers": ["mitid"], "on_failure": "fallback_to_document" }
  }
}
```

| キー | 型 | デフォルト | 説明 |
| - | - | - | - |
| `<ISO3>.document.enabled` | boolean | `true` | この国で撮影された書類を受け付けるかどうか。受け付ける書類の種類は引き続き`documents_allowed`で指定します。 |
| `<ISO3>.document.fallback_only` | boolean | `false` | 書類撮影を有効にしたまま、最初の画面には表示しません。ユーザーはその国のウォレットまたはIDルックアップから開始します。書類撮影に進むのは、ウォレットでのサインインが失敗、キャンセル、タイムアウトしたユーザー、またはルックアップで一致しなかったユーザー（`on_failure`、`on_partial_match`、`on_no_match`、`on_provider_error`の各設定が`fallback_to_document`の場合）のみです。ウォレットが1つだけの場合、ユーザーはそのウォレットに直接移動します。この設定を使わない場合、ウォレットまたはルックアップは書類撮影と並べて表示されます。`document.enabled`が`true`で、かつその国の少なくとも1つのウォレットまたはIDルックアップが書類撮影にフォールバックする場合を除き、HTTP 400で拒否されます。 |
| `<ISO3>.id_lookup.enabled` | boolean | `false` | この国の政府機関またはその他の公的な情報源に対して、書類を使わないルックアップを提供します。カタログでその国の情報源が`available`とされていない場合は拒否されます。 |
| `<ISO3>.id_lookup.max_attempts` | integer | `1` | `1`から`5`。フォールバック設定が発動するまでに、ユーザーが実行できる**応答があった**ルックアップの回数です。クライアント側の形式チェックに通らない番号は登録簿に送信されないため、回数にも請求にも含まれません。 |
| `<ISO3>.id_lookup.skip_liveness_and_face_match` | boolean | `true` | ポートレートを返す登録簿と一致した後、ワークフロー自体のライブネス検知と顔照合のステップをスキップします。ルックアップの段階で、セルフィーに対するパッシブライブネスがすでに実行され、そのポートレートとの照合も済んでいるためです。ポートレートを返さない情報源ではこの設定は意味を持たないため、保存時に`false`に正規化されます。 |
| `<ISO3>.id_lookup.on_partial_match` | `fallback_to_document` \| `decline` | `fallback_to_document` | 登録簿から応答があったものの、一部のフィールドが一致しなかった場合の動作です。 |
| `<ISO3>.id_lookup.on_no_match` | `fallback_to_document` \| `decline` | `fallback_to_document` | 登録簿から応答があり、一致するレコードが存在しなかった場合の動作です。 |
| `<ISO3>.id_lookup.on_provider_error` | `fallback_to_document` \| `decline` | `fallback_to_document` | 登録簿に接続できなかった場合の動作です。請求されることはありません。 |
| `<ISO3>.id_lookup.response_fields` | string\[] \| null | `null` | 情報源のレスポンスフィールドキーのうち、任意で指定するサブセットです。不明なキーは拒否され、情報源の必須フィールドは常に追加し直されるため、保存される値は常に有効な選択になります。現在のステージング実装では、この選択を比較出力、任意の性別、保持される登録簿ポートレートに適用します。必須の身元情報フィールドは残ります。下記のロールアウトと保持に関する注記を参照してください。 |
| `<ISO3>.wallet.enabled` | boolean | `false` | この国でデジタルIDウォレットによるサインインを提供します。 |
| `<ISO3>.wallet.providers` | string\[] | `[]` | この国で受け入れるカタログのウォレットIDです。これは許可リストであり、優先順位ではありません。送信した順序はカタログの順序に正規化されます。`enabled`が`true`の場合、少なくとも1つのウォレットが必要です。その国で提供されていないウォレット、または近日提供予定のウォレットは拒否されます。 |
| `<ISO3>.wallet.on_failure` | `fallback_to_document` \| `decline` | `fallback_to_document` | サインインがキャンセル、タイムアウト、または失敗した場合の動作です。 |

保存時にAPIが適用する検証:

* 不明な国コード、国内の不明なキー、またはメソッド内の不明なキーは拒否されます。暗黙的に破棄されるものはありません。
* どのメソッドも有効になっていない国は拒否されます。その国では誰も認証できないためです。
* ウォレットまたはルックアップが書類撮影にフォールバックできるのは、その国で書類撮影が有効な場合のみです。`document.enabled`が`false`の国で`fallback_to_document`を指定すると、フォールバック先がないため実行時に却下されます。
* `document.fallback_only: true`は、`document.enabled`が`true`で、かつその国の少なくとも1つのウォレットまたはIDルックアップが書類撮影にフォールバックする場合を除き、HTTP 400で拒否されます。

> [!WARNING]
>
> 現在のステージング実装では、`id_lookup.response_fields`を比較出力、任意の性別、保持される登録簿ポートレートに適用します。必須の身元情報フィールドは引き続き検証記録の一部となります。これは、すべての中間プロバイダーペイロードが処理から除外されることを保証するものではありません。この変更の本番環境へのロールアウトは検証されていません。保持要件を満たすためにフィールド選択に依存する前に、対象の環境で動作を確認してください。

`methods`を記述する前に、コンソールの**国**タブ、または[`didit_workflow_get_id_verification_methods_catalog`](https://docs.didit.me/ja/integration/mcp/tools)MCPツールで機能カタログを確認してください。動作、対応範囲、請求については[本人確認の方法](https://docs.didit.me/ja/core-technology/id-verification/verification-methods.md)を参照してください。

## NFC / ePassport

機能の値:`NFC`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `allow_nfc_skip` | boolean | ユーザーの書類がICチップの読み取りに対応している場合に、NFCのスキップを許可します。 |
| `skip_nfc_action` | action | ユーザーがNFCをスキップした場合のアクション。 |
| `unverified_chip_action` | action | ICチップの検証に失敗した場合のアクション。 |
| `trust_anchor_missing_action` | action | ICチップのデータグループのハッシュは改ざんされていないものの、発行国のCSCAトラストアンカーが読み込まれていないため証明書チェーンを検証できない場合の判定。 |
| `jpki_request_attributes` | boolean | 日本のマイナンバーカード([JPKI](https://docs.didit.me/ja/core-technology/nfc-verification/overview.md#日本のマイナンバーカード-jpki)、ネイティブSDKのみ):署名用電子証明書も読み取ります。この証明書の読み取りにはカードの署名用暗証番号が必要で、証明書には所有者の氏名、生年月日、性別、住所が含まれ、本人確認のデータと照合されます。デフォルトは`true`です。`false`の場合は利用者証明用電子証明書(4桁の暗証番号)のみを読み取ります。この証明書はカードの所持と暗証番号の知識を証明しますが、所有者のデータは含みません。 |
| `jpki_certificate_invalid_action` | action | マイナンバーカードの証明書がJPKI認証局にチェーンされていない、有効期間外である、または要求された種類のカード証明書ではない場合の判定(`JPKI_CERTIFICATE_INVALID`)。デフォルトは`DECLINE`です。 |
| `jpki_signature_invalid_action` | action | ワンタイムチャレンジに対するマイナンバーカードの署名を検証できず、カードの所持と暗証番号の知識が証明されない場合の判定(`JPKI_SIGNATURE_INVALID`)。デフォルトは`DECLINE`です。 |
| `jpki_certificate_revoked_action` | action | 失効確認でマイナンバーカードの証明書が失効していると報告された場合の判定(`JPKI_CERTIFICATE_REVOKED`)。デフォルトは`DECLINE`です。 |
| `jpki_revocation_unchecked_action` | action | マイナンバーカードは検証されたものの失効確認の応答が得られず、失効したカードである可能性を排除できない場合の判定(`JPKI_REVOCATION_UNCHECKED`)。デフォルトは`REVIEW`です。 |
| `jpki_inconsistent_data_action` | action | マイナンバーカードの署名用電子証明書に記載された氏名、生年月日、性別または住所が、同じカードの本人確認のデータと異なる場合の判定(`JPKI_AND_OCR_DATA_NOT_SAME`)。デフォルトは`REVIEW`です。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

## ライブネス

機能の値: `LIVENESS`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `face_liveness_method` | string | `ACTIVE_3D`、`FLASHING`、`PASSIVE`のいずれか。 |
| `face_liveness_mode` | string | ライブネスモードの上書き設定。 |
| `face_liveness_flash_mode` | string | `ACTIVE_3D`および`FLASHING`方式のフラッシュモード。`"0"`（非厳格、デフォルト）は、画面に表示された色がユーザーの顔に反射していることを検証します。`"1"`（厳格）はさらに、反射が表示された色の順序と完全に一致することを求めます。リプレイ攻撃や動画インジェクション攻撃への耐性は高まりますが、誤って却下されるケースが増えます。 |
| `face_liveness_score_decline_threshold` | integer | 却下のしきい値。 |
| `face_liveness_score_review_threshold` | integer | レビューのしきい値。 |
| `face_liveness_possible_duplicated_face_action` | action | 顔が重複している可能性がある場合のアクション。 |
| `face_liveness_multiple_faces_action` | action | 複数の顔が検出された場合のアクション。 |
| `face_liveness_video_anomaly_action` | action | 保存された録画に、同じ動きのシーケンスが繰り返し含まれる場合のアクション。デフォルトは`NO_ACTION`です。`REVIEW`と`DECLINE`は、判定済みの認証を非同期にエスカレートできます。まばらな静止フレームや繰り返される静止フレームだけではトリガーされません。 |
| `face_liveness_attack_face_match_action` | action | ライブネスの顔が、このアプリケーションの過去のセッションにおける別のユーザーの顔のうち、撮影が高い信頼度でライブネス攻撃と判定された顔と一致した場合のアクション（警告`FACE_MATCHES_LIVENESS_ATTACK`）。`NO_ACTION`または`REVIEW`を指定できます。`DECLINE`も受け付けますが、本物のユーザーが一度誤って却下された後に通過する場合があるため、`REVIEW`として適用されます。デフォルトは`NO_ACTION`です。 |
| `race_map_similarity_thresholds` | object | 人口統計グループごとの類似度しきい値。 |
| `face_privacy_mode_enabled` | boolean | 顔アセットのプライバシーモードを有効にします。 |
| `face_quality_review_threshold` | integer | 顔画像品質のレビューしきい値。 |
| `face_quality_decline_threshold` | integer | 顔画像品質の却下しきい値。レビューしきい値以下である必要があります。 |
| `face_luminance_min_threshold` | integer | 輝度の最小しきい値。`face_luminance_max_threshold`より小さい値である必要があります。 |
| `face_luminance_min_action` | action | 輝度が低すぎる場合のアクション。 |
| `face_luminance_max_threshold` | integer | 輝度の最大しきい値。 |
| `face_luminance_max_action` | action | 輝度が高すぎる場合のアクション。 |
| `face_liveness_max_attempts` | integer | セッション1件あたりのライブネス送信回数の合計で、`1`から`3`。デフォルトの`3`は、最初の試行1回と再試行2回を意味します。`1`に設定しても、撮影品質に起因する失敗の再試行は無効になりません。試行に付いた警告がすべて環境要因（`LOW_FACE_LUMINANCE`、`HIGH_FACE_LUMINANCE`、`LOW_FACE_QUALITY`、`HIGH_FACE_OCCLUSION`、`NO_FACE_DETECTED`）である場合、ユーザーには対処方法を示すフィードバックとともに必ず2回目の試行が与えられます。 |
| `cross_org_fraud_face_action` | action | **非推奨であり、現在は適用されません**。顔を不正の判定を伴うものとして扱っていましたが、安定した生体認証アイデンティティに不正の判定を紐付けることはできないためです。既存のワークフローが引き続き検証を通過できるよう、値は現在も受け付けます。`cross_org_identity_claim_pattern_action`を使用してください。 |
| `cross_org_identity_claim_pattern_action` | action | ネットワーク内の他の組織が、この同一人物について、主張された身元が一致しなかった身元主張イベントを記録している場合の判定。レビューまたはアクションなしのみ指定でき、ここで却下を設定した場合はレビューに引き下げられます。[組織横断の身元主張](https://docs.didit.me/ja/core-technology/liveness/cross-organization-identity-claims.md)を参照してください。 |
| `external_capture_device_action` | action | 外部撮影デバイスが検出された場合の判定。 |
| `face_audio_recording_enabled` | boolean | セルフィー撮影中にマイクの音声を録音し、レビュアーがセッションの音声を聞けるようにします。デフォルトはオフです。 |
| `face_search_enabled` | boolean | セルフィーに対して自動の[顔検索1:N](https://docs.didit.me/ja/core-technology/face-search/overview.md#自動顔検索をオフにする)を実行します。以前に認証されたユーザー、顔のブロックリストおよび許可リストと照合し、後の照合のために生体認証テンプレートを保存します。デフォルトはオンです。`false`にすると検索をスキップし、このステップの顔テンプレートは保持されず、重複顔に関するアクションは実行されなくなります。 |
| `face_liveness_uncertain_retry_enabled` | boolean | ネイティブSDKのアクティブライブネスのみ。オンにすると、ライブネススコアが`face_liveness_score_decline_threshold`と`face_liveness_score_review_threshold`の間（両端を含まない）にある撮影は、エンジンが付けた判定にかかわらず決して判定されません。本人には結果が不明確だったことが伝えられ、毎回撮り直しが求められます。これは`face_liveness_max_attempts`の回数枠の外で行われます（この上限は、エンジンがスコアを算出できなかった撮影には引き続き適用されます）。デフォルトはオフで、Webフローではこの設定は無視されます。 |
| `face_liveness_duplicated_face_name_mismatch_action` | action | 重複した顔が別の名前で見つかった場合の判定。 |
| `face_liveness_duplicated_face_document_mismatch_action` | action | 重複した顔が見つかり、一致したユーザーの本人確認書類に異なる生年月日が記載されている場合の判定。同一人物が別の書類や更新後の書類を使用している場合はフラグ付けされません。デフォルトは`REVIEW`です。 |
| `frame_injection_action` | action | 注入された動画フレームが検出された場合の判定。 |
| `screen_capture_action` | action | セルフィーが画面を撮影した写真である場合の判定。 |
| `virtual_camera_action` | action | 仮想カメラの映像が検出された場合の判定。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

## 顔照合

機能の値: `FACE_MATCH`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `face_match_score_decline_threshold` | integer | 却下のしきい値です。 |
| `face_match_score_review_threshold` | integer | レビューのしきい値です。 |
| `face_match_max_attempts` | integer | セッション1件あたりの顔照合の送信回数の合計で、`1`から`3`までです。デフォルトの`3`は、初回の試行1回と再試行2回を意味します。 |
| `face_match_not_computed_action` | 制限付きアクション | 顔照合スコアを算出できなかった場合（顔写真またはセルフィーがない場合）の判定です。 |
| `face_match_eyes_covered_action` | アクション | セルフィーで目の領域が覆われている場合の判定です。デフォルトは`NO_ACTION`で、顔照合の結果を変えずに証跡を記録します。このシグナルはまだキャリブレーション中のため、該当領域のステータスがキャリブレーション済みとなるまではシャドーモードでのみ動作します。今`REVIEW`または`DECLINE`を設定しておくと、該当領域がキャリブレーション済みとなった時点から有効になります。 |
| `face_match_mouth_covered_action` | アクション | セルフィーで口の領域が覆われている場合の判定です。デフォルトが`NO_ACTION`である点とキャリブレーションに関する注意点は、`face_match_eyes_covered_action`と同じです。 |
| `face_match_face_covered_action` | アクション | セルフィーで顔全体が覆われている場合の判定です。デフォルトが`NO_ACTION`である点とキャリブレーションに関する注意点は、`face_match_eyes_covered_action`と同じです。 |
| `status_rules` | array | 任意のカスタムステータスルールです。 |

## 年齢推定

機能の値：`AGE_ESTIMATION`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `enable_id_verification_fallback` | boolean | 年齢推定の結果がボーダーライン範囲に入った場合に本人確認を実行します。 |
| `minimum_age_threshold` | integer | 許容する最低年齢。`1`から`100`です。 |
| `borderline_minimum_age_threshold` | integer | ボーダーライン範囲の下限。`1`から`100`です。 |
| `borderline_maximum_age_threshold` | integer | ボーダーライン範囲の上限。`1`から`100`です。 |
| `face_liveness_method` | string | `ACTIVE_3D`、`FLASHING`、`PASSIVE`のいずれかです。 |
| `face_liveness_flash_mode` | string | `ACTIVE_3D`および`FLASHING`方式のフラッシュモード。`"0"`（非厳格、デフォルト）は、画面に点滅表示した色がユーザーの顔に反射していることを検証します。`"1"`（厳格）は、さらに反射が点滅した色の順序と完全に一致することを求めます。 |
| `face_liveness_score_decline_threshold` | number | 年齢推定で使用するライブネスチェックの却下しきい値。 |
| `face_liveness_score_review_threshold` | number | 年齢推定で使用するライブネスチェックのレビューしきい値。 |
| `face_liveness_possible_duplicated_face_action` | action | 顔が重複している可能性がある場合のアクション。 |
| `face_liveness_multiple_faces_action` | action | 複数の顔が検出された場合のアクション。 |
| `face_liveness_video_anomaly_action` | action | 保存された録画に、繰り返される動きのシーケンスが含まれる場合のアクション。デフォルトは`NO_ACTION`です。`REVIEW`と`DECLINE`は、判定済みの認証を非同期でエスカレーションできます。まばらなフレームや繰り返される静止フレームだけではトリガーされません。 |
| `face_liveness_attack_face_match_action` | action | ライブネスの顔が、このアプリケーションの以前のセッションで高い信頼度でライブネス攻撃と判定された別のユーザーのキャプチャの顔と一致した場合のアクション（警告`FACE_MATCHES_LIVENESS_ATTACK`）。`NO_ACTION`または`REVIEW`を指定できます。`DECLINE`も受け付けますが、本物のユーザーが一度誤って拒否された後に通過することがあるため、`REVIEW`として適用されます。デフォルトは`NO_ACTION`です。 |
| `face_privacy_mode_enabled` | boolean | 顔アセットのプライバシーモードを有効にします。 |
| `face_quality_review_threshold` | integer | 顔品質のレビューしきい値。 |
| `face_quality_decline_threshold` | integer | 顔品質の却下しきい値。 |
| `face_luminance_min_threshold` | integer | 最小輝度しきい値。 |
| `face_luminance_min_action` | action | 輝度が低すぎる場合のアクション。 |
| `face_luminance_max_threshold` | integer | 最大輝度しきい値。 |
| `face_luminance_max_action` | action | 輝度が高すぎる場合のアクション。 |
| `face_liveness_max_attempts` | integer | セッション1件あたりのライブネス送信の合計回数。`1`から`3`です。デフォルトの`3`は、初回1回と再試行2回を意味します。`1`に設定しても、撮影品質による失敗の再試行は無効になりません。その試行のすべての警告が環境要因（`LOW_FACE_LUMINANCE`、`HIGH_FACE_LUMINANCE`、`LOW_FACE_QUALITY`、`HIGH_FACE_OCCLUSION`、`NO_FACE_DETECTED`）である場合、ユーザーには必ず具体的なフィードバックとともに2回目の試行が与えられます。 |
| `external_capture_device_action` | action | 外部キャプチャデバイスが検出された場合の判定。 |
| `face_audio_recording_enabled` | boolean | セルフィー撮影中にマイクの音声を録音し、レビュアーがセッションの音声を聞けるようにします。デフォルトはオフです。 |
| `face_search_enabled` | boolean | セルフィーに対して自動の[顔検索1:N](https://docs.didit.me/ja/core-technology/face-search/overview.md#自動顔検索をオフにする)を実行します。以前に認証されたユーザー、顔のブロックリストおよび許可リストと照合し、後の照合のために生体認証テンプレートを保存します。デフォルトはオンです。`false`にすると検索をスキップし、このステップの顔テンプレートを保持せず、重複顔に関するアクションは対象がなくなります。 |
| `face_liveness_uncertain_retry_enabled` | boolean | ネイティブSDKのアクティブライブネスのみが対象です。オンの場合、ライブネススコアが`face_liveness_score_decline_threshold`と`face_liveness_score_review_threshold`の間（両端を含まない）にあるキャプチャは、エンジンがどの判定を付けたかにかかわらず判定されません。本人には結果が不明確だったことが伝えられ、毎回再撮影を求められます。これは`face_liveness_max_attempts`の上限の対象外です（この上限は、エンジンがスコアを付けられなかったキャプチャには引き続き適用されます）。デフォルトはオフで、Webフローではこの設定は無視されます。 |
| `face_liveness_duplicated_face_name_mismatch_action` | action | 異なる名前で重複した顔が見つかった場合の判定。 |
| `face_liveness_duplicated_face_document_mismatch_action` | action | 重複した顔が見つかり、一致したユーザーの身分証明書に異なる生年月日が記載されている場合の判定。同一人物が別の書類や更新された書類を使用している場合はフラグ付けされません。デフォルトは`REVIEW`です。 |
| `frame_injection_action` | action | 注入された動画フレームが検出された場合の判定。 |
| `screen_capture_action` | action | セルフィーが画面を撮影した写真である場合の判定。 |
| `virtual_camera_action` | action | 仮想カメラの映像が検出された場合の判定。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

## 電話番号検証

機能の値: `PHONE_VERIFICATION`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `code_size` | integer | OTPの桁数。`4`から`8`まで。 |
| `phone_max_retries` | integer | 送信の最大再試行回数。`1`から`5`まで。 |
| `phone_max_check_attempts` | integer | OTP確認の最大試行回数。`1`から`5`まで。 |
| `phone_verification_countries` | object | ISO2国コードとチャネル設定の対応。例: `{ "US": { "sms": { "enabled": true } } }`。 |
| `disposable_number_action` | action | 使い捨て番号に対するアクション。 |
| `voip_number_action` | action | VoIP番号に対するアクション。 |
| `duplicated_phone_number_action` | action | 重複した電話番号に対するアクション。 |
| `high_risk_phone_action` | action | 配信プロバイダーがOTPの送信をブロックした場合のアクション。`DECLINE`または`REVIEW`のみ指定でき、デフォルトは`DECLINE`です。ステップ上のすべてのブロックが厳密に`["device_attribute"]`の`risk_factors`を持つ場合にのみ適用されます。それ以外のリスク要因がある場合、それを含む組み合わせの場合、またはリスク要因がまったくない場合は、この設定に関係なく却下されます。 |
| `phone_shared_device_mode` | boolean | 共有デバイスでの電話番号検証モードを許可します。 |
| `phone_enrichment_enabled` | boolean | 電話番号インテリジェンスによる情報付加(回線種別のリスク、信頼指数、通信事業者、番号ポータビリティ/SIMスワップの履歴、不正リスクスコア)を有効にします。電話番号検証の料金に加えて**認証1件あたり\$0.05が課金されます**。 |
| `phone_intelligence_score_action` | action | 電話番号の不正リスクスコアが`phone_intelligence_score_threshold`以上の場合のアクション。 |
| `phone_intelligence_score_threshold` | integer | `phone_intelligence_score_action`をトリガーする不正リスクスコア(`0`から`100`、高いほどリスクが高い)。デフォルトは`80`です。 |
| `phone_type_risk_action` | action | 番号が高リスクの電話番号種別としてフラグ付けされた場合のアクション。 |
| `recent_port_action` | action | 番号ポータビリティが最近行われた場合(SIMスワップ/番号ポータビリティのシグナル)のアクション。 |
| `low_phone_trust_action` | action | 電話番号の信頼指数が`phone_trust_index_threshold`以下の場合のアクション。 |
| `phone_trust_index_threshold` | integer | `low_phone_trust_action`が適用される信頼指数(`0`から`100`、低いほどリスクが高い)の上限値。この値以下で適用されます。デフォルトは`30`です。 |
| `phone_social_enabled` | boolean | ソーシャルフットプリントチェックを有効にします。検証済みの番号がどのメッセージング、ソーシャル、Eコマース、ビジネス向けプラットフォームに登録されているかを確認します。電話番号検証の料金に加えて**認証1件あたり\$0.05が課金されます**。`phone_enrichment_enabled`とは独立しています。 |
| `phone_no_social_presence_action` | action | ソーシャルフットプリントチェックで、対象とするどのプラットフォームにも番号が登録されていないことが判明した場合のアクション。これは合成IDによく見られるシグナルです。デフォルトは`NO_ACTION`です。 |
| `cross_org_fraud_phone_action` | action | この番号がネットワーク内の別の組織によって不正としてフラグ付けされている場合の判定。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

電話番号検証は、組織が初回のチャージを完了するまで無効です。

> [!NOTE]
>
> 電話番号インテリジェンスによる情報付加は任意のアドオンです。`phone_enrichment_enabled`が`true`の場合、完了した各電話番号検証に電話番号インテリジェンスの情報が付加され、標準の電話番号検証の費用に加えて**リクエスト1件あたり\$0.05が請求されます**。スコアに基づくアクションは、情報付加のスコアが取得できた時点で初めて有効になります。信頼指数、電話番号種別、番号ポータビリティに関するアクションは、情報付加が実行されるとすぐに適用されます。
>
> ソーシャルフットプリントチェックは、これとは別の2つ目のアドオンです。`phone_social_enabled`が`true`の場合、完了した各電話番号検証では、番号が登録されているオンラインプラットフォーム(メッセージング、ソーシャルメディア、Eコマース、ビジネス向けサービス)もレポートされ、**リクエスト1件あたり\$0.05が請求されます**。`phone_enrichment_enabled`の有無にかかわらず有効にでき、2つのアドオンの料金と請求はそれぞれ独立しています。対象とするどのプラットフォームにも番号が見つからなかった照会結果も有効で課金対象の回答であり、`phone_no_social_presence_action`をトリガーします。ワークフローのグラフで結果に応じて分岐するには、`phone.social_profiles_registered`(番号が登録されているプラットフォームの数)を使用してください。

## メールアドレス認証

機能の値：`EMAIL_VERIFICATION`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `email_code_size` | integer | OTPの桁数（`4`〜`8`）。 |
| `email_max_retries` | integer | 送信の最大再試行回数（`1`〜`5`）。 |
| `email_max_check_attempts` | integer | OTP確認の最大試行回数（`1`〜`5`）。 |
| `email_alphanumeric_code` | boolean | 英数字のメールコードを使用します。 |
| `breached_email_action` | action | 漏洩したメールアドレスに対するアクション。 |
| `disposable_email_action` | action | 使い捨てメールアドレスに対するアクション。 |
| `duplicated_email_action` | action | 重複したメールアドレスに対するアクション。 |
| `only_corporate_emails_allowed` | boolean | 企業ドメイン以外のメールアドレスを拒否します。 |
| `email_enrichment_enabled` | boolean | メールインテリジェンスによる情報付加（到達可能性、ドメインの評判、データ漏洩への露出、不正リスクスコア）を有効にします。メールアドレス認証の料金に加えて**認証1件あたり\$0.05が課金されます**。 |
| `email_intelligence_score_action` | action | メールの不正リスクスコアが`email_intelligence_score_threshold`以上の場合のアクション。 |
| `email_intelligence_score_threshold` | integer | `email_intelligence_score_action`をトリガーする不正リスクスコア（`0`〜`100`、値が高いほどリスクが高い）。デフォルトは`80`です。 |
| `recent_email_breach_action` | action | メールアドレスが最近の既知のデータ漏洩に含まれている場合のアクション。 |
| `frequent_email_breach_action` | action | メールアドレスが多数の既知のデータ漏洩に含まれている場合のアクション。 |
| `email_social_enabled` | boolean | ソーシャルフットプリントチェックを有効にします。検証済みのアドレスが、メールプロバイダー、ソーシャルメディア、プロフェッショナル、Eコマース、エンターテインメントのどのプラットフォームに登録されているかを確認します。メールアドレス認証の料金に加えて**認証1件あたり\$0.05が課金されます**。`email_enrichment_enabled`とは独立しています。 |
| `email_no_social_presence_action` | action | ソーシャルフットプリントチェックで、対象とするどのプラットフォームにもアドレスが登録されていないことが判明した場合のアクション。これは合成IDによく見られるシグナルです。デフォルトは`NO_ACTION`です。 |
| `cross_org_fraud_email_action` | action | このアドレスがネットワーク内の別の組織によって不正としてフラグ付けされていた場合の判定。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

> [!NOTE]
>
> メールインテリジェンスによる情報付加は任意のアドオンです。`email_enrichment_enabled`が`true`の場合、完了した各メールアドレス認証にメールインテリジェンスの情報が付加され、通常のメールアドレス認証の費用に加えて**リクエスト1件あたり\$0.05が請求されます**。スコアに基づくアクションは情報付加のスコアが取得できた時点で有効になり、漏洩に関するアクションは情報付加が実行された時点で適用されます。
>
> ソーシャルフットプリントチェックは、これとは別の2つ目のアドオンです。`email_social_enabled`が`true`の場合、完了した各メールアドレス認証では、アドレスが登録されているオンラインプラットフォーム（メールプロバイダー、ソーシャルメディア、プロフェッショナル、Eコマース、エンターテインメントの各サービス）もレポートされ、**リクエスト1件あたり\$0.05が請求されます**。このアドオンは`email_enrichment_enabled`の有無にかかわらず有効にでき、2つのアドオンの料金と請求はそれぞれ独立しています。対象とするどのプラットフォームにもアドレスが見つからなかった照会も有効な課金対象の結果であり、`email_no_social_presence_action`をトリガーします。ワークフローのグラフで結果に応じて分岐するには、`email.social_profiles_registered`（アドレスが登録されているプラットフォームの数）を使用します。

## データベース検証

機能の値: `DATABASE_VALIDATION`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `database_validation_countries` | object | ISO3国コードから`{ "services": ["service_id"] }`へのマッピング。データベース検証カタログのサービスIDを使用します。 |
| `database_validation_partial_match_action` | action | データベース検証が部分一致を返した場合のアクション。 |
| `database_validation_no_match_action` | action | データベース検証が一致なしを返した場合のアクション。 |
| `database_validation_not_applicable_action` | action | 設定されたサービスが必要とする識別子が書類に含まれていないため(例: 国民ID番号のないパスポート)、データベース検証を実行できない場合のアクション。デフォルトは`NO_ACTION`です。 |
| `database_validation_field_sources` | object | グラフ内のそれ以前のどのステップでも入力できないデータベース入力の読み取り元。`source`は提供元を、`key`はその中の値を指定します。`document_ai`の場合はDocument AIのフィールドキー、`questionnaire`の場合はアンケートのノードID、`expected_data`の場合は`expected_details.<field>`または`metadata.<key>`です。上流ステップとキーが完全一致する場合は自動的に解決され、意図的に保存されません。そのため、Document AIのフィールド名を変更しても、古いマッピングが設定に固定されることはありません。不正な形式のエントリーは、その入力フィールドを示す`400`で拒否されます。形式: `{"<db_validation_input_field>": {"source": "document_ai"\|"questionnaire"\|"expected_data", "key": "<docai field key>\|<questionnaire node id>\|expected_details.<field>\|metadata.<key>"}}`。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

例:

```json theme={null}
{
  "feature": "DATABASE_VALIDATION",
  "config": {
    "database_validation_countries": {
      "BRA": {
        "services": ["SERVICE_ID_FROM_CATALOG"]
      }
    },
    "database_validation_field_sources": {
      "tax_id": {
        "source": "expected_data",
        "key": "expected_details.document_number"
      }
    },
    "database_validation_no_match_action": "REVIEW",
    "database_validation_partial_match_action": "REVIEW"
  }
}
```

> [!WARNING]
>
> `database_validation_countries`がなければ、このステップは何も行いません。これを指定せずに保存された`DATABASE_VALIDATION`
> 機能は受け付けられますが、その後は一切チェックを実行しません。そのため、必ず1つ以上のサービスIDを持つ国を
> 1つ以上送信してください。

ステップが実行できないサービスIDは、そのIDと理由を示す`400`で拒否され、何も保存されません。
これには、カタログにないID、別の国に属するID、まだ利用できないサービス、スタンドアロンの[`POST /v3/database-validation/`](https://docs.didit.me/ja/core-technology/database-validation/overview)でのみ提供されるサービスが該当します。
それより前のどのステップからも入力が提供されないサービスも同様に拒否され、不足している入力が一覧で示されます。
保存済みのワークフローにすでに含まれているものの、実行できなくなったサービスは、ワークフローを再度保存した際に削除されます。

例えば、次のアルゼンチンのワークフローは、本人確認からDNI番号と性別を読み取り、セルフィーなしでRENAPERと照合します:

```json theme={null}
{
  "workflow_label": "Argentina DNI check",
  "features": [
    {"feature": "OCR"},
    {
      "feature": "DATABASE_VALIDATION",
      "config": {"database_validation_countries": {"ARG": {"services": ["arg_renaper_data"]}}}
    }
  ]
}
```

セルフィーをRENAPERが保有する写真とも照合するには、代わりに`LIVENESS`ステップの後で`arg_renaper`を使用します。
顔照合の一致スコアとしきい値については、[RENAPER](https://docs.didit.me/ja/api-reference/database-validation/argentina/renaper.md)を参照してください。

## 銀行口座認証

機能値: `BANK_VERIFICATION`。

> [!WARNING]
>
> 銀行口座認証は、本番環境ではまだ有効になっていません。
> 有効になるまでは、このノードを含む本番環境のワークフローを保存しようとしても拒否されます。

ユーザーが銀行口座を認証し、銀行が報告する口座名義人を、ワークフローの前のステップで確立された本人情報と照合します。ユーザーは2つの方法のいずれかで認証します。銀行でサインインする銀行サインイン（`open_banking`）か、口座情報を入力して銀行が口座の名義を確認する口座照会（`account_lookup`）です。`bank_method_order`と各国の`methods`で、国ごとにどの方法を提示し、どれを先にするかを選びます。[銀行口座認証の方法](https://docs.didit.me/ja/core-technology/bank-verification/verification-methods.md)を参照してください。このステップは証拠（名義人スコア、そのスコアを算出した照合、理由コード）を生成し、`bank_*_action`キーがその証拠をステータスに変換します。

ノードがそもそも何かを行うかどうかは、2つの点で決まります。`bank_countries`は許可リストのため、空のマップでは銀行は提示されず、チェックも実行されません。また、名義人には照合する対象が必要です。その前に`OCR`、`DATABASE_VALIDATION`、`QUESTIONNAIRE`のいずれかのステップを置くか、セッション作成時に`expected_details`を送信するか、`bank_field_sources`で自分でフィールドをマッピングしてください。いずれもない場合、所有権は`unknown`にしかならず、その扱いは`bank_reference_identity_missing_action`で決まります。

> [!NOTE]
>
> 銀行口座認証はまだ段階的に提供中のため、`BANK_VERIFICATION`ノードは、この機能が有効化されたアカウントでのみ受け付けられます。それ以外のアカウントでは保存が拒否され、その旨が表示されます。どのルートでこのステップを実行するかも、ここでは設定しません。それはコンソールの[Marketplace](https://docs.didit.me/ja/console/marketplace.md)が自動で設定する`provider_key`と`fallback_to_native`の組み合わせです。

### 口座の接続

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `bank_countries` | object | ユーザーが銀行を接続できる国。許可リストのため、空のマップではノードは何も提示せず、何も実行しません。`institutions`は選択画面を特定の金融機関IDに絞り込み、`"all"`はその国で本人情報を取得できるすべての銀行を提示します。ノードのどのルートも対応していない国も保持されます。その国ではフォールバックと「Continue without your bank」のみが提示されます。[本人が銀行を認証できない場合](https://docs.didit.me/ja/core-technology/bank-verification/fallbacks.md)を参照してください。どの国も指さないコードは保存時に拒否されます。`methods`は、銀行サインイン（`open_banking`）と口座照会（`account_lookup`）のうちどれをその国で提示するかを順序付きで設定し、`bank_method_order`より優先されます。ユーザーは1つ目の方法から開始し、2つ目の方法がそのバックアップとして提示されます。有効な国で、その国でノードのどのルートも対応していない方法を`methods`が指定している場合は保存時に拒否されます。ルートが対応している国で、`methods`によって方法が1つも残らない場合も同様に拒否されます。形式: `{"<ISO3>": {"enabled": true\|false, "institutions": ["<institution_id>", ...]\|"all", "methods"?: ["open_banking"\|"account_lookup", ...]}}`。 |
| `bank_method_order` | string\[] | 独自の`methods`を設定していないすべての国で、ステップが2つの方法のうちどれを、どの順序で提示するか。`open_banking`（銀行サインイン: ユーザーが銀行でサインインする方法で、残高、取引、収入を読み取れるのはこの方法だけです）と`account_lookup`（口座照会: サインイン不要で、所有権の確認のみ）があります。各国で、ユーザーはその国でルートが対応している最初の方法から開始し、もう一方の方法がバックアップとして提示されます。その国でどのルートも対応していない方法は、その国では除外されます。少なくとも1つの方法が必要です。何も送信しない保存では`["open_banking", "account_lookup"]`が設定されます。ただし、`bank_open_banking_enabled`または`bank_account_lookup_enabled`を送信した場合は、それらによって設定されます。 |
| `bank_scopes` | object | ユーザーに共有への同意を求める内容。`ownership`は本製品が検証する対象で、無効にできません。`identifiers`はIBANまたは口座番号のマスクを解除します。`balances`、`transactions`、`income`は実際の金融データを読み取り、それぞれ個別に請求されます。また、アプリケーションに金融データの利用権限がない限り、保存時に拒否されます。データを読み取るのは銀行サインインだけです。口座照会を提示する国は拒否されず、口座照会で認証したユーザーはデータなしで合格となり、そのことが結果の`financial_data.not_collected`に記載されます。オフのスコープは一切リクエストされないため、銀行の同意画面に表示されることもありません。デフォルトは`ownership`のみです。形式: `{"ownership": true, "identifiers": true\|false, "balances": true\|false, "transactions": true\|false, "income": true\|false}`。 |
| `bank_eligible_account_types` | string\[] | ユーザーが選択できる口座の種類: `checking`、`current`、`savings`、`business`、`other`。クレジットカード、ローン、投資口座は決して対象になりません。これらは決済口座の所有権を証明するものではないためです。デフォルトはcurrentとcheckingです。 |
| `bank_account_selection` | string | `user`では、接続された口座のうちどれを認証するかをユーザーが選択できます。`auto`では最初の対象口座が使われます。 |
| `bank_require_oauth_only` | boolean | OAuthまたはアプリ間連携で接続できる金融機関のみを提示し、従来の認証情報入力画面は決して提示しません。オープンバンキングによってすでにOAuthが唯一のルートになっている市場では、何も変わりません。 |
| `bank_max_attempts` | integer | ユーザーに与えられる銀行サインインの試行回数（`1`〜`5`）。マイクロデポジットや明細書のアップロードも1回分を消費します。口座照会には専用の`bank_account_check_max_attempts`があります。まだ提示されているユーザーの認証方法（明細書のアップロードを含む）がすべて、接続に成功しないまま試行回数を使い切ると、`bank_attempts_exhausted_action`で処理が決まります。 |
| `bank_connection_timeout_minutes` | integer | 開始された接続が、試行が放棄されるまで開いたままになる時間（`5`〜`60`分）。 |
| `bank_allow_skip` | boolean | `bank_continue_without_bank`により廃止されました。現在、ユーザーは常に銀行なしで続行できます。`bank_continue_without_bank`を送信しない保存からは、1リリースの間だけ読み取られます。`true`の場合は`from_start`、それ以外の場合は`when_needed`が設定されます。すべての保存でこの値が書き戻されます。`from_start`では`true`、`when_needed`では`false`です。 |

### ユーザーが認証できない場合

ユーザーは常に銀行なしで続行でき、このステップで行き詰まることはありません。[本人が銀行を認証できない場合](https://docs.didit.me/ja/core-technology/bank-verification/fallbacks.md)を参照してください。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `bank_continue_without_bank` | string | ステップで**Continue without your bank**を表示するタイミングです。デフォルトの`when_needed`では、ユーザーの国や銀行で使える方法がない場合、ユーザーの銀行に接続できず、ほかの方法でも検証できなかった場合（たとえば口座チェックでも銀行に接続できなかった場合）、またはユーザーがオンラインバンキングを利用していないと回答した場合に表示されます。`from_start`では最初の画面にも表示されます。この表示は無効にできません。このキーも`bank_allow_skip`も送信しない保存には`when_needed`が適用されます。 |
| `bank_statement_standalone_enabled` | boolean | `bank_statement_enabled`と併用すると、銀行での試行が行われなかった場合にも明細書のアップロードを提供します。対象は銀行サインインや口座チェックのルートが対応していない国を含むすべての国です。この場合は`bank_statement_upload`として単独で課金され、契約料金や特別料金を適用する前の料金は、評価された明細書1件あたりUSD 0.20です。[料金](https://docs.didit.me/ja/core-technology/bank-verification/fallbacks.md#料金)を参照してください。サンドボックスのセッションでは課金なしでテストできます。デフォルトで有効です。 |

続行がセッションにとって何を意味するかは、ユーザーが続行した理由に応じて`bank_unsupported_action`、`bank_attempts_exhausted_action`、`bank_skipped_action`のいずれかで決まります。ただし、それより前に評価された試行ですでにステップの判定が決まっている場合は除きます。[判定アクション](#判定アクション)を参照してください。

### 名義人の照合

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `bank_reference_identity` | string | 名義人の照合対象となる本人情報を、どの前段のステップから取得するかを指定します。指定できるのは`kyc`（本人確認）、`database_validation`、`expected_details`（セッション作成時に送信した内容）、`questionnaire`、またはワークフローが生成したいずれかを使う`auto`です。実際に情報を提供したステップは、結果の`reference_identity_source`として返されます。 |
| `bank_field_sources` | object | グラフ内の前段のステップで埋められない場合に、参照用本人情報のフィールドをどこから読み取るかを指定します。マップのKEYは`full_name`、`first_name`、`last_name`、`address`のいずれかです。`source`は提供元を、`key`はその中の値を指定します。値は、`document_ai`ではDocument AIのフィールドキー、`questionnaire`ではアンケートのノードID、`expected_data`では`expected_details.<field>`または`metadata.<key>`です。`expected_details.`配下の値には、セッション作成のペイロードに実際に含まれるフィールドのみを指定できます。対象は`address`、`country`、`date_of_birth`、`first_name`、`gender`、`id_country`、`identification_number`、`ip_address`、`last_name`、`nationality`、`poa_country`です。形式が不正なエントリは、破棄されるのではなく保存時に拒否されます。形式: `{"full_name"\|"first_name"\|"last_name"\|"address": {"source": "document_ai"\|"questionnaire"\|"expected_data", "key": "<docai field key>\|<questionnaire node id>\|expected_details.<field>\|metadata.<key>"}}`。 |
| `bank_name_match_threshold` | integer | このスコア以上の場合、名義人の氏名は一致とみなされます。範囲は`50`から`100`で、デフォルトは`85`です。 |
| `bank_partial_match_floor` | integer | このスコア未満の場合、名義人の氏名は不一致とみなされます。範囲は`0`から`99`で、デフォルトは`70`です。下限としきい値の間の範囲が部分一致になるため、下限はしきい値より厳密に小さくする必要があり、そうでない場合は保存が拒否されます。ここでは明示的な`null`は「デフォルトを使用する」を意味します。そのため、下限を指定せずにしきい値を`50`にすると拒否されます。`50`がデフォルトの下限である`70`と比較されるためです。 |
| `bank_require_address_match` | boolean | 名義人の住所の一致も必須にします。氏名がしきい値に達していても、住所のスコアがしきい値を下回る場合は部分一致に下がります。住所を返さない金融機関の場合、この要件は免除されます。一方、比較対象となる住所をセッション自体が持たない場合は免除されず、部分一致になります。デフォルトで無効です。 |
| `bank_use_provider_score` | boolean | 金融機関自身の名義人氏名スコアも読み取り、それがDiditのスコアより高い場合、またはDiditがスコアリングできる名義人氏名がまったくなかった場合に、そのスコアで判定します。このように判定された結果は一致方法として`provider_only`を報告します。そのようなスコアを返さなかった接続では`provider_score_unavailable`警告が記録されます。デフォルトで有効です。 |
| `bank_show_match_result_to_user` | boolean | 認証フロー内で、所有構造の照合結果をユーザーに表示します。無効の場合、結果はセッションに記録されますが、ユーザーには一切表示されません。 |

### 口座チェック

これらのキーは口座チェックにのみ適用されます。銀行サインインでは、独自の近似一致と独自の`bank_max_attempts`がそのまま使われます。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `bank_account_check_accept_close_match` | boolean | 有効（デフォルト）の場合、銀行が`bank_partial_match_floor`から`bank_name_match_threshold`の間のスコアを付けた氏名は近似一致になります。`bank_suggest_holder_name`が有効な場合はユーザーが銀行の保有する氏名を確認し、`bank_partial_match_action`が判定を決めます。無効の場合、その近似一致は不一致（`OWNER_NAME_MISMATCH`、判定は`bank_no_match_action`）となり、試行回数を消費します。 |
| `bank_account_check_max_attempts` | integer | ユーザーが実行できる口座チェックの回数です。範囲は`1`から`5`で、未設定時は`3`です。銀行が応答するチェックのために口座情報を入力できる回数を表します。`bank_max_attempts`とは別にカウントされます。入力内容の時点で拒否されたチェック（無効なIBAN）や、銀行が応答できなかったチェックは回数を消費しません。 |

### 財務データ

`bank_expected_currencies`は、デフォルトの`ownership`同意だけで動作します。ほかの3つのキーは実際の財務データを読み取るため、それぞれ`bank_scopes`に対応する同意スコープが必要で、ない場合は保存が拒否されます。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `bank_expected_currencies` | string\[] | 口座の通貨として想定されるISO 4217通貨です。空の場合はすべての通貨を許可します。不一致は`bank_currency_mismatch_action`で報告されます。 |
| `bank_min_balance` | number | 口座自体の通貨での最低利用可能残高です。これを下回ると`bank_low_balance_action`が発動します。`balances`スコープが必要です。`0`は実際の下限値であり、キーを省略した場合とは異なります。当座貸越状態の口座はアクションのトリガーになります。このアクションのデフォルトは`NO_ACTION`で、判定は変更されません。そのため、当座貸越状態の口座を却下するには`bank_low_balance_action: "DECLINE"`も必要です。 |
| `bank_transactions_history_days` | integer | 取引履歴をさかのぼって読み取る期間で、`30`〜`365`日です。デフォルトは`90`です。`transactions`スコープが必要です。 |
| `bank_refresh_enabled` | boolean | ステップの判定後も、銀行の同意が有効な間は口座の財務データを再取得します。`balances`、`transactions`、`income`のいずれか1つ以上のスコープが必要です。その後に同意が失効した場合は`bank_consent_expired_action`で扱われます。 |

### 保存される内容

| Config field | Type | Description |
| - | - | - |
| `bank_store_full_identifiers` | boolean | 口座識別子をマスクせずに保存します。`identifiers`スコープが必要です。その場合でも、マスクされていない形式が返されるのは、銀行認証の読み取り権限を持つ呼び出し元に対してのみです。 |
| `bank_store_raw_owner_data` | boolean | 金融機関が返した名義人の詳細情報を、所有の証拠と一緒に保持します。オフの場合は照合結果そのもの、つまりスコア、照合方法、理由コードのみが保持されます。 |

### 判定アクション

ここにあるすべてのキーは、制限付きと記載されていない限り`DECLINE`、`REVIEW`、`NO_ACTION`のいずれかを受け付け、省略した場合や`null`を送信した場合は以下のデフォルトが適用されます。明確な所有の証拠以外がデフォルトで承認されることはなく、ユーザーに不利な実証可能な証拠がある場合にのみ却下されます。

| Config field | Type | Description |
| - | - | - |
| `bank_no_match_action` | 制限付きアクション | 口座名義人が本人確認済みの人物でないことが実証できる場合、つまり名前の最高スコアが`bank_partial_match_floor`を下回る場合の判定です。`DECLINE`または`REVIEW`を使用します。デフォルトは`DECLINE`です。 |
| `bank_partial_match_action` | アクション | 名義人の名前のスコアが`bank_partial_match_floor`と`bank_name_match_threshold`の間に入る場合の判定です。デフォルトは`REVIEW`で、デフォルトで承認されることはありません。 |
| `bank_not_verifiable_action` | アクション | 金融機関には接続できたものの、照合する名義人の身元情報が返されなかった場合の判定です。デフォルトは`REVIEW`です。 |
| `bank_unknown_action` | アクション | 再試行しても証拠を取得できなかった場合、つまり一時的な障害が発生した場合の判定です。デフォルトは`REVIEW`です。 |
| `bank_reference_identity_missing_action` | アクション | 名義人と照合する身元情報を前のステップが生成しておらず、所有を`unknown`としか判断できない場合の判定です。デフォルトは`REVIEW`です。 |
| `bank_joint_account_action` | アクション | 口座の名義人が複数いる場合の判定です。デフォルトは`NO_ACTION`です。 |
| `bank_business_account_action` | アクション | 金融機関が名義人を個人ではなく企業として分類している場合の判定です。個人向けワークフローではデフォルトは`REVIEW`、企業(KYB)ワークフローでは企業の名義人こそセッションが想定するものであるため、デフォルトは`NO_ACTION`です。 |
| `bank_unsupported_action` | アクション | ユーザーの国または銀行を認証できる方法がないために、ユーザーが銀行なしで続行した場合の判定です。該当する国に対応する銀行サインインや口座確認のルートがない場合、またはユーザーが選んだ銀行をこのステップで使用できない場合がこれにあたります。この場合、結果の`continued_without_bank`はtrueとなり、理由コードに`NOT_COVERED`が含まれます。デフォルトは`REVIEW`です。 |
| `bank_skipped_action` | 制限付きアクション | 認証する手段があるにもかかわらず、ユーザーが「Continue without your bank」を選択した場合の判定です。この場合、結果の`continued_without_bank`はtrueとなり、理由コードに`SKIPPED`が含まれます。`DECLINE`または`REVIEW`を使用します。デフォルトは`REVIEW`です。 |
| `bank_attempts_exhausted_action` | 制限付きアクション | ユーザーが、明細書のアップロードを含め、引き続き提示されているすべての認証手段の試行回数(`bank_max_attempts`、および国が口座確認を提供している場合は`bank_account_check_max_attempts`)を接続に成功しないまま使い切った場合の判定です。その後にユーザーが銀行なしで続行した場合も含みます。`DECLINE`または`REVIEW`を使用します。デフォルトは`DECLINE`です。 |
| `bank_consent_expired_action` | アクション | ステップの判定後に銀行の同意が失効した場合の判定です。`bank_refresh_enabled`と併用した場合にのみ意味を持ちます。デフォルトは`NO_ACTION`です。 |
| `bank_currency_mismatch_action` | アクション | 口座の通貨が`bank_expected_currencies`に含まれない場合の判定です。デフォルトは`NO_ACTION`です。 |
| `bank_country_mismatch_action` | アクション | 金融機関の国が、想定される国または書類の国と異なる場合の判定です。デフォルトは`NO_ACTION`です。 |
| `bank_low_balance_action` | アクション | 利用可能残高が`bank_min_balance`を下回る場合の判定です。`balances`スコープが必要です。デフォルトは`NO_ACTION`です。 |
| `status_rules` | array | 任意のカスタムステータスルールです。 |

### その他の制御

これらのキーは任意です。各アクションキーは`DECLINE`、`REVIEW`、`NO_ACTION`のいずれかを受け付けます。

| Config field | Type | Description |
| - | - | - |
| `bank_abandoned_action` | アクション | ユーザーが銀行側で離脱したまま戻らず(試行がタイムアウト)、一致なしでステップが終了した場合の判定です。 |
| `bank_account_age_action` | アクション | 口座が`bank_account_age_days`より新しい場合の判定です。これはミュール口座によく見られるパターンです。 |
| `bank_account_age_days` | integer | 履歴の開始がこの日数より最近である口座を新規口座とみなします。1〜365で、デフォルトは30です。取引履歴から読み取るため、`transactions`スコープがある場合のみ有効です。 |
| `bank_account_lookup_enabled` | boolean | 廃止済みです。`bank_method_order`と`bank_countries.<ISO3>.methods`を使用してください。`bank_method_order`を送信しない保存では、1リリースの間のみ読み取られます。`bank_open_banking_enabled`と組み合わせて順序を設定し、オンの場合は銀行サインインの後に口座確認を配置し、オフまたは未設定の場合は口座確認を除外します。保存のたびに、いずれかの国が口座確認を提供しているかどうかが書き戻されます。 |
| `bank_account_type_action` | アクション | 認証された口座が貯蓄口座である場合の判定です。 |
| `bank_address_match_threshold` | integer | このスコア以上で名義人の住所が一致とみなされます。50〜100で、デフォルトは70です。`bank_require_address_match`がある場合のみ読み取られます。 |
| `bank_address_mismatch_action` | アクション | 名義人の住所が異なる場合の判定で、一致は近似一致になります。`bank_require_address_match`がある場合のみ有効です。 |
| `bank_auto_add_countries` | boolean | このノードのルートが対応できるすべての国を提示します。ノードの保存後に追加された国も含みますが、`bank_countries`でオフにした国は除きます。キーがない場合はオフになるため、既存のノードの対象国が自動的に広がることはありません。 |
| `bank_cash_flow_action` | action | 入金された資金がすぐに出金される場合、または少額の送金が多数入金される場合（パススルー型の資金フロー）の判定。`transactions`スコープが必要です。 |
| `bank_dob_match_enabled` | boolean | 銀行が生年月日を共有している場合に、口座名義人の生年月日を検証済みの生年月日と比較します。不一致によって口座所有の確認結果が変わることはなく、`bank_dob_mismatch_action`が発動します。デフォルトでオンです。 |
| `bank_dob_match_threshold` | integer | このスコア以上で生年月日が一致とみなされます。範囲は50〜100で、デフォルトは70です。日付は同じ日かどうかのいずれかなので、スコアは100か0になります。 |
| `bank_dob_mismatch_action` | action | 口座名義人の生年月日が異なる場合の判定。`bank_dob_match_enabled`が有効な場合のみ適用されます。 |
| `bank_email_match_enabled` | boolean | 銀行に登録されているメールアドレスを、セッションで検証済みのメールアドレスと比較します。不一致の場合は`bank_email_mismatch_action`が発動します。デフォルトでオフです。 |
| `bank_email_match_threshold` | integer | このスコア以上でメールアドレスが一致とみなされます。範囲は50〜100で、デフォルトは70です。 |
| `bank_email_mismatch_action` | action | 口座名義人のメールアドレスが異なる場合の判定。`bank_email_match_enabled`が有効な場合のみ適用されます。 |
| `bank_evidence_retention_days` | integer | 判定からこの日数が経過した後に銀行の証跡を削除します。30、90、365、1825のいずれかを指定します。nullの場合はセッションとともに保持されます。削除されるのは、口座名義人の詳細、比較対象となった本人情報、口座識別子、財務データ、アップロードされた取引明細書です。まだ有効な接続は取り消されます。判定、スコア、理由コードは残ります。セッションを削除するとすべてが削除され、どちらか早い方が適用されます。 |
| `bank_fallback_used_action` | action | マイクロデポジットまたは取引明細書のアップロードで口座が認証された場合の判定。 |
| `bank_match_any_holder` | boolean | 共同名義または共有名義の口座は、記載された名義人のいずれか（ANY）がその人物と一致すれば一致とみなされます。オフの場合、一致とみなされるのは銀行が最初に記載している名義人のみです。デフォルトでオンです。 |
| `bank_microdeposits_enabled` | boolean | フォールバックとしてマイクロデポジットを提供します。口座に少額の入金が2件届き、本人がその金額を入力します。マイクロデポジットを送金できるルートがある国でのみ、同じセッション内で課金対象の銀行認証が試行された後に提供されます。追加料金なしで含まれており、顧客はルートの料金を1回だけ支払います。サンドボックスのセッションでは課金なしでテストできます。名義人はセッションで検証された氏名であり、本人はその名義の口座であると申告します。そのため、認証された口座には`holder_declared`警告が記録されます。デフォルトでオンです。 |
| `bank_mule_score_action` | action | ミュールスコアが`bank_mule_score_threshold`以上の場合の判定。 |
| `bank_mule_score_threshold` | integer | ミュールスコア（0〜100）がこの値以上になると`bank_mule_score_action`が発動します。デフォルトは70です。スコアは、新規口座、パススルー型の資金フロー、残高の引き出し尽くし、多数の少額入金を組み合わせたもので、取引履歴（`transactions`スコープ）から読み取られます。 |
| `bank_open_banking_enabled` | boolean | 廃止済みです。`bank_method_order`と`bank_countries.<ISO3>.methods`を使用してください。`bank_method_order`を送信しない保存では、1リリースの間のみ読み取られます。`bank_account_lookup_enabled`と組み合わせて順序を決定し、オンまたは未設定の場合は銀行サインインが先になります。保存のたびに、いずれかの国が銀行サインインを提供しているかどうかが書き戻されます。 |
| `bank_phone_match_enabled` | boolean | 銀行に登録されている電話番号を、セッションで検証済みの電話番号と比較します。不一致の場合は`bank_phone_mismatch_action`が発動します。デフォルトでオフです。 |
| `bank_phone_match_threshold` | integer | このスコア以上で電話番号が一致とみなされます。範囲は50〜100で、デフォルトは70です。 |
| `bank_phone_mismatch_action` | action | 口座名義人の電話番号が異なる場合の判定。`bank_phone_match_enabled`が有効な場合のみ適用されます。 |
| `bank_popular_mode` | string | `auto`（デフォルト）は、その国の人々が最も多く接続している順に人気の銀行を並べます。`manual`は代わりに、`bank_countries`にある各国の`popular_institutions`をその順序で表示します。 |
| `bank_statement_document_checks_action` | action | アップロードされた取引明細書に編集や改ざんの痕跡がある場合の判定。デフォルトは`REVIEW`です。 |
| `bank_statement_enabled` | boolean | フォールバックとして銀行取引明細書のアップロードを提供します。過去3か月以内の明細書が対象で、改ざんがチェックされ、名義人の氏名は銀行の場合と同様に照合されます。同じセッション内で課金対象の銀行認証が試行された後は、追加料金なしで含まれます。`bank_statement_standalone_enabled`を有効にすると、事前の銀行認証の試行がなくてもどの国でも提供され、その場合は単独で課金されます。サンドボックスのセッションでは課金なしでテストできます。デフォルトでオフです。 |
| `bank_suggest_holder_name` | boolean | 近い一致の場合に、銀行が口座を保有している名義を本人に表示し、それが本人のものであることを確認するか、別の口座を接続するよう求めます。回答は`holder_confirmation`として記録され、確認するとステップは`bank_partial_match_action`で終了します。デフォルトでオンです。 |
| `fallback_to_native` | boolean | 確立できなかったマーケットプレイス接続を、Diditのネイティブルートにフォールバックさせるかどうか。デフォルトでオフです。サイレントにフォールバックすると、自社のプロバイダー契約で実行されると想定していたセッションにDiditの残高が消費されてしまうためです。フォールバックした接続は`credential_source = native`として記録され、ネイティブの料金で課金されます。 |
| `provider_key` | string | ステップを実行するルート。空（デフォルト）の場合はDiditのネイティブの銀行口座認証です。これはプロバイダーに依存しないプロダクトで、Diditがユーザーの国と金融機関に対応する地域のオープンバンキングベンダーに、Diditの契約と請求のもとでルーティングします。値を指定すると、このアプリケーションが独自の認証情報を接続済みのマーケットプレイス（MARKETPLACE）プロバイダーを指定します。この場合、セッションはお客様のプロバイダーアカウント上で実行、課金、取り消しされ、Diditはマーケットプレイスのプラットフォーム手数料のみを請求します。接続されていないプロバイダーは保存時に拒否されます。 |

銀行口座認証が有効で、選択したルートが指定した国をカバーしているアカウント向けの`config`オブジェクトの例:

```json theme={null}
{
  "bank_method_order": ["open_banking", "account_lookup"],
  "bank_countries": {
    "ESP": { "enabled": true, "institutions": "all" }
  },
  "bank_scopes": { "ownership": true },
  "bank_eligible_account_types": ["checking", "current"],
  "bank_name_match_threshold": 85,
  "bank_partial_match_floor": 70,
  "bank_partial_match_action": "REVIEW",
  "bank_no_match_action": "DECLINE"
}
```

> [!WARNING]
>
> このステップを機能させるのは`bank_countries`であり、グローバルなリストではなく、
> ノードが実行されるルートに照らしてチェックされます。そのルートで口座所有を確認できない国は
> 保存時に拒否され、エラーにその国名が示されます。国が受け入れられて実行時にスキップされると
> 思い込まず、エラーを確認してください。

## AML

機能の値: `AML`。

KYCの個人スクリーニングには、次のフィールドを使用します。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `is_aml_ongoing_monitoring_enabled` | boolean | 継続的なAMLモニタリングを有効にします。 |
| `aml_score_approve_threshold` | integer | 承認のしきい値。 |
| `aml_score_review_threshold` | integer | レビューのしきい値。 |
| `aml_match_score_threshold` | integer | 一致の可能性がある候補に対する一致スコアのしきい値。 |
| `aml_name_weight` | integer | 氏名の重み。AMLの重みをいずれか指定する場合、氏名、生年月日、国の重みの合計は`100`である必要があります。 |
| `aml_dob_weight` | integer | 生年月日の重み。 |
| `aml_country_weight` | integer | 国の重み。 |
| `create_cases_on_hit` | boolean | スクリーニングでヒットが返されたとき、セッションからヒットをトリアージするのではなく、ケースを自動的に作成します。デフォルトはオフです。 |
| `case_blueprint` | uuid | 自動作成されるケースのもとになるケースブループリント。`create_cases_on_hit`と併用する場合にのみ意味を持ちます。未設定の場合はアカウントのデフォルトが使用されます。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

KYBの企業スクリーニングには、次のフィールドを使用します。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `kyb_score_approve_threshold` | integer | 企業AMLの承認しきい値。 |
| `kyb_score_review_threshold` | integer | 企業AMLのレビューしきい値。 |
| `kyb_enable_ongoing_monitoring` | boolean | KYBの継続的なAMLモニタリングを有効にします。 |
| `kyb_company_aml_match_score_threshold` | integer | 企業AMLの一致スコアのしきい値。 |
| `kyb_company_aml_name_weight` | integer | 企業名の重み。企業AMLの重みを指定する場合、その合計は`100`である必要があります。 |
| `kyb_company_aml_dob_weight` | integer | 設立日または生年月日の重み。 |
| `kyb_company_aml_country_weight` | integer | 国の重み。 |

### Document AIステップが抽出したエンティティのスクリーニング

AMLステップは通常、スクリーニング対象を`OCR`ステップ(個人)または`KYB_REGISTRY`ステップ(企業)から読み取ります。抽出ステップが`DOCUMENT_AI`のみのワークフロー(納税証明書や設立証書などの非定型書類)にはそのどちらもないため、各スクリーニング入力をどこから取得するかを指定する必要があります。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `aml_field_sources` | object | このステップがスクリーニングするエンティティの読み取り元。`source`は生成元を、`key`はその中の値を指定します。`document_ai`ではDocument AIのフィールドキー、`questionnaire`ではアンケートのノードID、`expected_data`では`expected_details.<field>`または`metadata.<key>`を指定します。マップのキーは、`full_name`、`date_of_birth`、`nationality`、`document_number`の4つのスクリーニング入力のいずれかで、企業の場合はそれぞれ法人名、設立日、国、登記番号として読み取られます。これら4つのいずれかを既にキーとして持つDocument AIフィールドは自動的にマッピングされ、意図的に保存されません。そのため、フィールド名を変更しても古いマッピングが固定されることはありません。明示的なマッピングは自動マッピングと本人確認書類の両方より優先されます。実行時に値を取得できない明示的なマッピングは、フォールバックせずにその入力を空のままにします。企業(KYB)ワークフローでは、`KYB_REGISTRY`ステップが返した企業が優先されます。その入力を上書きできるのは明示的なマッピングのみで、登記レコードの上に自動マッピングは適用されません。登記ステップがない場合は、マッピングがアイデンティティのすべてとなります。形式: `{"full_name"\|"date_of_birth"\|"nationality"\|"document_number": {"source": "document_ai"\|"questionnaire"\|"expected_data", "key": "<docai field key>\|<questionnaire node id>\|expected_details.<field>\|metadata.<key>"}}`。 |
| `aml_entity_type` | string | `person`または`company`。個人(KYC)ワークフローでは`person`、企業(KYB)ワークフローでは`company`がデフォルトです。`KYB_REGISTRY`ステップなしで、アップロードされた書類に記載された企業をスクリーニングするには`company`を設定します。この場合、プロバイダーは企業レコードを検索し、一致スコアは企業として算出されます。 |
| `aml_incomplete_data_action` | action | 完全なアイデンティティ(氏名、生年月日、国)に満たないデータでスクリーニングが実行された場合の判定。デフォルトは`REVIEW`です。`NO_ACTION`は、氏名のみを保持していることを承知のうえで運用するワークフロー向けに、限られたデータのまま処理を続行します。いずれの場合もスクリーニングは実行され、部分データのログも記録されます。この設定が決めるのは、それがステータスにどう影響するかのみです。 |

例: ワークフローのどこにも本人確認書類がない状態で、メキシコの*acta constitutiva*に記載された企業をスクリーニングする場合:

```json theme={null}
{
  "feature": "AML",
  "config": {
    "aml_entity_type": "company",
    "aml_field_sources": {
      "full_name": { "source": "document_ai", "key": "razon_social" },
      "document_number": { "source": "document_ai", "key": "rfc" },
      "date_of_birth": { "source": "document_ai", "key": "fecha_constitucion" },
      "nationality": { "source": "document_ai", "key": "pais" }
    },
    "aml_incomplete_data_action": "REVIEW"
  }
}
```

> [!WARNING]
>
> 前に`OCR`ステップも`KYB_REGISTRY`ステップもない場合、`AML`ステップは
> `full_name`を埋められる必要があります。氏名がなければプロバイダー検索は行えません。何もマッピングしないワークフローや、
> 上流のどのステップも抽出しないDocument AIキーをマッピングしたワークフローは、保存されて何もスクリーニングしないまま放置されるのではなく、保存時に拒否されます。
> AMLの精度は、提供する識別子の数に直接左右されます。
> 氏名のみのスクリーニングこそが、大量の誤検知を生む原因です。

## デバイス・IP分析

機能の値: `IP_ANALYSIS`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `ip_mismatch_action` | action | IPの位置情報が想定されるデータと一致しない場合のアクションです。 |
| `ip_location_not_determined_action` | action | エンドユーザーを識別するIPアドレスが記録されておらず、セッションにIP位置情報がまったくない場合の判定です。この場合、国、都市、ISP、座標、タイムゾーンは利用できず、`ip_geofencing_by_country`、書類の国との比較、VPN/データセンターのチェックは実行できません。デフォルトは`NO_ACTION`で、セッションの判定を変更せずに`IP_LOCATION_NOT_DETERMINED`警告をセッション上に表示したままにします。位置を特定できないセッションを通過させてはならない場合は、`REVIEW`または`DECLINE`を設定してください。 |
| `vpn_detection_action` | action | VPNまたはプロキシの使用が検知された場合のアクションです。 |
| `expected_ip_mismatch_action` | action | IPが想定されるIPと一致しない場合のアクションです。 |
| `duplicated_ip_action` | action | IPが不審な形で再利用されている場合のアクションです。 |
| `duplicated_device_action` | action | 同じ永続的なデバイスフィンガープリントが、異なる`vendor_data`の値を持つ複数のセッションで再利用されている場合のアクションです。 |
| `recovered_device_action` | action | 永続的なデバイスIDが変わった後に、v2フィンガープリント復元によってセッションが過去に確認されたデバイスと高い信頼度で紐付けられた場合のアクションです。 |
| `is_ip_geofencing_enabled` | boolean | IPジオフェンシングによる制限を有効にします。`false`の場合、`ip_geofencing_by_country`は保持されますが適用されません。 |
| `ip_geofencing_by_country` | object | ISO-3国コードをキーとする国別のIP位置ルールです。例：`{"USA": {"allowed": true, "states": {"California": {"allowed": false}}}}`。州/地域のエントリは国のフラグより優先されます。記載されていない国は許可されます。 |
| `ip_geofencing_action` | action | セッションのIPが許可されていない国または州/地域にある場合のアクションです。デフォルトは`DECLINE`です。 |
| `automation_detected_action` | action | セッションが人ではなく自動化ツールによって操作されているとみられる場合の判定です。 |
| `cross_org_fraud_device_action` | action | このデバイスがネットワーク内の別の組織によって不正としてフラグ付けされている場合の判定です。 |
| `cross_org_fraud_ip_action` | action | このIPがネットワーク内の別の組織によって不正としてフラグ付けされている場合の判定です。 |
| `device_app_tampered_action` | action | ホストアプリケーションのバイナリが改ざんされているとみられる場合の判定です。 |
| `device_blocklist_action` | action | デバイスが組織のブロックリストに登録されている場合の判定です。 |
| `device_debugger_action` | action | ホストアプリケーションにデバッガーがアタッチされている場合の判定です。 |
| `device_emulator_action` | action | デバイスが実機ではなくエミュレーターである場合の判定です。 |
| `device_hooking_action` | action | ランタイムのフッキングまたはインストルメンテーションが検知された場合の判定です。 |
| `device_integrity_missing_action` | action | プラットフォームのデバイス完全性アテステーションが返されなかった場合の判定です。 |
| `device_rooted_action` | action | デバイスがroot化またはjailbreakされている場合の判定です。 |
| `multiple_devices_action` | action | セッションが複数のデバイスから操作された場合の判定です。 |
| `device_liveness_attack_history_action` | action | 同じデバイス(永続的なデバイスIDで照合)が、ライブネスの撮影が攻撃と判定された別ユーザーの過去のセッションで使用されていた場合のアクションです(警告`DEVICE_LINKED_TO_LIVENESS_ATTACK`)。デフォルトは`NO_ACTION`です。 |
| `device_model_inconsistency_action` | action | 同じデバイス(永続的なデバイスIDで照合)が、過去のセッションで別のデバイスモデルとして報告されていた場合のアクションです(警告`DEVICE_MODEL_INCONSISTENT`)。デフォルトは`NO_ACTION`です。 |
| `status_rules` | array | 任意のカスタムステータスルールです。 |

例：

```json theme={null}
{
  "feature": "IP_ANALYSIS",
  "config": {
    "vpn_detection_action": "REVIEW",
    "duplicated_device_action": "REVIEW",
    "recovered_device_action": "REVIEW",
    "is_ip_geofencing_enabled": true,
    "ip_geofencing_by_country": {
      "USA": { "allowed": true, "states": { "California": { "allowed": false } } },
      "RUS": { "allowed": false, "states": null }
    },
    "ip_geofencing_action": "DECLINE"
  }
}
```

高い信頼度で復元されたデバイスを自動的に却下する前にモニタリングしたい場合は、`recovered_device_action`を`duplicated_device_action`とは別に使用してください。復元デバイスの一致は不正グループの検知を目的として設計されていますが、それでも自社のトラフィックに合わせて調整する必要があるため、これは導入段階で役立ちます。

## 位置情報検証

機能の値: `GEOLOCATION`。

本人が認証を行っている間にどこにいるかを、デバイスの位置または接続のIP所在地から確認し、許可エリアとブロックエリア、IP所在地、書類の住所と照合します。
ステップの動作については[位置情報検証](https://docs.didit.me/ja/core-technology/location-verification/overview.md)を、判定フィールドについては[そのレポート](https://docs.didit.me/ja/core-technology/location-verification/report-location-verification.md)を参照してください。
書類の住所までの距離が必要な場合は、本人確認または住所証明の後に配置してください。距離は住所が登録されている場合にのみ測定されるためです。
`geolocation_position_source`が未設定の場合、IP所在地までの距離を測定するには、同じワークフロー内にデバイス・IP分析ステップが必要です。
すべてのキーは任意です。`config`が空のステップは、精度250m以内かつ120秒以内に取得されたデバイス位置を要求し、本人に3回の試行を与え、エリアルールは適用しません。

各検出結果には固有のアクションキーがあり、未設定のアクションキーには、選択した`geolocation_preset`のデフォルトが適用されます。プリセットを選択していない場合は、以下に記載するキーごとのデフォルトが適用されます。
不確かな位置情報や拒否された位置情報のデフォルトは`REVIEW`であり、`DECLINE`になることはありません。権限の拒否や広い半径は不正の証拠ではないためです。
明示的に設定したアクションは、常にプリセットより優先されます。
リプレイされたチャレンジ（`LOCATION_REPLAY_DETECTED`）とデバイスアテステーションの失敗（`LOCATION_INTEGRITY_FAILED`）は常に却下となり、アクションキーはありません。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `geolocation_position_source` | string | 位置の取得元です。`device_and_ip`はデバイスの位置を要求し、その位置が送信された接続のIP所在地と比較します（そのIPがまだキャッシュされていない場合はIPインテリジェンスによる照会を行います）。未設定（デフォルト）の場合もデバイスの位置を要求し、このキーが導入される前と同様に、セッションのデバイス・IP分析ステップが観測したIP所在地と比較します。そのため、そのステップがなければ距離は算出されず、接続が照会されることもありません。例外は、VPN、プロキシ、Torの検出結果に対してアクションを実行するノード（ノード自体のアクションまたはプリセットによる）です。このノードはその検出結果のために接続を照会し、`device_and_ip`とまったく同じようにデバイスの位置と比較します。`device_only`はIP所在地と比較することはなく、それらの検出結果のためにのみ接続を照会します。`ip_only`は本人に要求することはなく、代わりに接続のIP所在地を判定します。判定は市区町村レベルで半径50kmとし、精度、鮮度、おおよその位置の許可に関するルールは適用されません。`geolocation_areas`を使用する場合、沿岸の都市は、その半径内に別の国がない限り、その国の内側にあるものとして判定されます。デバイスに要求するノードでは、デバイスの位置がない試行は、その実態どおり拒否または失敗として判定されます。IP所在地がその代わりになることはありません。 |
| `geolocation_preset` | string | このノードの未設定のアクションすべてに適用されるデフォルトです。`licensing`: エリア外、ブロックエリア内、VPN、Tor、エミュレーターは却下となり、プロキシとその他の検出結果はレビューとなり、デバイスアテステーションがない場合は「アクションなし」のままです。`fraud_screening`: 同様ですが、Licensingで却下となるものはレビューに回ります。Nullの場合は従来からのデフォルトが維持されます。明示的に設定したアクションが常に優先されます。 |
| `geolocation_accuracy_mode` | string | デバイスに何を要求するかを指定します。`precise`はオペレーティングシステムに正確な位置を要求し、おおよその位置のみを許可した本人には試行回数が残っている間は再度要求し、その後`geolocation_approximate_action`で判定します。`approximate_allowed`はその判定を行わずに、おおよその位置の許可を受け入れます。`geolocation_max_accuracy_radius_m`はどちらの場合も適用されます。未設定の場合は`precise`です。 |
| `geolocation_max_accuracy_radius_m` | integer | デバイス位置が有効とみなされる不確かさの半径の最大値（メートル単位）です。10〜50000メートルで、未設定の場合は250です。これより広い位置、または半径を報告しない位置は、`geolocation_low_accuracy_behavior`の指定どおりに扱われ、`geolocation_low_accuracy_action`で判定されます。`ip_only`ノードにはデバイスの半径がないため、これが適用されることはありません。 |
| `geolocation_max_accuracy_radius_unit` | string | コンソールで`geolocation_max_accuracy_radius_m`を表示する単位です。表示専用です。保存される値は常にメートルであり、これに依存するルールはありません。ステップデータは、クライアントが同じ単位を表示できるようにこれを転送するだけです。 |
| `geolocation_low_accuracy_behavior` | string | `geolocation_max_accuracy_radius_m`より広い位置、または半径のない位置の扱いです。`ask_again`（デフォルト）は試行回数が残っている間、本人に再試行を求めます。`fail`は最初の1回でステップを終了します。 |
| `geolocation_max_age_seconds` | integer | サーバーが受信した時点で、デバイス位置がどれだけ古くてもよいかを秒単位で指定します。5〜3600秒で、未設定の場合は120です。これより古い位置は試行回数が残っている間は再度要求され、その後`geolocation_stale_fix_action`で判定されます。 |
| `geolocation_timeout_seconds` | integer | 各試行でクライアントがデバイスに位置を探させる時間（秒単位）です。サーバーはこれをステップデータで転送するだけで、自身では何も強制しません。5〜120秒で、未設定の場合は20です。時間内に位置が見つからなかった試行は`timeout`として送信され、試行回数が残っている間は再度要求され、その後`geolocation_unavailable_action`で判定されます。 |
| `geolocation_max_attempts` | integer | このノードで本人に与えられる試行回数です。1〜5回で、未設定の場合は3です。本人がまだ結果を変えられる試行（拒否、広すぎる位置・古い位置・おおよその位置、またはノードがアクションを実行するエリアや匿名化ツールの検出結果）は、試行回数が残っている間は再度要求され、最後の試行がステップの結果を決定します。偽装された位置、またはノードがアクションを実行するエミュレーターは、それを報告した試行でステップを終了します。 |
| `geolocation_allow_qr_handoff` | boolean | ステップがまだ開いている間に、QRコードを使ってスマートフォンで続行する選択肢を提示します（ステップデータの`allow_qr_handoff`、各送信に対する応答の`can_handoff`）。ネイティブSDKはすでにスマートフォン上で動作しているため、コードを表示することはありません。デフォルトでオンです。 |
| `geolocation_allow_skip` | boolean | 導入画面または再試行画面から、いつでも位置情報なしで先に進めるようにします（`skipped: true`）。スキップするとステップが終了し、`geolocation_unavailable_action`で判定されます。ただし、`geolocation_refusal_path`が`continue_without_location`の場合に拒否への応答として行われたスキップは例外で、その拒否として記録されます。デフォルトでオフです。 |
| `geolocation_deep_link_enabled` | boolean | ステップデータ内の`deep_link_enabled`としてクライアントに転送され、代わりに顧客自身のアプリを開くよう提案します。サーバーはこれにルールを適用しません。デフォルトはオフです。 |
| `geolocation_refusal_path` | string | 位置情報へのアクセスが拒否されたときに提示する次の進め方です。`retry_then_handoff`（デフォルト）は試行回数が残っている間は再度許可を求め、スマートフォンへの引き継ぎを提案します。`continue_without_location`は拒否を記録したうえでそのまま続行させます。`end_session`は最初の拒否でステップとセッションを終了します。この場合、`geolocation_permission_denied_action`がReviewまたはDeclineであること、およびワークフローに却下、レビュー中、または最終判定の終了点があることが必要です。セッションは実行されたステップに基づいて判定され、承認済みになることはありません。その判定で終了できないワークフローでは、承認以外のもう一方の終了点になります（レビュー中の代わりに却下、却下の代わりにレビュー中）。 |
| `is_geolocation_geofencing_enabled` | boolean | エリアルールを有効にします。`geolocation_areas`、または旧来の`geolocation_geofencing_by_country`は、これがtrueの間のみ適用され、その場合にのみステップデータに`available_areas`が含まれます。デフォルトはオフです。オンの場合、`geolocation_areas`リストには許可エリアが少なくとも1つ必要です。 |
| `geolocation_areas` | array | 許可エリアとブロックエリアで、`is_geolocation_geofencing_enabled`がtrueの間に適用されます。許可エリアの内側にある位置のみが通過し、ブロックエリアは常に許可エリアより優先されます。位置はその精度円全体で判定されます。判定を左右する境界をまたぐ円は判定不能となり、決して外側とはみなされません。国や地域は他の陸地が始まる地点で終わり、海岸線で終わることはありません。また、輪郭データ上でどの陸地にも位置しない位置（簡略化された海岸線で切り取られた海岸沿いや桟橋など）は、その半径に12海里を加えた範囲内にあるすべての国または地域について判定不能となります。`id`は分岐ルールと`geolocation.inside_areas` / `geolocation.blocked_areas`が参照する名前です。`kind`で形状を選択します。`country`全体（輪郭が公開されているISO 3166-1 alpha-3。輪郭データ上で他国の地域として描かれる地域はその`region`となり、たとえばレユニオンはフランスの`FR-RE`、ボネール、シント・ユースタティウスおよびサバは`NL-BQ1`から`NL-BQ3`です）、`region`（境界が公開されている1つの国のISO 3166-2コード）、`circle`（1〜500km）、または`polygon`（3〜200点で、辺同士が交差も接触もしないリング）です。エリアは最大50件で、idは一意である必要があり、ジオフェンシングがオンの間は許可エリアが少なくとも1つ必要です。`geolocation_geofencing_by_country`とは併用できません。 |
| `geolocation_geofencing_by_country` | object | デバイス自体の位置に対する国および地域の許可・拒否ルールで、`is_geolocation_geofencing_enabled`がtrueの間のみ適用されます。IP分析の`ip_geofencing_by_country`と同じ形式ですが、`states`のキーは州名ではなくISO 3166-2コード（`US-NJ`）です。これは、位置がプロバイダーの都市ラベルではなく行政区画に解決されるためです。リストにない国は許可されます。ISO 3166-2の境界が公開されていない国に地域ルールを保存しようとすると、黙って無視されるのではなく拒否されます。 |
| `geolocation_ip_distance_km` | integer | 両方の不確実性半径を差し引いた後、`geolocation_ip_distance_action`が適用されるまでにデバイスの位置とIPの位置がどれだけ離れていてよいかを、キロメートル単位で指定します。キーを省略した場合は200です。nullにすると比較が無効になります。`geolocation_position_source`が`device_and_ip`または未設定のノードのみが比較を行い、そのキーによって比較対象のIPの位置が決まります。 |
| `geolocation_ip_distance_unit` | string | コンソールで`geolocation_ip_distance_km`を表示する単位です。表示専用であり、保存される値は常にキロメートルで、どのルールもこれに依存しません。 |
| `geolocation_document_distance_km` | integer | `geolocation_document_distance_action`が適用されるまでに、位置（`ip_only`ノードではIPの位置）が`geolocation_document_distance_basis`で指定した住所からどれだけ離れていてよいかを、キロメートル単位で指定します。未設定またはnull（デフォルト）の場合はオフです。 |
| `geolocation_document_distance_unit` | string | コンソールで`geolocation_document_distance_km`を表示する単位です。表示専用であり、保存される値は常にキロメートルで、どのルールもこれに依存しません。 |
| `geolocation_document_distance_basis` | string | `geolocation_document_distance_km`をどの住所から測定するかを指定します。`document`（デフォルト。本人確認書類の住所、次に住所証明）、`proof_of_address`のみ、または`declared`（セッション作成時に指定された`expected_details.address`をジオコーディングしたもの）です。 |
| `geolocation_travel_tolerance_enabled` | boolean | 同一人物（同じ`vendor_data`）が過去`geolocation_travel_max_days`日以内に住所から`geolocation_travel_usual_area_km`以内で確認されていた場合、住所からの距離を許容します。VPN、なりすまされた位置、ブロックエリア、許可エリア外であることは決して許容しません。デバイスが測定した位置のみがその場所で確認されたものとみなされ、偽装またはシミュレートされた測位、エミュレーター、アテステーションの失敗は決してそうみなされません。 |
| `geolocation_travel_usual_area_km` | integer | 住所を中心とする、その人物の通常の行動範囲とみなす半径です。10〜500kmで、未設定の場合は100です。 |
| `geolocation_travel_max_days` | integer | 通常の行動範囲で確認されてから、離れた位置を引き続き移動中とみなす期間です。1〜90日で、未設定の場合は14です。 |
| `geolocation_consecutive_mismatch_count` | integer | 今回のチェックと同一人物（同じ`vendor_data`）の過去のチェックが、許可エリア外、ブロックエリア内、または住所から遠すぎる状態でこの回数連続した場合に、LOCATION\_CONSECUTIVE\_MISMATCHESを発生させます。何も比較しなかったチェックは連続回数を延長も中断もせず、デバイスが測定していない位置（偽装またはシミュレートされた測位、エミュレーター、アテステーションの失敗）も同様です。2〜10で、null（デフォルト）の場合はオフです。 |
| `geolocation_approximate_action` | action | `geolocation_accuracy_mode`が正確な位置を求めているのに、ユーザーがおおよその位置情報を許可した場合の判定です。デフォルトは`REVIEW`です。 |
| `geolocation_blocked_area_action` | action | 位置とその精度円全体が`geolocation_areas`のブロックエリア内に入る場合の判定です。デフォルトはDeclineです。 |
| `geolocation_consecutive_mismatch_action` | action | `geolocation_consecutive_mismatch_count`回連続で不一致になった場合の判定です。デフォルトはReviewです。 |
| `geolocation_document_distance_action` | action | デバイスの位置が書類の住所から`geolocation_document_distance_km`より離れている場合の判定です。住所は大まかにジオコーディングされるため、これは弱いシグナルです。デフォルトは`REVIEW`です。 |
| `geolocation_emulator_action` | action | 位置情報を共有したアプリが、エミュレーター上で動作していると報告した場合の判定です。ブラウザーはこれを報告できません。No action以外の場合、その試行でステップが終了します。再確認してもデバイスは変わらないためです。設定するか、プリセットで別途指定しない限りNo actionです。 |
| `geolocation_geofence_undetermined_action` | action | 精度円が境界にかかっているため、位置がフェンスの内側か外側かを判断できない場合の判定です。不確実な位置が外側として報告されることはありません。デフォルトは`REVIEW`です。 |
| `geolocation_geofencing_action` | action | デバイスの位置とその不確実性円全体が`geolocation_geofencing_by_country`の外側にある場合の判定です。デフォルトは`DECLINE`です。 |
| `geolocation_integrity_missing_action` | action | ネイティブクライアントがデバイスアテステーショントークンなしで位置を送信した場合の判定です。デフォルトはNo actionです。どのブラウザーもアテステーションを行えないため、Webクライアントは「欠落」ではなく「非対応」として記録されます。 |
| `geolocation_ip_distance_action` | action | 両方の不確実性半径を差し引いた後で、デバイスの位置とセッションのIP位置が`geolocation_ip_distance_km`より離れている場合の判定です。デフォルトは`REVIEW`です。 |
| `geolocation_low_accuracy_action` | action | どの試行でも必要な精度が得られなかった場合の判定です。最良の位置の不確実性半径が`geolocation_max_accuracy_radius_m`より広い場合、または半径がまったく報告されなかった場合が該当します。半径のない位置が上限を満たしているとみなされることはありません。デフォルトは`REVIEW`です。 |
| `geolocation_mock_location_action` | action | オペレーティングシステムが、位置を実測値ではなくシミュレーションされたものとして報告した場合の判定です（Androidのモックプロバイダー、iOSのソフトウェアによるシミュレーション）。デフォルトは`REVIEW`です。 |
| `geolocation_permission_denied_action` | action | 許可されたすべての試行で、ユーザーが位置情報のプロンプトを拒否した、または閉じた場合の判定です。デフォルトはReviewです。拒否は本人の選択であり、不正のシグナルではないためです。 |
| `geolocation_proxy_action` | action | 位置情報を共有した接続が、オープンプロキシ、匿名プロキシ、またはプライベートリレープロキシを経由している場合の判定です。設定するか、プリセットで別途指定しない限りNo actionです。 |
| `geolocation_stale_fix_action` | action | サーバーが受信した時点より`geolocation_max_age_seconds`を超えて前に位置が測定されていた場合の判定です。デフォルトは`REVIEW`です。 |
| `geolocation_tor_action` | action | 位置情報を共有した接続がTorの出口ノードである場合の判定です。設定するか、プリセットで別途指定しない限りNo actionです。 |
| `geolocation_unavailable_action` | action | 位置を取得できなかった場合の判定です（位置情報サービスがオフまたは制限されている、測位システムが何も返さなかった、試行がタイムアウトした、ユーザーがステップをスキップした、またはクライアントが古く対応していない場合）。デフォルトは`REVIEW`です。 |
| `geolocation_vpn_action` | action | 位置情報を共有した接続が商用VPNである場合の判定です。No action以外の場合、試行回数が残っている間は、本人にVPNをオフにして再確認するよう求めます。設定するか、プリセットで別途指定しない限りNo actionです。 |
| `status_rules` | array | 任意のカスタムステータスルールです。[位置情報検証レポート](https://docs.didit.me/ja/core-technology/location-verification/report-location-verification.md#ステータスルールと分岐で使えるフィールド)に記載されている`geolocation.*`フィールドを対象にできます。 |

### エリアの形状

`geolocation_areas`の各項目には、`id`（`A-Z a-z 0-9 _ -`からなる1〜64文字で、リスト内で一意）、任意の`label`（最大80文字）、`allowed`または`blocked`を指定する`type`、形状を選択する`kind`があります。

| `kind` | 追加フィールド | 意味 |
| - | - | - |
| `country` | `country`（ISO 3166-1 alpha-3） | 輪郭が公開されている国全体です。 |
| `region` | `country`、`regions`（その国のISO 3166-2コード） | 境界が公開されている1か国内の1つ以上の行政区画です。 |
| `circle` | `center`（`latitude`、`longitude`）、`radius_km`（1〜500） | 中心から半径内にあるすべての地点です。 |
| `polygon` | `points`（`latitude`、`longitude`の項目を3〜200個） | 辺どうしが交差も接触もしない閉じたリングです。 |

1つのリストに含められるエリアは最大50個で、`is_geolocation_geofencing_enabled`が`true`の間は少なくとも1つの`allowed`エリアが必要です。
`geolocation_areas`と`geolocation_geofencing_by_country`は同時に送信できません。また、`geolocation_refusal_path: "end_session"`を指定するには、`geolocation_permission_denied_action`が`REVIEW`または`DECLINE`である必要があります。
境界が公開されていない国の地域など、一致する可能性のないエリアは、APIが保存せずに拒否します。

例:

```json theme={null}
{
  "feature": "GEOLOCATION",
  "config": {
    "geolocation_position_source": "device_and_ip",
    "geolocation_preset": "licensing",
    "geolocation_max_accuracy_radius_m": 250,
    "geolocation_max_attempts": 3,
    "is_geolocation_geofencing_enabled": true,
    "geolocation_areas": [
      { "id": "spain", "label": "Spain", "type": "allowed", "kind": "country", "country": "ESP" },
      { "id": "ceuta-melilla", "type": "blocked", "kind": "region", "country": "ESP", "regions": ["ES-CE", "ES-ML"] }
    ],
    "geolocation_ip_distance_km": 200,
    "geolocation_ip_distance_action": "REVIEW",
    "geolocation_vpn_action": "DECLINE"
  }
}
```

## 住所証明

機能の値: `PROOF_OF_ADDRESS`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `poa_documents_allowed` | object | ISO3国コードとPOA書類タイプ設定の対応付け。有効な書類タイプを少なくとも1つ有効にする必要があります。 |
| `poa_languages_allowed` | object | ISO 639-1言語コードと`0`または`1`の対応付け。少なくとも1つの言語を有効にする必要があります。 |
| `poa_name_or_address_mismatch_action` | action | 氏名または住所が想定データと一致しない場合のアクション。 |
| `poa_document_issues_action` | action | 書類に品質または抽出の問題がある場合のアクション。 |
| `poa_max_attempts_exceeded_action` | restricted action | ユーザーが再試行回数を超えた場合のアクション。`DECLINE`または`REVIEW`を使用します。 |
| `poa_document_authenticity_action` | restricted action | 真正性チェックに失敗した場合のアクション。`DECLINE`または`REVIEW`を使用します。 |
| `poa_unsupported_document_type_action` | action | 書類タイプがサポート対象外の場合のアクション。 |
| `poa_unsupported_language_action` | action | 書類の言語がサポート対象外の場合のアクション。 |
| `poa_issuer_not_identified_action` | action | 書類の発行元を特定できない場合のアクション。 |
| `poa_issue_date_not_detected_action` | action | 発行日が見つからない場合のアクション。 |
| `poa_unparsable_or_invalid_address_action` | action | 住所が無効、または解析できない場合のアクション。 |
| `address_validation_enabled` | boolean | このステップが読み取る住所（住所証明に記載された住所。書類チェックに合格したアップロードのみが検証対象）を郵便参照データと照合して検証します。住所が実在することを確認して正規化しますが、人物と紐付けることは一切ありません。結果は、判定に含まれるこのステップの`address_validation`オブジェクトです。**検証した住所1件あたり\$0.10が課金されます**。実行できなかった検証（`unavailable`）は無料です。デフォルトはオフです。 |
| `address_not_verified_action` | action | 住所検証で住所を建物レベルまで確認できなかった場合のアクション（`ADDRESS_NOT_VERIFIED`: `partially_verified`または`not_verified`）。`address_validation_enabled`がオンの間のみ適用されます。デフォルトは`NO_ACTION`で、警告を記録するだけです。 |
| `poa_name_match_score_threshold` | integer | 氏名一致のしきい値。 |
| `poa_max_retry_attempts` | integer | 再試行回数の上限。`2`から`5`。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

## アンケート

機能の値: `QUESTIONNAIRE`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `questionnaire_uuid` | UUID | 必須。`POST /v3/questionnaires/`が返す`questionnaire_id`を使用します。 |
| `review_questionnaire_manually` | boolean | アンケートの回答を手動レビューに回します。 |
| `status_rules` | array | 任意のカスタムステータスルール。`questionnaire.answers.<question_id>`フィールドを対象にできます。 |

## KYB登記

機能の値: `KYB_REGISTRY`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `kyb_accepted_countries` | object | 法人登記の照会に使用する、従来のISO3国コード許可リスト。`kyb_registry_countries_config`に置き換えられました。引き続き読み取り可能で、既存のワークフローでは引き続きその設定から導出されますが、新しいワークフローの設定には使用しません。 |
| `kyb_manual_company_action` | action | 企業に手動での対応が必要な場合のアクション。 |
| `kyb_registry_fields_config` | object | ホスト型フローの登記フォームにおける、フィールドごとの表示と必須設定。下記を参照してください。 |
| `kyb_registry_countries_config` | object | 国ごとの登記ルーティング。形式は`{"<ISO2>": {"enabled": bool, "tier": "basic" \| "shareholders" \| "ubo"}}`です。有効にした各国では、企業が選択されたときに課金されるデータレベルを選びます（`basic`はLiteレベルです）。有効にできるのは、[料金エンドポイント](https://docs.didit.me/ja/getting-started/kyb-registry-pricing.md)がその国で利用可能としているレベルのみです。少なくとも1つの国を有効にする必要があり、どこも検索しない登記チェックは拒否されます。手動で入力された企業は別途請求され、この設定は使用されません。 |
| `kyb_registry_monitoring_enabled` | boolean | ShareholdersまたはUBOの結果が得られた後、企業の登記記録を継続的なモニタリングの対象にします。ステータス、役員、所有構造、住所のいずれかが変更されると、セッションはレビューに戻り、Webhookが送信されます。登記プロバイダーがモニタリングを提供している場合にのみ利用できます。企業1社あたり年間USD 2.00で、いつでも解約できます。デフォルトはオフです。 |
| `kyb_vat_invalid_action` | action | 企業のVAT番号がEU VIESの検証に失敗した場合のアクション。デフォルトは`REVIEW`です。 |
| `kyb_vat_unverified_action` | action | VIESが利用できず、VAT番号を検証できなかった場合のアクション。デフォルトは`NO_ACTION`です。 |
| `status_rules` | array | 任意のカスタムステータスルール。 |

`kyb_registry_fields_config`は、設定可能な各フィールドキーを`{"enabled": bool, "required": bool}`に対応付けます。`enabled: false`はフィールドを非表示にし、`enabled: true, required: false`は任意項目として表示し、`enabled: true, required: true`は送信時に入力必須にします。`company_name`、`country_code`、`region`は常に表示される必須項目で、設定できません。オブジェクトを省略した場合、または`null`か`{}`の場合はデフォルトが適用され、`incorporation_date`のみが必須で、その他のフィールドはすべて任意になります。

```json theme={null}
{
  "kyb_registry_fields_config": {
    "registration_number": { "enabled": true, "required": true },
    "incorporation_date": { "enabled": true, "required": true },
    "vat_number": { "enabled": true, "required": false },
    "control_scheme": { "enabled": false, "required": false }
  }
}
```

設定可能なフィールドキー: `registration_number`、`incorporation_date`、`legal_address`、`vat_number`、`alternative_names`、`tax_number`、`company_type`、`legal_entity_identifier`、`location_of_registration`、`nature_of_business`、`registered_capital_amount`、`registered_capital_currency`、`website`、`email`、`phone`、`control_scheme`。エンドユーザー側の動作については[設定可能な登記フォームフィールド](https://docs.didit.me/ja/business-verification/company-data.md#設定可能な登記フォームのフィールド)を、`vat_number`と`tax_number`の確認方法については[VATおよび納税者番号の検証](https://docs.didit.me/ja/business-verification/company-data.md#vatおよび納税者番号の検証)を参照してください。

## KYB書類

機能の値：`KYB_DOCUMENTS`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `kyb_required_document_groups` | objectまたはarray | 必須のKYB書類グループです。 |
| `kyb_document_subtype_config` | object | 書類ごとのサブタイプの有効化と書類の経過期間に関する設定です。 |
| `kyb_document_tampering_action` | 制限付きアクション | 改ざんが検出された場合のアクションです。`DECLINE`または`REVIEW`を使用します。 |
| `kyb_document_critical_mismatch_action` | 制限付きアクション | 書類の重大な不一致に対するアクションです。`DECLINE`または`REVIEW`を使用します。 |
| `kyb_document_non_critical_mismatch_action` | アクション | 書類の重大でない不一致に対するアクションです。 |
| `kyb_document_age_action` | アクション | 書類の経過期間に関するルールを満たさない場合のアクションです。 |
| `kyb_document_max_retry_attempts` | integer | KYB書類の再試行回数の上限です。 |
| `kyb_document_max_attempts_exceeded_action` | 制限付きアクション | 最大試行回数を超えた場合のアクションです。`DECLINE`または`REVIEW`を使用します。 |
| `status_rules` | array | 任意のカスタムステータスルールです。 |

## KYB主要人物

機能の値：`KYB_KEY_PEOPLE`。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `kyb_ubo_ownership_threshold` | integer | UBOの所有比率のしきい値で、`0`から`100`までです。 |
| `kyb_shareholder_ownership_threshold` | integer | 株主の所有比率のしきい値で、`0`から`100`までです。`kyb_ubo_ownership_threshold`より大きい値は設定できません。 |
| `kyb_key_people_ownership_required` | boolean | 提出されるすべての主要人物に所有比率の入力を必須にします。提出時に適用され、ホスト型UIにも反映されて、このフィールドが必須として表示されます。デフォルトは`false`です。 |
| `kyb_require_ubo_kyc` | boolean | UBOに個人の認証ワークフローの完了を求めます。 |
| `kyb_ubo_verification_workflow` | UUID | `kyb_require_ubo_kyc`が`true`の場合は必須です。同じアプリケーション内のKYB以外のワークフローを参照する必要があります。 |
| `kyb_require_officer_kyc` | boolean | 役員に個人の認証の完了を求めます。 |
| `kyb_shareholder_verification_workflow` | UUID | 株主向けの個人の認証ワークフローです。 |
| `kyb_officer_verification_workflow` | UUID | 役員向けの個人の認証ワークフローです。 |
| `kyb_require_corporate_ubo_kyb` | boolean | 法人であるUBOにKYBの完了を求めます。 |
| `kyb_corporate_ubo_verification_workflow` | UUID | `kyb_require_corporate_ubo_kyb`が`true`の場合は必須です。同じアプリケーション内のKYBワークフローを参照する必要があります。 |
| `kyb_reject_if_ubo_rejected` | boolean | 必須のUBO認証が却下された場合に、企業を却下します。 |
| `kyb_wait_for_all_ubos` | boolean | KYBセッションの判定を行う前に、必須のUBO認証がすべて完了するのを待機します。 |
| `kyb_role_config` | objectまたはarray | 役割ごとの設定です。KYCが必須の各役割には`verification_workflow`を含める必要があります。 |
| `kyb_reuse_verified_individuals` | boolean | 可能な場合は、すでに認証済みの個人を再利用します。 |
| `kyb_notify_parties_by_email` | boolean | 招待された主要人物にメール通知を送信します。 |
| `kyb_key_people_company_fields` | object | 法人である主要人物について収集する企業情報です。`kyb_key_people_person_fields`と同じフィールド記述子のリスト形式で、同じルールが適用されます。形式：`[{"key": "<field key>", "label": "<label>", "type": "text"\|"number"\|"date"\|"phone"\|"email", "required": true\|false, "custom": true\|false}]`。 |
| `kyb_key_people_document_mismatch_action` | アクション | 主要人物の書類が、その人物について申告された情報と一致しない場合の判定です。 |
| `kyb_key_people_person_fields` | object | 個人である主要人物から収集する個人情報で、フィールド記述子の順序付きリストとして指定します(マップではありません)。`key`は必須で、空にはできません。`type`はtext、number、date、phone、emailのいずれかである必要があります。`custom`は、組み込みのフィールドではなく顧客が追加したフィールドであることを示します。形式：`[{"key": "<field key>", "label": "<label>", "type": "text"\|"number"\|"date"\|"phone"\|"email", "required": true\|false, "custom": true\|false}]`。 |
| `kyb_key_people_prefill_from_registry` | boolean | 法人登記の照会結果から主要人物のリストを事前入力します。顧客はすべての役員と株主を入力する代わりに、内容を確認して修正するだけで済みます。 |
| `status_rules` | array | 任意のカスタムステータスルールです。 |

## Document AI

機能の値：`DOCUMENT_AI`。

ユーザーに1件以上の書類を提出してもらい、定義した名前付きフィールドをビジョンモデルで抽出します。設定した各フィールドは分岐に使える値`document_ai.<key>`となり、ステップの結果は`document_ai.status`です。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `document_ai_documents` | array | 必須。提出を求める書類（最大`3`件）。各エントリは書類オブジェクトです（下記参照）。 |
| `document_ai_unreadable_document_action` | action | 書類を読み取れない場合、またはデータを抽出できない場合のアクション。 |
| `document_ai_missing_required_fields_action` | action | 必須フィールドを抽出できない場合のアクション。 |
| `document_ai_document_tampering_action` | restricted action | 書類に改ざんの兆候がある場合のアクション。`DECLINE`または`REVIEW`を使用します。 |
| `document_ai_name_mismatch_action` | action | 抽出した氏名が検証済みの本人情報と一致しない場合のアクション。`is_full_name`が設定されたフィールドが必要です。 |
| `document_ai_unsupported_file_action` | action | アップロードされたファイル形式がサポートされていない場合のアクション。 |
| `document_ai_max_attempts_exceeded_action` | restricted action | ユーザーが再試行回数の上限を超えた場合のアクション。`DECLINE`または`REVIEW`を使用します。 |
| `document_ai_name_match_score_threshold` | integer | 抽出した氏名が検証済みの本人情報と一致するとみなす最小スコア（`0`～`100`）。これを下回ると`document_ai_name_mismatch_action`が適用されます。 |
| `document_ai_max_retry_attempts` | integer | 再試行の上限回数（`2`～`5`）。 |
| `status_rules` | array | 任意のカスタムステータスルール。`document_ai.<key>`フィールドを対象にできます。 |

`document_ai_documents`の各エントリは書類です。

| 書類フィールド | 型 | 説明 |
| - | - | - |
| `document_key` | string | 必須。書類の固定識別子で、ステップ内で一意である必要があります。 |
| `title` | string | 必須。ユーザーに表示するタイトル。 |
| `description` | string | 必須。アップロードする内容についてユーザーに表示する説明。 |
| `title_i18n` | object | 任意。ロケールコードと翻訳済みタイトルの対応（例：`{ "es": "Comprobante de fondos" }`）。 |
| `description_i18n` | object | 任意。ロケールコードと翻訳済み説明の対応。 |
| `fields` | array | 必須。抽出するフィールド（1つ以上）。フィールドキーは書類内で一意である必要があります。 |

書類の`fields`の各エントリはフィールドです。

| フィールド | 型 | 説明 |
| - | - | - |
| `key` | string | 必須。抽出値の固定JSONキーで、書類内で一意である必要があります。`document_ai.<key>`として分岐に使用します。 |
| `name` | string | 必須。人が読めるフィールドラベル。 |
| `name_i18n` | object | 任意。ロケールコードと翻訳済みフィールド名の対応。 |
| `instruction` | string | 任意。このフィールドで何を抽出すべきかをモデルに正確に伝える指示。 |
| `type` | string | フィールドの型：`text`、`number`、`date`のいずれか。デフォルトは`text`です。 |
| `required` | boolean | フィールドが必須かどうか。デフォルトは`false`です。`true`で値が欠けている場合、`document_ai_missing_required_fields_action`が適用されます。 |
| `is_full_name` | boolean | 任意。デフォルトは`false`です。値が書類の名義人の氏名であるフィールドを示し、検証済みの本人情報（本人確認で取得した氏名、またはセッションの期待される情報）と照合されます。`true`に設定できるのは**書類ごとに最大1つのフィールド**のみで、設定は**必須ではありません**。どのフィールドにも設定しない書類では、その書類の氏名照合は行われません。氏名として指定できるのは`text`フィールドのみです。 |

例：

```json theme={null}
{
  "feature": "DOCUMENT_AI",
  "config": {
    "document_ai_documents": [
      {
        "document_key": "proof_of_funds",
        "title": "Proof of Funds",
        "description": "Upload a recent bank statement.",
        "title_i18n": { "es": "Comprobante de fondos" },
        "fields": [
          {
            "key": "account_holder",
            "name": "Account holder",
            "instruction": "The full name of the account holder as printed on the statement.",
            "type": "text",
            "required": true,
            "is_full_name": true
          },
          {
            "key": "closing_balance",
            "name": "Closing balance",
            "instruction": "The closing balance amount.",
            "type": "number",
            "required": false
          }
        ]
      }
    ],
    "document_ai_missing_required_fields_action": "REVIEW",
    "document_ai_name_mismatch_action": "REVIEW",
    "document_ai_name_match_score_threshold": 80
  }
}
```

## 電子署名

機能の値：`SIGNATURE`。

本人確認を受けた人物、または企業の主要人物に、Simpleレベル（デフォルト）またはAdvanced（AES）で書類に署名してもらいます。署名者を検証するステップ（本人確認と、コード送信用のメールアドレス認証または電話番号検証）の後に配置してください。詳しくは[電子署名](https://docs.didit.me/ja/core-technology/electronic-signature/overview.md)を参照してください。

| 設定フィールド | 型 | 説明 |
| - | - | - |
| `signature_documents` | array | コンソールでこのワークフローにアップロードされた書類です。署名者に表示される順に、`[{"uuid", "title", "file_name", "pages", "size_bytes"}]`の形式で指定します。読み取られるのは`uuid`の値とその順序のみで、それ以外は保存済みのファイルから取得されます。書類は最大20件、合計50 MBまでです。デフォルトは`[]`です。 |
| `signature_documents_source` | string | 書類の取得元です。`workflow`（デフォルト）、`session`（[セッションの作成](https://docs.didit.me/ja/sessions-api/create-session.md#電子署名の書類)時の`sign.documents`）、または`both`（ワークフローの書類が先）を指定します。 |
| `signature_require_read_to_end` | boolean | 署名者は、フィールドのない各書類について、同意する前に末尾まで到達する必要があります。デフォルトは`true`です。 |
| `signature_consent_per_document` | boolean | 署名者は、フィールドのない各書類に個別に同意します。フィールドのある書類では、ガイド付きのフィールド入力と最終的な同意がこれに代わります。デフォルトは`true`です。 |
| `signature_signer` | string | 署名する人です。`verified_person`（デフォルト、KYC）、またはKYBの場合は`legal_representative`（役割が`representative`または`authorized_signatory`の主要人物）もしくは`key_people`（KYCセッションを持つ個人であるすべての主要人物）を指定します。 |
| `signature_level` | string | `simple`（デフォルト）：本人確認、メールアドレス、電話番号、コードは不要で、署名者はセッションリンク上で氏名を入力して署名します。`aes`：承認済みの本人確認、検証済みのメールアドレスまたは電話番号、およびワンタイムコードが必要です。署名者が`legal_representative`または`key_people`の場合、`simple`は`signature_simple_requires_verified_person`で拒否されます。ワークフローの`signature_availability.aes`が`false`の間は、新しい`aes`ステップを保存すると`aes_not_available`とともに`400`が返されます。`qes`は近日提供予定で、保存すると`qes_not_available`とともに`400`が返されます。 |
| `signature_format` | string | `pades`（デフォルト）。AESでは、`xades`と`cades`は`signature_format_not_supported`で拒否されます。 |
| `signature_otp_channel` | string | ワンタイムコードの送信先です。`email`（デフォルト）または`sms`を指定します。コードは、セッション内で事前に検証された連絡先にのみ送信されます。 |
| `signature_email_signed_copy` | boolean | 署名済み書類のコピーを署名者にメールで送信します。検証済みのメールアドレスが必要です。デフォルトは`true`です。 |
| `signature_evidence_page` | boolean | 署名済みの各PDFに証跡ページを追加します。デフォルトは`true`です。 |
| `signature_link_validity_days` | integer | 署名リンクの有効期間で、セッション作成から`1`日から`30`日までです。デフォルトは`7`です。 |
| `signature_declined_action` | action | 署名者が署名を辞退した場合の判定です。料金は発生しません。デフォルトは`REVIEW`です。 |
| `signature_otp_failed_action` | action | 誤ったコードが3回入力された場合、またはコードが5回を超えて要求された場合の判定です。デフォルトは`DECLINE`です。 |
| `signature_name_mismatch_action` | action | 主要人物の申告した氏名が、検証済みの氏名と一致しない場合の判定です。デフォルトは`DECLINE`です。 |
| `signature_identity_not_verified_action` | action | 署名者に承認済みの本人確認がない場合の判定です。デフォルトは`DECLINE`です。 |
| `signature_document_changed_action` | action | 書類が、表示時に記録されたSHA-256と一致しなくなった場合の判定です。デフォルトは`DECLINE`です。 |
| `status_rules` | array | 任意のカスタムステータスルールです。`signature.status`、`signature.level`、`signature.format`を対象にできます。 |

ワークフローの書類上のフィールドは、コンソールのテンプレートエディターで配置します。セッションの書類の場合は、フィールドを`sign.documents[].fields`で送信し、`api.<key>`フィールドの値を`sign.field_values`で送信します。詳しくは[セッションの作成](https://docs.didit.me/ja/sessions-api/create-session.md#電子署名の書類)を参照してください。

セッションごとに書類を送信する場合の例：

```json theme={null}
{
  "feature": "SIGNATURE",
  "config": {
    "signature_documents_source": "session",
    "signature_signer": "verified_person",
    "signature_level": "aes",
    "signature_otp_channel": "email",
    "signature_link_validity_days": 14,
    "signature_declined_action": "REVIEW"
  }
}
```


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