> ## 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 Phone Risk: Skor Risiko Nomor Telepon

> Beri skor risiko nomor telepon tanpa mengirim OTP. Operator, jenis saluran, porting, nomor sekali pakai, dan sinyal fraud dalam satu panggilan server-to-server.

Gunakan `POST /v3/phone/risk/` saat Anda memerlukan intelijen telepon sebelum, sebagai pengganti, atau di luar alur OTP.

Endpoint ini tidak mengirim kode ke pengguna. Endpoint ini membuat sesi API, memperkaya nomor tersebut, menerapkan aturan risiko telepon Anda, lalu mengembalikan blok telepon ternormalisasi yang sama dengan yang digunakan Verifikasi Telepon, dalam satu respons sinkron.

Saat permintaan disimpan, Didit juga dapat menggunakan nomor telepon yang sudah dinilai sebagai bukti agregat di **Networks**. Grafik jaringan dapat menampilkan intelijen telepon berisiko tinggi, konteks porting dan jenis saluran pada sinyal telepon yang dibagikan, tetapi grafik tersebut tidak mengungkap nomor telepon mentah kepada organisasi lain.

## Interpretasi respons

* `status` adalah keputusan akhir untuk sesi API ini. Biasanya bernilai `Approved`; evaluasi risiko dapat menghasilkan `In Review` atau `Declined`.
* `phone.full_number` adalah nomor E.164 yang sudah dinormalisasi. `phone.phone_number_prefix` dan `phone.phone_number` memisahkannya menjadi awalan internasional dan nomor nasional.
* `phone.is_disposable` dan `phone.is_virtual` adalah sinyal ya/tidak yang stabil untuk logika aplikasi Anda. Pencarian operator menambahkan `carrier.name` dan `carrier.type` (`mobile`, `voip`, dan sejenisnya).
* `phone.phone_intelligence.score` menggunakan skala risiko 0-100, di mana angka yang lebih tinggi berarti risiko yang lebih tinggi. `phone_type_risk` (`Low`, `Medium`, `High`) dan `phone_trust_index` (kebalikan dari skor) adalah tampilan turunan.
* `phone.phone_intelligence` dan `phone.enrichment` adalah alias kompatibilitas dengan objek ternormalisasi yang sama. Integrasi baru dapat membaca `phone.enrichment`.
* `phone.matches` mencantumkan sesi lain dari aplikasi Anda yang menggunakan nomor yang sama, tetapi oleh pengguna yang berbeda. Gunakan untuk deteksi akun duplikat.
* `request_id` adalah id sesi API. Simpan bersama `vendor_data` jika Anda perlu mengaitkan hasil dengan webhook atau aktivitas konsol berikutnya.

> [!WARNING]
>
> `phone.phone_intelligence` dan `phone.enrichment` merupakan kolom dengan upaya terbaik. Pencarian yang sudah selesai dapat menghilangkan keduanya jika tidak ada data intelijen yang dapat digunakan untuk nomor, negara, atau paket tersebut. Bangun aturan berdasarkan kolom ternormalisasi yang stabil terlebih dahulu, dan perlakukan intelijen yang hilang sebagai "tidak diketahui", bukan "aman".

## Pengaya jejak sosial

Atur `enable_social` ke `true` untuk menambahkan blok `phone_social` ke respons di bawah `phone`: platform daring tempat nomor telepon ini terdaftar, dikelompokkan berdasarkan kategori, beserta jumlah ringkasan dan detail profil apa pun yang dikembalikan mitra data kami.

* `phone.phone_social.profiles_registered` dan `phone.phone_social.profiles_checked` adalah angka utama: platform tempat nomor telepon terkonfirmasi terdaftar, dari seluruh platform yang dievaluasi.
* `phone.phone_social.registered_platforms` dan `phone.phone_social.not_registered_platforms` mencantumkan setiap platform beserta `category` dan `scope`-nya (`global`, atau `local` untuk platform khusus wilayah).
* `phone.phone_social.categories` memberikan jumlah dan rasio terdaftar per kategori, sedangkan `phone.phone_social.profiles` memuat detail profil per platform jika platform tersebut menyediakannya (nama, URL foto, teks deskripsi, status privasi, dan penanda akun bisnis).
* Indeks ringkasan (`digital_footprint_diversity`, `digital_sophistication_index`, `engagement_depth_index`, `subscription_affordability_index`) adalah komposit 0-10. Setiap jumlah dapat bernilai `null` jika pemeriksaan tidak mengembalikan data untuknya.

