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

# デバイス・IP分析レポート：フィールドと一致結果

> Didit のデバイス・IP分析レポートの解析方法。位置情報、デバイスフィンガープリント、VPN/Tor/プロキシのフラグ、書類とIPの距離、重複デバイスの一致を確認できます。

## 概要

デバイス・IP分析は、IPジオロケーション、デバイスフィンガープリント、ブラウザ/OS、ネットワーク種別によって、すべてのセッションをプロファイリングします。
ジオロケーション、ネットワークリスクのエンリッチメント、デバイス照合、リモートでのデバイス完全性チェックは、ユーザーが認証を進めている間に非同期で実行されます。
分析の保留中もデバイスとIPの観測データは利用できます。ジオロケーションのフィールドは、結果が届くまで、またはIPアドレスが公開アドレスでない場合は空になることがあります。
ワークフローでこれらのチェックを使って結果を判定したり、次のステップを選択したりする場合、必要な結果が揃うまでセッションは`In Progress`のままです。
上限付きの再試行を行っても必要な分析結果が得られない場合、セッションは手動判定のため`In Review`に移行します。
任意のエンリッチメントが失敗しても完了は妨げられず、手動判定が引き続き最終的な判定として扱われます。
生成される情報は次のとおりです。

* 公開IPから導出される**IPジオロケーション**ブロック（国、州、市区町村、緯度/経度、タイムゾーン）。
* **ネットワークリスクフラグ**（`is_vpn_or_tor`と`is_data_center`）。偽装の試み（VPN、Torの出口ノード、ホスティングプロバイダー、匿名化サービス）を検知します。
* **書類間の距離計算**：IPの位置、身分証明書の位置、住所証明書類の位置の間の直線距離（km）。
* **セッション間の一致**：同じIPアドレスまたはデバイスID情報が、異なるユーザー（`vendor_data`でグループ化）に属するセッション間で出現した場合。
* **デバイスフィンガープリントの復元**：ユーザーがストレージを消去したり、シークレットモードを切り替えたり、アプリを再インストールしたりした後でもセッションを紐付ける、高信頼度の復元シグナル。

![Diditのデバイス・IP分析レポートのスクリーンショット。ジオロケーション、デバイスフィンガープリント、リスクフラグを表示](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/ip-analysis-report.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=5d4877664a7c89384ee32d4a5cb6949b)

## APIレスポンスでの表示箇所

判定エンドポイントは、`GET /v3/session/{sessionId}/decision/`でデバイス・IP分析を配列**`ip_analyses[]`**として返します。各エントリは（`node_id`、`ip_address`、`device_fingerprint`）をキーに重複を除いた`Location`の観測データです。セッションの途中でユーザーのIPやデバイスが変わった場合、1つのノードから複数のエントリが生成されることがあります。

```text theme={null}
GET /v3/session/{sessionId}/decision/
  ──▶ { "ip_analyses": [ { status, node_id, ip_address, ip, id_document, poa_document, warnings, matches, … }, … ] }
```

