> ## 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 जोखिम API: भू-स्थान, VPN और डेटासेंटर संकेत

> Didit के साथ IP पते का जोखिम स्कोर करें: भू-स्थान, ISP, VPN/Tor, डेटासेंटर, खतरे और दावा किए गए देश के मिलान संकेतों सहित।

`POST /v3/ip/risk/` का उपयोग तब करें जब आपके बैकएंड के पास पहले से IP पता हो और आपको सर्वर-से-सर्वर जोखिम निर्णय चाहिए।

रिस्पॉन्स में जियोलोकेशन, नेटवर्क स्वामित्व, VPN/Tor और डेटा-सेंटर फ़्लैग, थ्रेट डेटा शामिल होते हैं, और जब आप दावा किया गया देश भेजते हैं तो `country_mismatch` भी शामिल होता है।

## रिस्पॉन्स की व्याख्या करें

* `status` का मान `In Review` होता है जब हल किया गया देश `claimed_country` से मेल नहीं खाता, या जब पता VPN, Tor या डेटा-सेंटर इन्फ़्रास्ट्रक्चर से जुड़ा हो। अन्यथा इसका मान `Approved` होता है।
* `ip.ip_country_code` में हल किया गया देश कोड होता है। देशों की तुलना कच्चे स्ट्रिंग मानों से स्वयं करने के बजाय `ip.country_mismatch` के माध्यम से करें।
* `ip.latitude` और `ip.longitude` अनुमानित नेटवर्क जियोलोकेशन हैं, डिवाइस का सटीक स्थान नहीं।
* `ip.is_vpn_or_tor`, `ip.is_data_center`, `ip.proxy_type` और `ip.threat` नेटवर्क-जोखिम के साक्ष्य देते हैं।
* `ip.asn_number`, `ip.asn_organization`, `ip.connection_type` और `ip.carrier` उस नेटवर्क का वर्णन करते हैं जिससे पता जुड़ा है।
* `request_id` API सत्र आईडी है। यदि आपको परिणाम को बाद के webhooks या कंसोल गतिविधि से जोड़ना है, तो इसे `vendor_data` के साथ संग्रहीत करें।

> [!NOTE]
>
> IP एनरिचमेंट सर्वोत्तम प्रयास पर आधारित है। यदि कोई भी एनरिचमेंट स्रोत उपयोगी डेटा नहीं लौटाता, तो endpoint `ip.ip_address: null`, `ip.country_mismatch: null` और खाली `ip.threat` ऑब्जेक्ट के साथ एक स्वीकृत रिस्पॉन्स लौटाता है। व्यक्तिगत एनरिचमेंट फ़ील्ड भी अनुपलब्ध होने पर `null` हो सकते हैं।

## डिवाइस इंटेलिजेंस

IP Risk API एक विशुद्ध सर्वर-से-सर्वर endpoint है। डिवाइस फ़िंगरप्रिंटिंग विशुद्ध सर्वर-से-सर्वर endpoint नहीं है, क्योंकि कोई बैकएंड अकेले ब्राउज़र या डिवाइस सिग्नल नहीं देख सकता। होस्टेड फ़्लो और SDK सत्रों के लिए, Didit सत्र के रिस्पॉन्स में पहले से एकत्र किए गए डिवाइस फ़ील्ड उपलब्ध कराता है, जिनमें `device_fingerprint`, डिवाइस और ब्राउज़र का विवरण, `user_agent`, कच्चा डिवाइस डेटा और क्रॉस-सत्र मिलान शामिल हैं।

## सैंडबॉक्स व्यवहार

सैंडबॉक्स कुंजियाँ अनुरोध को सत्यापित करती हैं और नियतात्मक, स्वीकृत डेटा लौटाती हैं। वे बाहरी इंटेलिजेंस सेवाओं से संपर्क नहीं करतीं, क्रेडिट खर्च नहीं करतीं, कोई सत्र नहीं बनातीं, और Networks में योगदान नहीं देतीं।

## बिलिंग

IP Risk API कॉल की लागत सूची मूल्य पर \$0.02 है। लाइव अनुरोध तब बिल योग्य हो जाता है जब लुकअप शुरू होता है।