`profiles_registered: 0` adalah jawaban yang valid, bukan kegagalan: platform-platform tersebut sudah diperiksa dan nomor telepon tidak ditemukan di satu pun dari mereka, yang merupakan sinyal umum identitas sintetis. Endpoint ini tidak mengambil tindakan atas hal tersebut dengan sendirinya. Gunakan `phone_no_social_presence_action` dalam alur kerja untuk mengubahnya menjadi keputusan Review atau Decline.

Blok ini tidak ada jika `enable_social` tidak diatur, dan juga jika pemeriksaan jejak sosial tidak dapat diselesaikan. Dalam kasus terakhir, pemeriksaan jejak sosial tersebut tidak ditagih.

## Perilaku Sandbox

Kunci sandbox memvalidasi permintaan dan mengembalikan data yang disetujui secara deterministik. Kunci tersebut tidak mengirim OTP, tidak menggunakan kredit, tidak membuat sesi, dan tidak berkontribusi ke **Networks**. Dengan `enable_social` diatur, kunci tersebut juga mengembalikan blok `phone_social` yang deterministik.

## Penagihan

Panggilan Phone Risk API berharga \$0.04 dengan harga daftar, lebih murah daripada Verifikasi Telepon penuh karena tidak ada OTP yang dikirim. Permintaan produksi dikenakan biaya begitu pencarian dimulai, meskipun beberapa kolom dengan upaya terbaik tidak tersedia.

Pengaya jejak sosial ditagih secara terpisah: satu unit `phone_social` per permintaan, di atas harga Phone Risk API, setiap kali pemeriksaan selesai. Pemeriksaan kredit sebelum pencarian mencakup keduanya.


## OpenAPI