以下の構造は標準スキーマを反映しています。[データモデル](https://docs.didit.me/ja/reference/data-models.md#ip分析)を参照してください。

## スキーマ

正規スキーマについては、[データモデルリファレンスのデバイス・IP分析](https://docs.didit.me/ja/reference/data-models.md#ip分析)を参照してください。

```typescript theme={null}
interface IPAnalysisV3 {
  status: 'Not Finished' | 'Approved' | 'Declined' | 'In Review' | 'Resub Requested';
  node_id: string | null;

  // Device
  device_brand: string | null;
  device_model: string | null;
  browser_family: string | null;
  os_family: string | null;
  platform: 'mobile' | 'tablet' | 'desktop' | null;
  device_fingerprint: string | null;

  // IP geolocation
  ip_country: string | null;
  ip_country_code: string | null;           // ISO 3166-1 alpha-2
  ip_state: string | null;
  ip_city: string | null;
  latitude: number | null;
  longitude: number | null;
  ip_address: string;
  isp: string | null;
  organization: string | null;
  is_vpn_or_tor: boolean;
  is_data_center: boolean;
  time_zone: string | null;
  time_zone_offset: string | null;

  // Distance blocks — each carries its own location + distances to the other two
  ip: {
    location: { latitude: number; longitude: number } | null;
    distance_from_id_document: number | null;   // km
    distance_from_poa_document: number | null;  // km
  };
  id_document: {
    location: { latitude: number; longitude: number } | null;
    distance_from_ip: number | null;
    distance_from_poa_document: number | null;
  };
  poa_document: {
    location: { latitude: number; longitude: number } | null;
    distance_from_ip: number | null;
    distance_from_id_document: number | null;
  };

  warnings: Warning[];          // see Data Models — Warning object

  // Cross-session matches — up to 5 IP matches + 5 device matches
  matches: IPAnalysisMatch[];
}

interface IPAnalysisMatch {
  session_id: string;                       // matching session UUID
  session_number: number;
  vendor_data: string | null;
  verification_date: string | null;         // "YYYY-MM-DDTHH:MM:SSZ"
  match_type: 'ip_address' | 'device_fingerprint';
  match_source: 'ip_address' | 'persistent_id' | 'legacy_fp' | 'recovered_high';
  matched_value: string | null;             // shared IP, device identifier, or recovered device UUID
  status: string;                           // lifecycle status of the matching session
  is_blocklisted: boolean;                  // currently always false
  api_service: string | null;               // standalone API service; null for workflow sessions
  source: 'session';
  device_info: {
    device_brand: string | null;
    device_model: string | null;
    browser_family: string | null;
    os_family: string | null;
    platform: string | null;
    device_fingerprint: string | null;
  };
  location_info: {
    ip_address: string | null;
    ip_country: string | null;
    ip_country_code: string | null;
    ip_state: string | null;
    ip_city: string | null;
    is_vpn_or_tor: boolean;
    is_data_center: boolean;
  };
  confidence: number;                       // 0–1, = 1 - P(false positive)
  match_mode: 'deterministic' | 'probabilistic' | 'co_occurrence';

  // Present only when match_source = 'recovered_high'
  recovery_similarity?: number;             // cosine similarity, 4 decimals
  tls_ja4_corroborated?: boolean;           // TLS JA4 fingerprints of both observations agree
  recovery_gate_reason?: string;            // e.g. 'hardware_root_match'
}
```

### 一致の意味

`match_source`は一致がどのように得られたかを示し、`confidence`はその一致が*誤り*である可能性に基づくスコアです（`confidence = 1 - P(false positive)`）。

| `match_source` | 意味 | `confidence` | `match_mode` |
| - | - | - | - |
| `ip_address` | 共有IP。同一ネットワーク上に存在することを示すもので、デバイスの同一性を主張するものではありません。 | `0.0` | `co_occurrence` |
| `persistent_id` | 保存済みの永続デバイス識別子との完全一致。 | `1.0` | `deterministic` |
| `legacy_fp` | 従来の`didit-fp-*`デバイスフィンガープリントハッシュ。 | `0.5` | `probabilistic` |
| `recovered_high` | 厳格なハードゲートを通過した後の、フィンガープリントの復元による高信頼度のファジー一致。 | ハードウェアに基づく場合は`1.0`、それ以外は`< 1.0`。TLS JA4とIPの国がそれぞれ独立して一致する場合は引き上げられます | `deterministic`または`probabilistic` |

信頼度の低い復元候補はリスク警告としてのみ表示され、`matches[]`に含まれることはありません。IPの一致とデバイスの一致はそれぞれ最大5件に制限されるため、配列のエントリは最大10件です。

## ステータス値

ステータスは機能レベルの`FeatureStatusChoices`値です。発生した各警告は、ワークフローノードでその警告に設定されたアクションに対応付けられ、最も強いアクションが適用されます。

| 値 | 意味 |
| - | - |
| `Not Finished` | このセッションでIP分析ノードがまだ完了していません（デフォルト）。 |
| `Approved` | 警告が発生していないか、発生したすべての警告が「アクションなし」に設定されています。 |
| `In Review` | 発生した警告の少なくとも1つが「レビュー」に設定されています（[警告](https://docs.didit.me/ja/core-technology/ip-analysis/warnings-ip-analysis.md)を参照）。 |
| `Declined` | ブロックリストの警告（`IP_ADDRESS_IN_BLOCKLIST`または`DEVICE_FINGERPRINT_IN_BLOCKLIST`。常に却下）が発生したか、設定可能な警告がワークフローで「却下」に設定されています。 |
| `Resub Requested` | レビュアーがこのステップの再提出を要求しました。 |

IP分析ノードに設定したカスタムステータスルールにより、結果のステータスをさらに調整できます。

## VPN・プロキシ・Torの検知

`is_vpn_or_tor`と`is_data_center`は、すべてのセッションで返される独立したブール値のフラグです。`is_vpn_or_tor`が`true`の場合、Diditは`PRIVATE_NETWORK_DETECTED`警告も発行するため、チームはワークフローの設定を通じて対応できます。データセンターのみのトラフィック（VPN/Torなし）では`is_data_center=true`が設定されますが、警告は自動的に発行されません。独自のスコアリングにおける追加のシグナルとして活用してください。

## 例

### 承認済み

```json theme={null}
{
  "ip_analyses": [
    {
      "status": "Approved",
      "node_id": "ip-1",
      "device_brand": "Apple",
      "device_model": "iPhone",
      "browser_family": "Mobile Safari",
      "os_family": "iOS",
      "platform": "mobile",
      "device_fingerprint": "didit-fp-8d2c7a91f4b3e042",
      "ip_country": "Spain",
      "ip_country_code": "ES",
      "ip_state": "Barcelona",
      "ip_city": "Barcelona",
      "latitude": 41.4022,
      "longitude": 2.1407,
      "ip_address": "83.50.226.71",
      "isp": "Telefonica",
      "organization": "Telefonica de Espana",
      "is_vpn_or_tor": false,
      "is_data_center": false,
      "time_zone": "Europe/Madrid",
      "time_zone_offset": "+0100",
      "ip": {
        "location": { "latitude": 41.4022, "longitude": 2.1407 },
        "distance_from_id_document": 23.4,
        "distance_from_poa_document": 12.3
      },
      "id_document": {
        "location": { "latitude": 41.2706, "longitude": 1.9770 },
        "distance_from_ip": 23.4,
        "distance_from_poa_document": 18.7
      },
      "poa_document": {
        "location": { "latitude": 41.3128, "longitude": 2.0540 },
        "distance_from_ip": 12.3,
        "distance_from_id_document": 18.7
      },
      "warnings": [],
      "matches": []
    }
  ]
}
```

### 却下 (IPアドレスがブロックリストに一致 + VPN + 重複デバイス)

```json theme={null}
{
  "ip_analyses": [
    {
      "status": "Declined",
      "node_id": "ip-1",
      "device_brand": null,
      "device_model": null,
      "browser_family": "Chrome",
      "os_family": "Linux",
      "platform": "desktop",
      "device_fingerprint": "didit-fp-a13c0d22e8b94471",
      "ip_country": "Netherlands",
      "ip_country_code": "NL",
      "ip_state": "North Holland",
      "ip_city": "Amsterdam",
      "latitude": 52.3676,
      "longitude": 4.9041,
      "ip_address": "45.61.20.5",
      "isp": "Example Hosting",
      "organization": "Example Hosting BV",
      "is_vpn_or_tor": true,
      "is_data_center": true,
      "time_zone": "Europe/Amsterdam",
      "time_zone_offset": "+0100",
      "ip": {
        "location": { "latitude": 52.3676, "longitude": 4.9041 },
        "distance_from_id_document": 1834.2,
        "distance_from_poa_document": 1822.5
      },
      "id_document": {
        "location": { "latitude": 40.4168, "longitude": -3.7038 },
        "distance_from_ip": 1834.2,
        "distance_from_poa_document": 14.0
      },
      "poa_document": {
        "location": { "latitude": 40.5070, "longitude": -3.6720 },
        "distance_from_ip": 1822.5,
        "distance_from_id_document": 14.0
      },
      "warnings": [
        {
          "feature": "LOCATION",
          "risk": "IP_ADDRESS_IN_BLOCKLIST",
          "additional_data": { "ip_address": "45.61.20.5" },
          "log_type": "error",
          "short_description": "IP address in blocklist",
          "long_description": "The IP address used for this session was found in the application's IP blocklist, indicating a known suspicious or forbidden origin.",
          "node_id": "ip-1"
        },
        {
          "feature": "LOCATION",
          "risk": "PRIVATE_NETWORK_DETECTED",
          "additional_data": null,
          "log_type": "warning",
          "short_description": "Private network (VPN/Tor) detected",
          "long_description": "The system detected that the user tried to use a private network (VPN/TOR) to complete the verification process.",
          "node_id": "ip-1"
        },
        {
          "feature": "LOCATION",
          "risk": "COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP",
          "additional_data": { "document_country_code": "ESP", "ip_country_code": "NLD" },
          "log_type": "warning",
          "short_description": "Document country does not match IP country",
          "long_description": "The country from the document does not match the country from the IP address, suggesting a potential mismatch between the document and the user's location.",
          "node_id": "ip-1"
        },
        {
          "feature": "LOCATION",
          "risk": "DUPLICATED_DEVICE_FINGERPRINT",
          "additional_data": {
            "duplicated_session_id": "11111111-2222-3333-4444-555555555555",
            "duplicated_session_number": 1042,
            "api_service": null,
            "match_source": "persistent_id"
          },
          "log_type": "warning",
          "short_description": "Duplicated device fingerprint from another session",
          "long_description": "The same device fingerprint was detected in another session with a different vendor_data, which may indicate multiple identities verified from the same device.",
          "node_id": "ip-1"
        }
      ],
      "matches": [
        {
          "session_id": "11111111-2222-3333-4444-555555555555",
          "session_number": 1042,
          "vendor_data": "user-other",
          "verification_date": "2026-05-28T14:03:21Z",
          "match_type": "device_fingerprint",
          "match_source": "persistent_id",
          "matched_value": "pid_9f1c2b7a8d3e4f50",
          "status": "Declined",
          "is_blocklisted": false,
          "api_service": null,
          "source": "session",
          "device_info": {
            "device_brand": null,
            "device_model": null,
            "browser_family": "Chrome",
            "os_family": "Linux",
            "platform": "desktop",
            "device_fingerprint": "didit-fp-a13c0d22e8b94471"
          },
          "location_info": {
            "ip_address": "45.61.23.99",
            "ip_country": "Netherlands",
            "ip_country_code": "NL",
            "ip_state": "North Holland",
            "ip_city": "Amsterdam",
            "is_vpn_or_tor": true,
            "is_data_center": true
          },
          "confidence": 1.0,
          "match_mode": "deterministic"
        }
      ]
    }
  ]
}
```

## 関連情報

* [デバイス・IP分析の警告](https://docs.didit.me/ja/core-technology/ip-analysis/warnings-ip-analysis.md)：IP分析で出力されるすべての警告コード
* [デバイス・IP分析の概要](https://docs.didit.me/ja/core-technology/ip-analysis/overview.md)：各ブロックが測定する内容
* [データモデル：IP分析](https://docs.didit.me/ja/reference/data-models.md#ip分析)：正規スキーマ
* [Webhook](https://docs.didit.me/ja/integration/webhooks.md)：`status.updated`は同じIP分析ペイロードを含みます


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