> ## 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 प्रेक्षण उपलब्ध रहते हैं; परिणाम आने तक, या जब पता सार्वजनिक न हो, तो जियोलोकेशन फ़ील्ड खाली हो सकते हैं।
यदि आपका वर्कफ़्लो परिणाम निर्धारित करने या किसी आगामी चरण को चुनने के लिए इन जाँचों का उपयोग करता है, तो आवश्यक परिणाम उपलब्ध होने तक सत्र `In Progress` बना रहता है।
यदि सीमित पुनः प्रयासों के बाद भी आवश्यक विश्लेषण अनुपलब्ध रहता है, तो सत्र मैन्युअल निर्णय के लिए `In Review` में चला जाता है।
वैकल्पिक संवर्धन विफलताएँ प्रक्रिया पूरी होने से नहीं रोकती हैं, और मैन्युअल निर्णय सर्वोपरि रहते हैं।
यह निम्नलिखित उत्पन्न करता है:

* सार्वजनिक IP से प्राप्त एक **IP जियोलोकेशन** ब्लॉक (देश, राज्य, शहर, अक्षांश/देशांतर, समय क्षेत्र)।
* मास्किंग के प्रयासों (VPN, Tor एग्ज़िट नोड्स, होस्टिंग प्रदाता, एनोनिमाइज़र) का पता लगाने के लिए **नेटवर्क-जोखिम फ़्लैग** — `is_vpn_or_tor` और `is_data_center`।
* **क्रॉस-डॉक्यूमेंट दूरी की गणना** — IP स्थान, पहचान दस्तावेज़ के स्थान, और पते का प्रमाण दस्तावेज़ के स्थान के बीच सीधी रेखा में किलोमीटर दूरी।
* **क्रॉस-सत्र मिलान** — जब वही IP पता या डिवाइस पहचान अलग-अलग उपयोगकर्ताओं के सत्रों में दिखाई देती है (`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 रिस्पॉन्स में कहाँ दिखाई देता है

निर्णय endpoint `GET /v3/session/{sessionId}/decision/` में डिवाइस और IP विश्लेषण को बहुवचन ऐरे **`ip_analyses[]`** के रूप में लौटाता है। प्रविष्टियाँ (`node_id`, `ip_address`, `device_fingerprint`) पर आधारित डीडुप्लिकेट किए गए `Location` प्रेक्षण हैं — जब सत्र के दौरान उपयोगकर्ता का IP या डिवाइस बदलता है, तो एक ही नोड कई प्रविष्टियाँ दे सकता है।

```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/hi/reference/data-models.md#ip-विश्लेषण) देखें।

## स्कीमा

कैनोनिकल स्कीमा के लिए [डेटा मॉडल संदर्भ में डिवाइस और IP विश्लेषण](https://docs.didit.me/hi/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` | कम से कम एक ट्रिगर हुई चेतावनी समीक्षा के रूप में कॉन्फ़िगर की गई है ([चेतावनियाँ](https://docs.didit.me/hi/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/hi/core-technology/ip-analysis/warnings-ip-analysis.md) — प्रत्येक चेतावनी कोड जो IP विश्लेषण जारी कर सकता है
* [डिवाइस और IP विश्लेषण अवलोकन](https://docs.didit.me/hi/core-technology/ip-analysis/overview.md) — प्रत्येक ब्लॉक क्या मापता है
* [डेटा मॉडल — IP विश्लेषण](https://docs.didit.me/hi/reference/data-models.md#ip-विश्लेषण) — कैनोनिकल स्कीमा
* [Webhook](https://docs.didit.me/hi/integration/webhooks.md) — `status.updated` में वही IP विश्लेषण payload होता है


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