````yaml id/openapi-25.json POST /v3/phone/risk/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/phone/risk/:
    post:
      tags:
        - Standalone APIs
      summary: Memberi skor risiko pada nomor telepon
      description: >-
        Selesaikan nomor telepon dan kembalikan sinyal operator, tipe saluran,
        porting, nomor sekali pakai, kecocokan lintas-sesi, serta intelijen
        risiko yang dinormalisasi tanpa mengirim OTP. Endpoint ini membuat sesi
        API dan mengembalikan ID-nya sebagai `request_id`.


        **Keputusan.** `status` tingkat atas mencerminkan `phone.status`.
        Nilainya biasanya `Approved`; evaluasi risiko dapat menghasilkan `In
        Review` atau `Declined`.


        **Alias kompatibilitas.** Respons produksi menampilkan objek intelijen
        yang dinormalisasi sebagai `phone.phone_intelligence` dan
        `phone.enrichment`. Nilainya identik. Integrasi baru dapat membaca
        `phone.enrichment`. Kedua kunci tersebut tidak ada jika data intelijen
        yang dapat digunakan tidak dikembalikan.


        **Penagihan.** Panggilan produksi menggunakan harga Phone Risk API.
        Permintaan ditagihkan setelah pencarian dimulai, bahkan jika beberapa
        kolom yang diupayakan sebaik mungkin tidak tersedia.


        **Sandbox.** Kunci sandbox memvalidasi permintaan dan mengembalikan data
        deterministik yang disetujui tanpa mengirim OTP, menggunakan kredit,
        membuat sesi, atau berkontribusi ke Networks.


        **Autentikasi.** Kirim kunci API aplikasi Anda di `x-api-key`.
        Kredensial yang tidak ada atau tidak valid akan mengembalikan `403` -
        API ini tidak pernah mengembalikan `401`.


        **Batas laju.** Anggaran tulis bersama sebesar 300 permintaan per menit
        per kunci API di seluruh endpoint POST/PATCH/DELETE (pembuatan transaksi
        dan penyerapan event memiliki anggaran terpisah sebesar 600).


        **Jejak sosial.** Atur `enable_social` ke `true` untuk menambahkan blok
        `phone_social`: platform daring tempat nomor ini terdaftar, beserta
        jumlah per kategori dan detail profil apa pun yang tersedia.
        `profiles_registered: 0` berarti platform telah diperiksa dan nomor
        tersebut tidak ditemukan di platform mana pun - jawaban yang valid dan
        dapat ditagih. Blok ini tidak ada jika fitur tambahan tidak diminta atau
        pemeriksaan tidak dapat diselesaikan, dan tidak ditagih dalam kasus
        tersebut. Penagihan menambahkan satu unit `phone_social` per permintaan
        di atas harga endpoint ini sendiri.
      operationId: post_v3phone_risk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhoneRiskRequest'
            examples:
              Minimal:
                summary: Beri skor nomor dengan pengaturan default
                value:
                  phone_number: '+14155552671'
              Full context:
                summary: Beri skor dengan sinyal, petunjuk negara, dan ID korelasi
                value:
                  phone_number: '+14155552671'
                  country_code: US
                  signals:
                    ip: 192.0.2.1
                    device_id: 8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2
                    device_platform: ios
                    device_model: iPhone17,2
                    os_version: 18.0.1
                    app_version: 1.2.34
                    user_agent: >-
                      Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X)
                      AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0
                      Mobile/15E148 Safari/604.1
                  vendor_data: lead-123
                  metadata:
                    source: signup_prescreen
      responses:
        '200':
          description: >-
            Evaluasi risiko selesai. Periksa `status` untuk melihat
            keputusannya; HTTP selalu `200` untuk pencarian yang selesai.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhoneRiskResponse'
              examples:
                Clean mobile number:
                  summary: Nomor ponsel bersih dengan cakupan intelijen
                  value:
                    request_id: 4fd09d2e-9bc9-4c4e-9c46-7f625ac0ab62
                    status: Approved
                    phone:
                      status: Approved
                      phone_number_prefix: '+1'
                      phone_number: '4155552671'
                      full_number: '+14155552671'
                      country_code: US
                      country_name: United States
                      carrier:
                        name: Example Mobile
                        type: mobile
                      is_disposable: false
                      is_virtual: false
                      verification_method: null
                      verification_attempts: 0
                      verified_at: null
                      warnings: []
                      lifecycle: []
                      matches: []
                      phone_intelligence:
                        score: 3
                        phone_type_risk: Low
                        phone_trust_index: 97
                        network_stability_index: 95
                        is_disposable: false
                        is_ported: false
                        is_recently_ported: false
                        carrier_type: mobile
                        reason_codes: []
                      enrichment:
                        score: 3
                        phone_type_risk: Low
                        phone_trust_index: 97
                        network_stability_index: 95
                        is_disposable: false
                        is_ported: false
                        is_recently_ported: false
                        carrier_type: mobile
                        reason_codes: []
                    vendor_data: lead-123
                    metadata:
                      source: signup_prescreen
                    created_at: '2026-09-01T10:30:00.123456+00:00'
                Number in review:
                  summary: Nomor sekali pakai atau virtual ditandai untuk ditinjau
                  value:
                    request_id: 8c22e1f0-4b3d-4a3a-9d1e-2f6b7c8d9e0f
                    status: In Review
                    phone:
                      status: In Review
                      phone_number_prefix: '+44'
                      phone_number: '7700900123'
                      full_number: '+447700900123'
                      country_code: GB
                      country_name: United Kingdom
                      carrier:
                        name: Example VoIP
                        type: voip
                      is_disposable: true
                      is_virtual: true
                      verification_method: null
                      verification_attempts: 0
                      verified_at: null
                      warnings: []
                      lifecycle: []
                      matches: []
                      phone_intelligence:
                        score: 72
                        phone_type_risk: High
                        phone_trust_index: 28
                        network_stability_index: 40
                        is_disposable: true
                        is_ported: true
                        is_recently_ported: true
                        carrier_type: voip
                        reason_codes:
                          - code: IR-5AC67A32
                            direction: risk
                            message: Phone type identified as non-mobile
                            impact_level: medium
                      enrichment:
                        score: 72
                        phone_type_risk: High
                        phone_trust_index: 28
                        network_stability_index: 40
                        is_disposable: true
                        is_ported: true
                        is_recently_ported: true
                        carrier_type: voip
                        reason_codes:
                          - code: IR-5AC67A32
                            direction: risk
                            message: Phone type identified as non-mobile
                            impact_level: medium
                    vendor_data: lead-124
                    metadata: null
                    created_at: '2026-09-01T10:30:00.123456+00:00'
        '400':
          $ref: '#/components/responses/PhoneRiskValidationError'
        '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/phone/risk/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "phone_number": "+14155552671",
                "country_code": "US",
                "vendor_data": "lead-123",
                "metadata": {"source": "signup_prescreen"}
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.phone.assess_risk(
                phone_number="+14155552671",
            )
            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.phone.assessRisk({
              phone_number: "+14155552671",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Phone.AssessRisk(ctx, didit.PhoneRiskRequest{\n\tPhoneNumber: \"+14155552671\",\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.PhoneRiskRequest;

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

            var result = client.phone().assessRisk(PhoneRiskRequest.builder()
                    .phoneNumber("+14155552671")
                    .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->phone->assessRisk([
                'phone_number' => '+14155552671',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.phone.assess_risk(phone_number: "+14155552671")
            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.Phone.AssessRiskAsync(new PhoneRiskRequest
            {
                PhoneNumber = "+14155552671",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    PhoneRiskRequest:
      type: object
      required:
        - phone_number
      properties:
        phone_number:
          type: string
          maxLength: 20
          description: >-
            Nomor telepon untuk dinilai. Nomor divalidasi dan dinormalisasi ke
            E.164.
          example: '+14155552671'
        country_code:
          type: string
          maxLength: 3
          description: >-
            Petunjuk negara ISO 3166-1 alpha-2 atau alpha-3 opsional untuk
            cakupan intelijen.
          example: US
        signals:
          $ref: '#/components/schemas/RiskSignals'
        vendor_data:
          type: string
          description: >-
            Referensi stabil Anda untuk permintaan ini. Disimpan pada sesi API
            dan ditampilkan kembali dalam respons.
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Metadata JSON non-sensitif Anda. Disimpan pada sesi API dan
            dikembalikan dalam respons.
        enable_social:
          type: boolean
          default: false
          description: >-
            Jika true, cari juga jejak sosial nomor tersebut - platform
            perpesanan, sosial, e-commerce, dan profesional tempat nomor
            tersebut terdaftar. Ditagih sebagai satu unit `phone_social` per
            permintaan selain harga endpoint ini sendiri.
          example: true
    PhoneRiskResponse:
      type: object
      required:
        - request_id
        - status
        - created_at
      properties:
        request_id:
          type: string
          format: uuid
          description: >-
            Id dari sesi API yang dibuat untuk permintaan ini. Simpan bersama
            `vendor_data` jika Anda perlu mengorelasikan hasilnya dengan webhook
            atau aktivitas konsol berikutnya.
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Keputusan akhir untuk sesi API ini. Biasanya `Approved`; evaluasi
            risiko dapat menghasilkan `In Review` atau `Declined`.
        vendor_data:
          type: string
          nullable: true
          description: >-
            Salinan `vendor_data` yang Anda kirimkan, atau `null` jika Anda
            tidak mengirimkannya.
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Salinan `metadata` yang Anda kirimkan, atau `null` jika Anda tidak
            mengirimkannya.
        created_at:
          type: string
          format: date-time
          description: Cap waktu respons ini.
        phone:
          type: object
          description: >-
            Laporan telepon yang dinormalisasi, blok yang sama yang digunakan
            oleh respons Verifikasi Telepon.
          required:
            - status
          properties:
            status:
              type: string
              enum:
                - Approved
                - In Review
                - Declined
              description: >-
                Keputusan untuk nomor telepon ini. Mencerminkan `status` tingkat
                teratas.
            phone_number_prefix:
              type: string
              description: Kode panggilan negara dengan awalan `+` (misalnya, `+1`).
              example: '+1'
            phone_number:
              type: string
              description: Nomor nasional tanpa kode panggilan negara.
              example: '4155552671'
            full_number:
              type: string
              description: Nomor lengkap dalam format E.164.
              example: '+14155552671'
            country_code:
              type: string
              nullable: true
              description: Negara ISO 3166-1 alpha-2 dari nomor tersebut.
              example: US
            country_name:
              type: string
              description: Nama lengkap negara yang diturunkan dari `country_code`.
              example: United States
            carrier:
              type: object
              nullable: true
              description: >-
                Jaringan saat ini yang melayani nomor tersebut. `null` jika
                pencarian tidak dapat menemukan operator.
              properties:
                name:
                  type: string
                  description: >-
                    Nama operator. String kosong jika pencarian tidak dapat
                    mengidentifikasinya.
                type:
                  type: string
                  description: >-
                    Jenis saluran yang dilaporkan oleh pencarian: `mobile`,
                    `fixed_line`, `voip`, `isp`, `vpn`, `toll_free`,
                    `premium_rate`, atau serupa.
            is_disposable:
              type: boolean
              description: >-
                `true` saat nomor tersebut milik layanan nomor sementara atau
                sekali pakai.
            is_virtual:
              type: boolean
              description: >-
                `true` saat jenis saluran bersifat virtual (`voip`, `isp`, atau
                `vpn`).
            verification_method:
              type: string
              nullable: true
              description: >-
                Saluran OTP untuk verifikasi yang mendasarinya. `null` untuk
                pencarian risiko, yang tidak pernah mengirimkan kode.
            verification_attempts:
              type: integer
              description: Pengiriman OTP untuk nomor ini. `0` untuk pencarian risiko.
            verified_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Waktu nomor terakhir diverifikasi dengan OTP. `null` untuk
                pencarian risiko.
            warnings:
              type: array
              description: >-
                Peringatan risiko yang dicatat untuk permintaan ini. Berupa
                array kosong jika tidak ada.
              items:
                $ref: '#/components/schemas/RiskWarning'
            lifecycle:
              type: array
              description: >-
                Jejak audit kronologis dari permintaan. Berupa array kosong
                untuk pencarian risiko tanpa event pengiriman.
              items:
                $ref: '#/components/schemas/RiskLifecycleEvent'
            matches:
              type: array
              description: >-
                Sesi lain dari aplikasi Anda tempat nomor telepon yang sama
                digunakan oleh pengguna berbeda (`vendor_data` berbeda). Hingga
                5 entri. Array kosong jika tidak ada kecocokan.
              items:
                $ref: '#/components/schemas/PhoneMatchItem'
            phone_intelligence:
              $ref: '#/components/schemas/PhoneIntelligence'
            enrichment:
              $ref: '#/components/schemas/PhoneIntelligence'
            phone_social:
              $ref: '#/components/schemas/PhoneSocialFootprint'
    RiskSignals:
      type: object
      description: >-
        Konteks perangkat dan jaringan opsional yang diamati oleh aplikasi Anda.
        Semua kolom bersifat opsional. Meneruskannya akan menyediakan data untuk
        deteksi kecocokan lintas sesi di Networks.
      properties:
        ip:
          type: string
          format: ip
          description: Alamat IPv4 atau IPv6 yang teramati untuk pengguna akhir.
          example: 192.0.2.1
        device_id:
          type: string
          maxLength: 255
          description: >-
            Pengidentifikasi perangkat stabil yang dikumpulkan oleh aplikasi
            Anda (`ANDROID_ID` Android, `identifierForVendor` iOS).
        device_platform:
          type: string
          enum:
            - android
            - ios
            - ipados
            - tvos
            - web
          description: Platform perangkat pengguna akhir.
        device_model:
          type: string
          maxLength: 255
          description: Model perangkat yang dilaporkan oleh aplikasi Anda.
        os_version:
          type: string
          maxLength: 64
          description: Versi sistem operasi.
        app_version:
          type: string
          maxLength: 64
          description: Versi aplikasi Anda.
        user_agent:
          type: string
          maxLength: 512
          description: User agent browser atau aplikasi.
    RiskWarning:
      type: object
      required:
        - feature
        - risk
        - log_type
        - short_description
        - long_description
      properties:
        feature:
          type: string
          description: Fitur yang menghasilkan peringatan.
        risk:
          type: string
          description: >-
            Kode risiko yang dapat dibaca mesin. Nilai baru dapat ditambahkan
            seiring waktu.
        additional_data:
          type: object
          nullable: true
          additionalProperties: true
          description: Konteks spesifik risiko, atau `null`.
        log_type:
          type: string
          enum:
            - error
            - warning
            - information
          description: Tingkat keparahan yang digunakan oleh aturan keputusan.
        short_description:
          type: string
          description: Ringkasan satu baris yang dapat dibaca manusia.
        long_description:
          type: string
          description: Penjelasan yang mudah dibaca manusia.
    RiskLifecycleEvent:
      type: object
      required:
        - type
        - timestamp
        - details
        - fee
      properties:
        type:
          type: string
          description: >-
            Tipe event yang dapat dibaca mesin. Nilai-nilai baru dapat
            ditambahkan seiring waktu.
        timestamp:
          type: string
          format: date-time
          description: Waktu ketika peristiwa terjadi.
        details:
          type: object
          nullable: true
          additionalProperties: true
          description: Payload khusus event, atau `null`.
        fee:
          type: number
          description: Jumlah USD yang ditagihkan untuk event ini.
    PhoneMatchItem:
      type: object
      description: >-
        Sesi lain dari aplikasi Anda yang menggunakan nomor telepon yang sama
        dengan `vendor_data` yang berbeda.
      properties:
        session_id:
          type: string
          format: uuid
          description: ID sesi dari verifikasi lain yang menggunakan nomor telepon ini.
        session_number:
          type: integer
          description: Nomor urut sesi yang mudah dibaca manusia.
        vendor_data:
          type: string
          nullable: true
          description: '`vendor_data` dari sesi tersebut.'
        verification_date:
          type: string
          description: Waktu ketika sesi tersebut dibuat (`YYYY-MM-DDTHH:MM:SSZ`).
        phone_number:
          type: string
          description: Nomor telepon yang cocok.
        status:
          type: string
          description: >-
            Status sesi tersebut (misalnya, `Approved`, `Declined`, `In
            Progress`).
        is_blocklisted:
          type: boolean
          description: Apakah nomor telepon ada di daftar blokir aplikasi Anda.
        api_service:
          type: string
          nullable: true
          description: >-
            Untuk sesi bertipe API, API mandiri yang membuatnya; `null` untuk
            sesi verifikasi reguler.
        source:
          type: string
          description: >-
            Tempat kecocokan ditemukan. Biasanya `session`; kecocokan daftar
            blokir melalui entri daftar organisasi menggunakan `list_entry`.
    PhoneIntelligence:
      type: object
      description: >-
        Blok intelijen telepon yang dinormalisasi. Hanya ada ketika add-on
        intelijen dijalankan untuk pencarian ini; jika ada, ini juga diekspos di
        bawah alias `enrichment` dengan nilai yang identik.
      properties:
        score:
          type: number
          nullable: true
          description: >-
            Skor risiko 0-100 yang dinormalisasi. Lebih tinggi berarti lebih
            berisiko.
        phone_type_risk:
          type: string
          nullable: true
          description: '`Low`, `Medium`, atau `High`, diperoleh dari skor.'
        phone_trust_index:
          type: number
          nullable: true
          description: >-
            Kebalikan dari skor, untuk dasbor yang memilih semakin tinggi
            semakin baik.
        network_stability_index:
          type: number
          nullable: true
          description: Stabilitas jaringan lini tersebut.
        is_disposable:
          type: boolean
          nullable: true
          description: '`true` saat nomor tampak sekali pakai atau virtual.'
        is_ported:
          type: boolean
          nullable: true
          description: '`true` saat nomor telah berganti operator.'
        is_recently_ported:
          type: boolean
          nullable: true
          description: '`true` saat pemindahan nomor (port) baru saja terjadi.'
        carrier_type:
          type: string
          nullable: true
          description: >-
            Klasifikasi saluran yang dilaporkan oleh pencarian (misalnya,
            `mobile`).
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  Pengidentifikasi Didit yang stabil untuk sinyal tersebut,
                  misalnya `IR-5AC67A32`. Tidak transparan: kelompokkan dan
                  filter berdasarkan nilai ini, jangan menguraikannya.
              value:
                nullable: true
                description: >-
                  Untuk flag risiko (misalnya `voip`, `leaked`, `disposable`,
                  `spam_trap`), nilainya: boolean, level, atau tanggal. Null
                  untuk kode alasan dengan skor.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: Apakah sinyal meningkatkan risiko atau menambah kepercayaan.
              message:
                type: string
                description: >-
                  Penjelasan sinyal yang mudah dibaca manusia, dalam bahasa
                  Inggris.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Seberapa kuat sinyal tersebut memengaruhi skor, misalnya
                  `low`, `medium`, atau `high`.
          description: >-
            Sinyal yang menjelaskan skor tersebut, masing-masing dengan kode
            Didit yang stabil, arah, pesan, dan tingkat dampak. Kode baru dapat
            muncul sewaktu-waktu, jadi jangan tolak kode yang tidak dikenal.
    PhoneSocialFootprint:
      type: object
      nullable: true
      description: >-
        Jejak sosial dari nomor telepon: platform online tempat nomor tersebut
        terdaftar. Ada hanya jika `enable_social` diatur dan pemeriksaan
        selesai. Setiap hitungan dapat bernilai null jika tidak ada data yang
        dikembalikan untuknya. `profiles_registered: 0` berarti platform telah
        diperiksa dan nomor telepon tidak ditemukan di platform mana pun -
        respons yang valid, dapat ditagih, dan merupakan sinyal identitas
        sintetis yang umum.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: Platform tempat nomor telepon dikonfirmasi terdaftar.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Platform yang dievaluasi untuk pendaftaran.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Platform yang mengembalikan nama terkait.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Platform yang mengembalikan foto profil.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: Platform komunikasi yang keberadaannya terdeteksi.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Kategori platform unik dengan keberadaan yang terdeteksi.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Indikator kematangan digital komposit, 0-10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Indikator kekayaan profil, 0-10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Bauran platform gratis vs berbayar, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Pendaftaran pada platform gratis.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Pendaftaran pada platform berbayar penuh.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Pendaftaran pada platform freemium.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: Kelengkapan profil WhatsApp. Hanya untuk telepon; null untuk email.
          example: Partial
        registered_platforms:
          type: array
          description: Platform tempat pendaftaran dikonfirmasi.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Platform yang diperiksa dengan hasil negatif.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Jumlah dan rasio terdaftar per kategori platform.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Detail profil per platform, dikunci berdasarkan platform, jika
            platform menyediakannya.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: Pengenal platform.
          example: whatsapp
        category:
          type: string
          description: >-
            Kategori platform, mis. MESSAGING, SOCIAL_MEDIA, ECOMMERCE,
            PROFESSIONAL, EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: >-
            `global` untuk platform di seluruh dunia, `local` untuk platform
            khusus kawasan tertentu.
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: Platform dalam kategori ini tempat pendaftaran dikonfirmasi.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: >-
            Porsi platform yang diperiksa dalam kategori tersebut yang memiliki
            registrasi, 0.0-1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: Nama profil, jika platform menampilkannya.
        photo:
          type: string
          nullable: true
          description: URL foto profil, jika platform menampilkannya.
        about:
          type: string
          nullable: true
          description: Teks tentang/bio profil, jika platform menampilkannya.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: Visibilitas profil, jika platform menampilkannya.
        business_account:
          type: boolean
          nullable: true
          description: >-
            Apakah profil tersebut merupakan akun bisnis, jika platform
            menampilkannya.
  responses:
    PhoneRiskValidationError:
      description: Validasi permintaan gagal.
      content:
        application/json:
          examples:
            Missing phone number:
              summary: Nomor telepon tidak ada
              value:
                phone_number:
                  - This field is required.
            Invalid phone number:
              summary: Nomor telepon tidak valid
              value:
                phone_number:
                  - Invalid phone number provided.
            Invalid signal IP:
              summary: IP sinyal tidak valid
              value:
                signals:
                  ip:
                    - Enter a valid IPv4 or IPv6 address.
    RiskPermissionDenied:
      description: >-
        Kunci API tidak ada atau tidak valid, atau organisasi tidak dapat
        menanggung biaya pencarian langsung. API ini tidak pernah mengembalikan
        `401`.
      content:
        application/json:
          examples:
            Missing or invalid API key:
              summary: >-
                Tidak ada header `x-api-key`, atau kunci tidak valid atau
                dicabut
              value:
                detail: You do not have permission to perform this action.
            Not enough credits:
              summary: Saldo organisasi tidak mencukupi untuk harga pencarian
              value:
                error: You don't have enough credits to perform this request.
    RateLimitedWrite:
      description: >-
        Batas tulis bersama sebesar 300 permintaan per menit per kunci API telah
        terlampaui. Patuhi `Retry-After` sebelum mencoba lagi.
      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: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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