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

# 生体情報の同意 - BIPA、CUBI、コロラド州法への対応

> イリノイ、テキサス、コロラドの各州向けに、自撮りの前に明示的な生体情報の同意を取得するDiditの機能です。表示条件、ネイティブSDK 4.10.0、判定フィールドを解説します。

イリノイ州(BIPA)、テキサス州(CUBI)、コロラド州では、事業者が自撮りや身分証の写真から顔の形状データを取得する前に、通知と明示的な同意書面が必要です。Diditは、これらの法律が対象とする人に対して、最初の顔撮影の前に同意ステップを表示でき、その回答をセッションに証拠として保存します。

このページでは、ステップが表示されるタイミング、表示できるアプリ、そして回答が判定とWebhookにどのように反映されるかを説明します。

> [!WARNING]
>
> Diditはステップを表示し、回答を記録します。お客様のユーザー体験が、事業に適用される生体情報関連の法律を満たしているかどうかは、お客様が判断してください。このページは法的助言ではありません。実装については顧問弁護士に確認してください。

## ステップが表示されるタイミング

次の両方が当てはまる場合に、セッションで同意ステップが表示されます。

1. **ワークフローが顔を撮影する。** ライブネスチェック、顔照合、年齢推定のいずれかのステップ、本人確認ステップが撮影するフロントカメラの自撮り(オフにしていない場合)、またはセッション全体の動画録画。
2. **アプリケーションの同意モードが要求している。** **自動**モードでは、以下の[トリガー](#自動モードでステップが表示されるトリガー)のいずれかに該当する場合です。**常に**モードでは、顔を撮影するすべてのセッションで求められます。

ステップは、最初の顔撮影の前に表示されます。対象の州が示されるのが本人確認書類だけの場合は、書類の撮影の直後、自撮りの前に表示され、本人が同意するまで、書類の撮影画像から顔の形状データが計算されることはありません。

Diditは、本人がフローを開いたときに要件を確認し、該当するまで各ステップでも再び確認します。セッションで同意が必要になると、その後も必要な状態が続きます。

### 同意モード

モードは、コンソールのアプリケーションの**設定 > データとプライバシー > 生体データの同意**で選択します。変更はすべて[監査ログ](https://docs.didit.me/console/audit-logs.md)に記録されます。

| モード | 動作 |
| - | - |
| **自動**(デフォルト、推奨) | [トリガー](#自動モードでステップが表示されるトリガー)に該当する場合にのみステップを表示します。それ以外の人には、標準の1行の通知が表示されます。 |
| **常に** | 顔を撮影されるすべての人に、場所を問わずステップを表示します。判定には`trigger: "forced"`が記録されます。 |
| **表示しない** | Diditはステップを一切表示しません。州法で同意が必要な場合は、自撮りの前にお客様自身が同意を取得し、記録を保管します。 |

### 自動モードでステップが表示されるトリガー

Diditは次のルールを順に確認し、最初に該当したものを`biometric_consent.trigger`に記録します。

| トリガー | 該当する条件 |
| - | - |
| `declared_state` | セッション作成時に、対象の州を申告した場合: `user_state`、または`expected_details`内の米国の住所。 |
| `ip_state` | 本人のIPがイリノイ、テキサス、コロラドのいずれかにあると判定された場合。 |
| `ip_unknown` | 本人が米国にいるとみられる(米国のIP、米国の書類、または送信された米国の情報)が、州を特定できない場合: IPが米国内で州が不明、または位置を特定できないが、お客様の情報や書類から本人が米国にいると判断される場合。 |
| `document_issuer` | 書類の撮影時に読み取った本人確認書類が、対象の州によって発行されたものである場合。 |

**VPN、プロキシ、ホスティングネットワークだけで確認が求められることはありません。** DiditはそのIPを他のIPと同様に判定します。イリノイ、テキサス、コロラドのIPであればステップが表示され、それ以外の場所であれば表示されません。ステップが求められるのは、対象の州であることを示す明確な証拠(IP、IDを発行した州、申告された州)がある場合、または本人が州不明のまま米国にいると判断される場合(`ip_unknown`)のみです。対象の州にいる人が、別の場所に出口を持つVPNを使い、対象の州が発行していないIDを提示した場合は、確認は求められません。そのケースを対象にする必要がある場合は、**常に**モードを使うか、`user_state`を送信してください。

あと2つの値は、同意が求められた理由ではなく、セッションの同意がどう処理されたかを示します。

| トリガー | 意味 |
| - | - |
| `forced` | アプリケーションのモードが**常に**です。 |
| `customer_collected` | セッション作成時に、すでに取得済みの同意を送信しました(後述)。 |

## すでに把握している情報をDiditに伝える

[セッションの作成](https://docs.didit.me/sessions-api/create-session.md)には、このための任意のフィールドが2つあります。

| フィールド | 内容 |
| - | - |
| `user_state` | 本人の居住地がわかっている場合に指定します。ISO 3166-2の下位区分コード(`US-IL`、`ES-M`)、または米国の州コードか州名(`IL`、`Illinois`)です。対象の州の場合は、`trigger: "declared_state"`でステップが表示されます。不明な値は`400`を返します。 |
| `biometric_consent` | すでに取得済みの同意: `{ "given_at": "<ISO 8601>", "text_version": "<your version id>" }`。フローは再度確認せず、判定には`trigger: "customer_collected"`とともに`status: "given"`が記録されます。`given_at`に未来の日時は指定できません。 |

```json theme={null}
{
  "workflow_id": "YOUR_WORKFLOW_ID",
  "vendor_data": "user-42",
  "user_state": "US-IL",
  "biometric_consent": {
    "given_at": "2026-10-13T09:12:00Z",
    "text_version": "consent-v3"
  }
}
```

## ステップを表示するアプリ

ステップは、それを表示できるアプリで必要になります。Diditは、アプリが行うリクエストごとにこれを判断します。

| 本人が認証する場所 | ステップの表示 |
| - | - |
| ホスト型の本人確認フロー: ブラウザー、[Web SDK](https://docs.didit.me/ja/integration/web-sdks/overview.md)、またはWebView | あり |
| [ネイティブSDK](https://docs.didit.me/ja/integration/native-sdks/overview.md) 4.10.0以降(iOS、Android、およびネイティブ4.10.0以降を同梱するReact NativeまたはFlutterのリリース) | あり |
| 4.10.0未満のネイティブSDK、またはバージョンを報告しないもの | なし |

### 4.10.0未満のネイティブSDK

4.10.0より前にリリースされたネイティブSDKは同意ステップを認識しないため、Diditがこれらに同意を求めることはありません。本人確認はこれまでとまったく同じように実行されます。自撮りやその他の顔撮影は受け付けられて処理され、セッションは通常どおり判定に進みます。

Diditは、与えられていない同意を記録することはありません。セッションで同意が必要だったのに、古いSDKが顔を撮影した場合、判定には次のように表示されます。

```json theme={null}
"biometric_consent": {
  "required": true,
  "trigger": "ip_state",
  "status": "pending",
  "given_at": null,
  "reason": "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"
}
```

> [!WARNING]
>
> **イリノイ、テキサス、コロラドの人をネイティブアプリで認証する場合は、ネイティブSDK 4.10.0以降にアップグレードしてください。** アップグレードするまで、これらのセッションは明示的な同意なしに完了し、自撮りの前に同意を取得する責任はお客様にあります。

本人が同じセッションをホスト型フローで続ける場合(別の端末、または一部のライブネスの種類でアプリが開くWebView)、ホスト型フローがステップを表示し、本人が回答するまでそこでは顔を撮影しません。そこで与えられた同意には、すでに同意なしで顔が撮影されているため、`reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"`が残ります。

## 本人に表示される内容

ステップでは、何が収集され、なぜ収集され、誰が保有し、どれくらいの期間保管されるかが本人に示され、[生体データポリシー](https://didit.me/legal/biometric-data-policy)へのリンクが表示されます。ボタンは**同意して続行**の1つだけで、本人が同意のチェックボックスをオンにするまで無効のままです。

Diditは回答を証拠として保存します。回答した日時、表示された文面のバージョンとハッシュ、言語、ワークフローのステップ、リクエストのIP、位置情報、ユーザーエージェントです。本人が同意すると、その回答は確定します。

## 本人が同意しない場合

このステップには拒否ボタンがありません。同意したくない人はフローを離脱します。顔は撮影されず、セッションは、本人が完了しなかった他のセッションと同様に`Abandoned`で終了します([検証ステータス](https://docs.didit.me/integration/verification-statuses.md)をご覧ください)。別の認証方法を案内してください。

### APIでの同意の拒否

判定には、`declined`ステータスと`BIOMETRIC_CONSENT_DECLINED`という理由がAPIの値として残ります。現在、Diditの画面に拒否を選べるものはないため、ホスト型フローとネイティブSDKが拒否を記録することはありません。拒否が記録されたセッションは次のようになります。

* `Declined`で終了し、他の拒否と同様に`status.updated` Webhookが発火します。
* `biometric_consent.status`が`declined`、`reason`と`decline_reason`が`BIOMETRIC_CONSENT_DECLINED`、`declined_at`に時刻が入ります。
* 拒否のあとは顔を撮影しません。セッションがすでに保持しているすべての顔画像と顔テンプレートが削除されます。自撮り、書類撮影時のフロントカメラの自撮り、書類の顔写真の顔の切り抜き、ライブネスとセッション全体の動画が対象です。`face_data_deleted_at`に削除された時刻が記録されます。判定ではそれらが返されなくなり、削除は元に戻せません。
* 書類の画像と、そこから読み取ったデータは保持されます。拒否はこれらに影響しません。

## 判定とWebhookでの扱い

すべてのユーザー認証の判定には、[セッションの取得](https://docs.didit.me/sessions-api/retrieve-session.md)と、[セッションのWebhook](https://docs.didit.me/integration/webhooks.md)の`decision`に、`biometric_consent`オブジェクトが含まれます。セッションが一度も評価されなかった場合(たとえば、顔撮影のないワークフロー)は`null`です。

| `status` | 意味 |
| - | - |
| `not_required` | セッションで同意は必要ありませんでした。 |
| `pending` | 同意が必要で、与えられていません。古いSDKなのか、本人がまだ回答していないのかは`reason`で判別します。 |
| `given` | 本人がフロー内で同意した、または作成時にお客様が`biometric_consent`を送信しました。 |
| `declined` | 拒否が記録され、セッションは`Declined`で終了しました。現在、Diditの画面に拒否を選べるものはありません([上記](#apiでの同意の拒否)をご覧ください)。 |

| `reason` | 意味 |
| - | - |
| `BIOMETRIC_CONSENT_UNSUPPORTED_SDK` | 4.10.0未満のネイティブSDK、またはバージョンを報告しないものが、ステップなしで顔を撮影しました。 |
| `BIOMETRIC_CONSENT_DECLINED` | 拒否が記録されました。現在、Diditの画面に拒否を選べるものはありません。 |
| `null` | 説明すべきことはありません。セッションで同意が不要だった場合は、常に`null`です。 |

ホスト型フローで本人が同意したセッションの例です。

```json theme={null}
"biometric_consent": {
  "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",
  "locale": "en",
  "policy_url": "https://didit.me/legal/biometric-data-policy",
  "step": "LIVENESS",
  "ip_address": "198.51.100.23",
  "ip_country_code": "ES",
  "detected_ip_address": "198.51.100.23",
  "detected_country_code": "ES",
  "jurisdictions": ["IL"],
  "retention_months": 36,
  "reason": null,
  "decline_reason": null,
  "face_data_deleted_at": null
}
```

この例は短縮したものです。すべてのフィールドと型は、[データモデル](https://docs.didit.me/reference/data-models.md#biometric-consent)に記載されています。

## 関連ドキュメント

* [セッションの作成](https://docs.didit.me/sessions-api/create-session.md): `user_state`と`biometric_consent`。
* [セッションの取得](https://docs.didit.me/sessions-api/retrieve-session.md): `biometric_consent`を含む判定。
* [ネイティブSDK](https://docs.didit.me/ja/integration/native-sdks/overview.md): バージョンとアップグレード手順。
* [セキュリティとコンプライアンス](https://docs.didit.me/ja/getting-started/security-compliance.md): 本人確認フローにおけるお客様の責任。


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