## OpenAPI

````yaml hi/openapi-25.json POST /v3/ip/risk/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: पहचान सत्यापन API। x-api-key हेडर के साथ प्रमाणीकृत करें।
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/ip/risk/:
    post:
      tags:
        - Standalone APIs
      summary: IP पते का जोखिम स्कोर निकालें
      description: >-
        दिए गए IP पते के लिए जियोलोकेशन, नेटवर्क स्वामित्व, VPN/Tor और
        डेटा-सेंटर फ़्लैग, थ्रेट डेटा और `country_mismatch` लौटाएं। यह endpoint
        एक API सत्र बनाता है और इसकी id को `request_id` के रूप में लौटाता है।


        **निर्णय।** जब निर्धारित देश `claimed_country` के साथ मेल नहीं खाता, या
        जब पता VPN, Tor या डेटा-सेंटर इंफ़्रास्ट्रक्चर से जुड़ा होता है, तो
        `status` `In Review` होता है। अन्यथा यह `Approved` होता है।


        **बेस्ट एफ़र्ट।** IP एनरिचमेंट बेस्ट एफ़र्ट है। यदि कोई एनरिचमेंट स्रोत
        उपयोग योग्य डेटा नहीं लौटाता है, तो endpoint `ip.ip_address: null`,
        `ip.country_mismatch: null`, और एक खाली `ip.threat` ऑब्जेक्ट के साथ
        स्वीकृत रिस्पॉन्स लौटाता है।


        **बिलिंग।** लाइव कॉल IP Risk API मूल्य निर्धारण का उपयोग करती हैं। लुकअप
        शुरू होते ही अनुरोध बिल योग्य हो जाता है।


        **सैंडबॉक्स।** सैंडबॉक्स कुंजियाँ क्रेडिट खर्च किए बिना, सत्र बनाए बिना
        या Networks में योगदान दिए बिना अनुरोध को मान्य करती हैं और
        डिटरमिनिस्टिक स्वीकृत डेटा लौटाती हैं।


        **प्रमाणीकरण।** अपने एप्लिकेशन की API कुंजी `x-api-key` में भेजें।
        अनुपलब्ध या अमान्य क्रेडेंशियल `403` लौटाते हैं - यह API कभी भी `401`
        नहीं लौटाती है।


        **रेट लिमिट।** POST/PATCH/DELETE endpoints पर प्रति API कुंजी प्रति मिनट
        300 अनुरोधों का साझा राइट बजट (लेन-देन निर्माण और इवेंट इनजेशन के लिए
        600 अनुरोधों का अलग बजट है)।
      operationId: post_v3ip_risk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IPRiskRequest'
            examples:
              Minimal:
                summary: डिफ़ॉल्ट मानों के साथ किसी पते का स्कोर निकालें
                value:
                  ip_address: 8.8.8.8
              With claimed country:
                summary: बेमेल का पता लगाने के लिए दावा किए गए देश के साथ स्कोरिंग करें
                value:
                  ip_address: 8.8.8.8
                  claimed_country: ESP
                  user_agent: >-
                    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
                    AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4
                    Safari/605.1.15
                  vendor_data: lead-123
      responses:
        '200':
          description: >-
            जोखिम मूल्यांकन पूरा हो गया। निर्णय के लिए `status` का निरीक्षण
            करें; पूर्ण लुकअप के लिए HTTP हमेशा `200` होता है।
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPRiskResponse'
              examples:
                Clean residential IP:
                  summary: आवासीय पता, दावा किया गया देश मेल खाता है
                  value:
                    request_id: 9a96ed2a-721e-4b86-8cbf-d61eda529279
                    status: Approved
                    ip:
                      status: Approved
                      ip_address: 192.0.2.10
                      ip_country: Spain
                      ip_country_code: ES
                      ip_state: Madrid
                      ip_city: Madrid
                      latitude: 40.4168
                      longitude: -3.7038
                      isp: Example Telecom
                      organization: Example Telecom SA
                      is_vpn_or_tor: false
                      is_data_center: false
                      time_zone: Europe/Madrid
                      time_zone_offset: '+0200'
                      asn_number: 3352
                      asn_organization: EXAMPLE-TELECOM
                      connection_type: broadband
                      carrier: Example Telecom
                      proxy_type: null
                      claimed_country: ESP
                      country_mismatch: false
                      threat: {}
                    vendor_data: lead-123
                    metadata: null
                    created_at: '2026-09-01T10:30:00.123456+00:00'
                Datacenter mismatch:
                  summary: डेटा-सेंटर का पता जो दावा किए गए देश के साथ विरोधाभासी है
                  value:
                    request_id: 5b1d4e9a-3c7b-4f8e-9a2d-1b0c9d8e7f6a
                    status: In Review
                    ip:
                      status: In Review
                      ip_address: 8.8.8.8
                      ip_country: United States
                      ip_country_code: US
                      ip_state: California
                      ip_city: Mountain View
                      latitude: 37.386
                      longitude: -122.0838
                      isp: Google
                      organization: Google LLC
                      is_vpn_or_tor: true
                      is_data_center: true
                      time_zone: America/Los_Angeles
                      time_zone_offset: '-0700'
                      asn_number: 15169
                      asn_organization: GOOGLE, US
                      connection_type: hosting
                      carrier: null
                      proxy_type: VPN
                      claimed_country: ESP
                      country_mismatch: true
                      threat:
                        is_proxy: true
                        is_data_center: true
                        is_tor: false
                    vendor_data: lead-126
                    metadata: null
                    created_at: '2026-09-01T10:30:00.123456+00:00'
        '400':
          $ref: '#/components/responses/IPRiskValidationError'
        '403':
          $ref: '#/components/responses/RiskPermissionDenied'
        '429':
          $ref: '#/components/responses/RateLimitedWrite'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/ip/risk/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "ip_address": "8.8.8.8",
                "claimed_country": "ESP",
                "user_agent": "Mozilla/5.0",
                "vendor_data": "lead-123"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.ip.assess_risk(
                ip_address="8.8.8.8",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.ip.assessRisk({
              ip_address: "8.8.8.8",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IP.AssessRisk(ctx, didit.IPRiskRequest{\n\tIPAddress: \"8.8.8.8\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;
            import me.didit.types.IPRiskRequest;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            var result = client.ip().assessRisk(IPRiskRequest.builder()
                    .ipAddress("8.8.8.8")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->ip->assessRisk([
                'ip_address' => '8.8.8.8',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.ip.assess_risk(ip_address: "8.8.8.8")
            puts result.to_h
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            var result = await client.Ip.AssessRiskAsync(new IPRiskRequest
            {
                IpAddress = "8.8.8.8",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    IPRiskRequest:
      type: object
      required:
        - ip_address
      properties:
        ip_address:
          type: string
          format: ip
          description: स्कोर करने के लिए IPv4 या IPv6 पता।
          example: 8.8.8.8
        claimed_country:
          type: string
          maxLength: 3
          description: >-
            उपयोगकर्ता या सत्र द्वारा दावा किया गया वैकल्पिक ISO 3166-1 alpha-2
            या alpha-3 देश। `country_mismatch` की गणना के लिए उपयोग किया जाता
            है।
          example: ESP
        user_agent:
          type: string
          maxLength: 512
          description: >-
            आपके बैकएंड द्वारा देखा गया यूज़र एजेंट। अनुरोध संदर्भ के रूप में
            संग्रहीत; यह डिवाइस फ़िंगरप्रिंटिंग प्रदान नहीं करता है।
        vendor_data:
          type: string
          description: >-
            इस अनुरोध के लिए आपका स्थिर संदर्भ। API सत्र पर संग्रहीत और
            रिस्पॉन्स में लौटाया गया।
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            आपका गैर-संवेदनशील JSON मेटाडेटा। API सत्र पर संग्रहीत और रिस्पॉन्स
            में दोहराया गया।
    IPRiskResponse:
      type: object
      required:
        - request_id
        - status
        - created_at
      properties:
        request_id:
          type: string
          format: uuid
          description: >-
            इस अनुरोध के लिए बनाए गए API सत्र की Id। यदि आपको बाद के webhook
            इवेंट या कंसोल गतिविधि के साथ परिणाम को सहसंबंधित करने की आवश्यकता
            है, तो इसे `vendor_data` के साथ संग्रहीत करें।
        status:
          type: string
          enum:
            - Approved
            - In Review
          description: >-
            इस API सत्र के लिए निर्णय: नेटवर्क या देश-बेमेल जोखिम पर `In
            Review`, अन्यथा `Approved`।
        vendor_data:
          type: string
          nullable: true
          description: >-
            आपके द्वारा भेजे गए `vendor_data` का इको, जब आपने इसे नहीं भेजा हो
            तो `null`।
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            आपके द्वारा भेजे गए `metadata` का इको, जब आपने इसे नहीं भेजा हो तो
            `null`।
        created_at:
          type: string
          format: date-time
          description: इस रिस्पॉन्स का टाइमस्टैम्प।
        ip:
          type: object
          description: >-
            IP जोखिम परिणाम। अलग-अलग एनरिचमेंट फ़ील्ड `null` हो सकते हैं जब
            लुकअप से कोई उपयोगी डेटा न मिला हो।
          required:
            - status
            - threat
          properties:
            status:
              type: string
              enum:
                - Approved
                - In Review
              description: >-
                `In Review` जब निर्धारित देश का `claimed_country` के साथ टकराव
                हो, या जब पता VPN, Tor, या डेटा-सेंटर इंफ्रास्ट्रक्चर से जुड़ा
                हो। अन्यथा `Approved`।
            ip_address:
              type: string
              nullable: true
              description: >-
                स्कोर किया गया पता। जब किसी संवर्धन स्रोत ने उपयोगी डेटा नहीं
                लौटाया तो `null`।
            ip_country:
              type: string
              nullable: true
              description: रिज़ॉल्व किया गया देश का नाम।
            ip_country_code:
              type: string
              nullable: true
              description: >-
                रिज़ॉल्व किया गया देश कोड। देशों के रॉ स्ट्रिंग्स की स्वयं तुलना
                करने के बजाय `country_mismatch` के माध्यम से तुलना करें।
            ip_state:
              type: string
              nullable: true
              description: रिज़ॉल्व किया गया राज्य या क्षेत्र।
            ip_city:
              type: string
              nullable: true
              description: रिज़ॉल्व किया गया शहर।
            latitude:
              type: number
              nullable: true
              description: अनुमानित नेटवर्क भौगोलिक स्थिति, कोई सटीक डिवाइस स्थान नहीं।
            longitude:
              type: number
              nullable: true
              description: अनुमानित नेटवर्क भौगोलिक स्थिति, कोई सटीक डिवाइस स्थान नहीं।
            isp:
              type: string
              nullable: true
              description: पते पर सेवा देने वाला इंटरनेट सेवा प्रदाता।
            organization:
              type: string
              nullable: true
              description: एड्रेस ब्लॉक का स्वामित्व रखने वाला संगठन।
            is_vpn_or_tor:
              type: boolean
              nullable: true
              description: '`true` जब पता VPN या Tor इंफ्रास्ट्रक्चर से संबद्ध हो।'
            is_data_center:
              type: boolean
              nullable: true
              description: '`true` जब पता किसी होस्टिंग या डेटा-सेंटर नेटवर्क का हो।'
            time_zone:
              type: string
              nullable: true
              description: हल किए गए स्थान का टाइम ज़ोन।
            time_zone_offset:
              type: string
              nullable: true
              description: निर्धारित स्थान का UTC ऑफ़सेट।
            asn_number:
              type: number
              nullable: true
              description: ऑटोनोमस सिस्टम नंबर।
            asn_organization:
              type: string
              nullable: true
              description: ऑटोनॉमस सिस्टम को संचालित करने वाला संगठन।
            connection_type:
              type: string
              nullable: true
              description: कनेक्शन वर्गीकरण (उदा., `cellular`, `hosting`)।
            carrier:
              type: string
              nullable: true
              description: जब पता मोबाइल नेटवर्क पर हो, तब मोबाइल कैरियर।
            proxy_type:
              type: string
              nullable: true
              description: जब पता किसी प्रॉक्सी के पीछे हो तो प्रॉक्सी वर्गीकरण।
            claimed_country:
              type: string
              nullable: true
              description: आपके द्वारा भेजे गए `claimed_country` का इको।
            country_mismatch:
              type: boolean
              nullable: true
              description: >-
                `true` जब हल किया गया देश `claimed_country` से भिन्न हो। `null`
                जब कोई संवर्धन डेटा या कोई दावा किया गया देश उपलब्ध न हो।
            threat:
              type: object
              additionalProperties: true
              description: >-
                एनरिचमेंट स्रोत से फ़्री-फ़ॉर्म नेटवर्क-खतरे के साक्ष्य (उदा.,
                `is_proxy`, `is_tor`)। कोई एनरिचमेंट डेटा उपलब्ध न होने पर खाली
                ऑब्जेक्ट। इसे नैदानिक विवरण मानें, स्थिर अनुबंध नहीं।
  responses:
    IPRiskValidationError:
      description: अनुरोध सत्यापन विफल रहा।
      content:
        application/json:
          examples:
            Missing IP address:
              summary: IP पता मौजूद नहीं है
              value:
                ip_address:
                  - This field is required.
            Invalid IP address:
              summary: अमान्य IP पता
              value:
                ip_address:
                  - Enter a valid IPv4 or IPv6 address.
            Country hint too long:
              summary: देश संकेत बहुत लंबा है
              value:
                claimed_country:
                  - Ensure this field has no more than 3 characters.
    RiskPermissionDenied:
      description: >-
        API कुंजी अनुपलब्ध या अमान्य है, या संगठन लाइव लुकअप को कवर नहीं कर सकता
        है। यह API कभी भी `401` नहीं लौटाता है।
      content:
        application/json:
          examples:
            Missing or invalid API key:
              summary: कोई `x-api-key` हेडर नहीं, या कुंजी अमान्य या निरस्त है
              value:
                detail: You do not have permission to perform this action.
            Not enough credits:
              summary: संगठन का बैलेंस लुकअप की कीमत को कवर नहीं कर सकता
              value:
                error: You don't have enough credits to perform this request.
    RateLimitedWrite:
      description: >-
        प्रति API कुंजी प्रति मिनट 300 अनुरोधों की साझा लिखने की सीमा पार हो गई।
        पुनः प्रयास करने से पहले `Retry-After` का पालन करें।
      content:
        application/json:
          schema:
            type: object
            required:
              - detail
            properties:
              detail:
                type: string
          example:
            detail: >-
              Write request rate limit exceeded. You can make up to 300 requests
              per minute.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        आपकी एप्लिकेशन की API कुंजी, Business Console में Developers -> API keys
        से। प्राथमिक कुंजी के पास पूर्ण एक्सेस होता है। एक नामित कुंजी को स्कोप
        किया जा सकता है: प्रति संसाधन none, read या write, कुछ वर्कफ़्लो या
        स्वीकृत सत्रों तक सीमित, IP पतों की सूची तक सीमित, और समाप्ति तिथि तक
        सीमित। 401 का अर्थ है कि कुंजी गलत है, निरस्त कर दी गई है या उसकी
        समय-सीमा समाप्त हो गई है; 403 का अर्थ है कि कोई कुंजी नहीं भेजी गई थी,
        कुंजी के पास इस संसाधन या कार्रवाई का एक्सेस नहीं है, या अनुरोध उसकी IP
        सूची से बाहर के पते से आया था; सत्र रूट पर 404 का अर्थ है कि सत्र कुंजी
        के वर्कफ़्लो या स्थितियों से बाहर है। मीडिया एक्सेस के बिना एक कुंजी को
        छवि, वीडियो और PDF URL null के रूप में प्राप्त होते हैं, और सत्र write
        के बिना एक कुंजी को सत्र लिंक और token null के रूप में प्राप्त होते हैं।
        देखें https://docs.didit.me/console/api-keys।

````

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