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

# Оценка риска номера телефона: Phone Risk API Didit

> Didit оценивает риск номера без OTP: данные оператора, тип линии, перенос, одноразовые номера и фрод-сигналы в одном запросе.

Используйте `POST /v3/phone/risk/`, когда вам нужны аналитические данные о номере телефона перед, вместо или вне сценария с OTP.

Он не отправляет код пользователю. endpoint создаёт API-сессию, обогащает данные номера, применяет ваши правила риска для телефонов и возвращает тот же нормализованный блок телефона, используемый в Проверке телефона, в одном синхронном ответе.

Когда запрос сохраняется, Didit также может использовать номер телефона с рассчитанной оценкой в качестве совокупного свидетельства в **Networks**. Графы сетей могут показывать контекст, связанный с высокорисковыми аналитическими данными о телефоне, переносом номера и типом линии на общих телефонных сигналах, но они не раскрывают исходный номер телефона другим организациям.

## Интерпретация ответа

* `status`: окончательное решение для этой API-сессии. Обычно это `Approved`; оценка риска может дать `In Review` или `Declined`.
* `phone.full_number`: нормализованный номер в формате E.164. `phone.phone_number_prefix` и `phone.phone_number` разделяют его на международный префикс и национальный номер.
* `phone.is_disposable` и `phone.is_virtual`: стабильные сигналы «да/нет» для логики приложения. Поиск оператора добавляет `carrier.name` и `carrier.type` (`mobile`, `voip` и аналогичные).
* `phone.phone_intelligence.score` использует шкалу риска от 0 до 100, где большее число означает более высокий риск. `phone_type_risk` (`Low`, `Medium`, `High`) и `phone_trust_index` (обратная величина оценки) представляют собой производные представления.
* `phone.phone_intelligence` и `phone.enrichment`: псевдонимы совместимости с одним и тем же нормализованным объектом. Новые интеграции могут считывать `phone.enrichment`.
* `phone.matches` перечисляет другие сессии вашего приложения, где тот же номер использовался другим пользователем. Используйте его для обнаружения дубликатов аккаунтов.
* `request_id`: идентификатор API-сессии. Сохраняйте его вместе с `vendor_data`, если вам необходимо сопоставить результат с последующими событиями webhook или действиями в панели управления.

> [!WARNING]
>
> `phone.phone_intelligence` и `phone.enrichment` являются полями, заполняемыми по возможности. Завершённая проверка может опускать оба поля, если для этого номера, страны или тарифа не возвращено пригодных аналитических данных. Создавайте правила в первую очередь на основе стабильных нормализованных полей и расценивайте отсутствие аналитических данных как «неизвестно», а не как «безопасно».

## Дополнение для цифрового следа

Установите `enable_social` в `true`, чтобы добавить блок `phone_social` в ответ внутри `phone`: онлайн-платформы, на которых зарегистрирован этот номер телефона, сгруппированные по категориям, со сводными количественными показателями и любыми сведениями профиля, возвращаемыми нашими поставщиками данных.

* `phone.phone_social.profiles_registered` и `phone.phone_social.profiles_checked` являются ключевыми показателями: платформы, на которых подтверждена регистрация номера телефона, из числа проверенных платформ.
* `phone.phone_social.registered_platforms` и `phone.phone_social.not_registered_platforms` перечисляют каждую платформу с её `category` и `scope` (`global` или `local` для региональных платформ).
* `phone.phone_social.categories` содержит количество регистраций и соотношение по категориям, а `phone.phone_social.profiles` содержит сведения о профиле для конкретной платформы, если платформа их раскрывает (имя, URL фото, текст описания профиля, статус приватности, признак бизнес-аккаунта).
* Сводные индексы (`digital_footprint_diversity`, `digital_sophistication_index`, `engagement_depth_index`, `subscription_affordability_index`) представляют собой составные показатели по шкале от 0 до 10. Любое значение счётчика может быть `null`, если проверка не вернула по нему данных.

`profiles_registered: 0` представляет собой реальный ответ, а не сбой: платформы были проверены, и номер телефона не был найден ни на одной из них, что является типичным признаком синтетической личности. Этот endpoint не предпринимает действий на его основе самостоятельно; используйте `phone_no_social_presence_action` в сценарии, чтобы преобразовать его в вердикт Review или Decline.

Блок отсутствует, если `enable_social` не задан, а также в случаях, когда проверку соцсетей не удалось завершить, и в этом случае плата за неё не взимается.

## Поведение в песочнице

Ключи песочницы проверяют запрос и возвращают детерминированные данные со статусом одобрения. Они не отправляют OTP, не расходуют кредиты, не создают сессию и не добавляют данные в Networks. При установленном `enable_social` они также возвращают детерминированный блок `phone_social`.

## Биллинг

Вызовы Phone Risk API стоят \$0.04 по цене из тарифной таблицы, то есть дешевле, чем полная Проверка телефона, поскольку OTP не отправляется. Запрос в продакшн-среде подлежит оплате с момента начала поиска, даже если некоторые поля, заполняемые по возможности, недоступны.

Дополнение для цифрового следа тарифицируется отдельно: одна единица `phone_social` за запрос сверх стоимости Phone Risk API каждый раз, когда проверка завершается. Проверка кредитного баланса перед выполнением поиска покрывает обе составляющие.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/phone/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/phone/risk/:
    post:
      tags:
        - Standalone APIs
      summary: Рассчитать оценку риска для номера телефона
      description: >-
        Выполнить проверку номера телефона и вернуть данные об операторе связи,
        типе линии, портировании, одноразовых номерах, совпадении между сессиями
        и нормализованные сигналы оценки рисков без отправки OTP. Этот endpoint
        создаёт API-сессию и возвращает её идентификатор в `request_id`.


        **Решение.** Поле верхнего уровня `status` дублирует `phone.status`.
        Обычно оно имеет значение `Approved`; оценка риска может дать результат
        `In Review` или `Declined`.


        **Псевдонимы для совместимости.** Ответы в продакшн возвращают
        нормализованный объект аналитики как в `phone.phone_intelligence`, так и
        в `phone.enrichment`. Значения идентичны. Новые интеграции могут
        считывать `phone.enrichment`. Оба ключа отсутствуют, если полезные
        аналитические данные не были получены.


        **Биллинг.** Вызовы в продакшн тарифицируются по ценам Phone Risk API.
        Запрос подлежит оплате с момента запуска проверки, даже если некоторые
        поля категории best-effort недоступны.


        **Песочница.** Ключи песочницы валидируют запрос и возвращают
        детерминированные одобренные данные без отправки OTP, списания кредитов,
        создания сессии или передачи данных в Networks.


        **Аутентификация.** Передавайте API-ключ вашего приложения в заголовке
        `x-api-key`. При отсутствии или недействительности учетных данных
        возвращается `403` - этот API никогда не возвращает `401`.


        **Лимит запросов.** Общий лимит на запись составляет 300 запросов в
        минуту на один API-ключ для всех endpoints POST/PATCH/DELETE (для
        создания транзакций и приёма событий действует отдельный лимит в 600
        запросов).


        **Цифровой след в социальных сетях.** Установите `enable_social` в
        значение `true`, чтобы добавить блок `phone_social`: платформы, на
        которых зарегистрирован этот номер, с количеством по категориям и
        доступными данными профилей. `profiles_registered: 0` означает, что
        платформы были проверены и номер не найден ни на одной из них - это
        валидный ответ, подлежащий оплате. Блок отсутствует, если дополнение не
        запрашивалось или проверка не удалась, и плата за него в этом случае не
        взимается. При биллинге добавляется одна единица `phone_social` за
        запрос сверх собственной цены этого endpoint.
      operationId: post_v3phone_risk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhoneRiskRequest'
            examples:
              Minimal:
                summary: Оценить номер со значениями по умолчанию
                value:
                  phone_number: '+14155552671'
              Full context:
                summary: >-
                  Оценить с сигналами, подсказкой о стране и идентификаторами
                  корреляции
                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: >-
            Оценка риска завершена. Проверьте `status` для получения решения;
            для завершённых запросов HTTP-код всегда `200`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhoneRiskResponse'
              examples:
                Clean mobile number:
                  summary: Очищенный номер мобильного телефона с покрытием аналитикой
                  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: Одноразовый или виртуальный номер, помеченный для проверки
                  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: >-
            Номер телефона для скоринга. Проходит валидацию и нормализуется до
            формата E.164.
          example: '+14155552671'
        country_code:
          type: string
          maxLength: 3
          description: >-
            Необязательная подсказка страны ISO 3166-1 alpha-2 или alpha-3 для
            аналитического покрытия.
          example: US
        signals:
          $ref: '#/components/schemas/RiskSignals'
        vendor_data:
          type: string
          description: >-
            Ваш постоянный идентификатор для этого запроса. Сохраняется в
            API-сессии и возвращается в ответе.
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Ваши неконфиденциальные метаданные JSON. Сохраняются в сессии API и
            возвращаются в ответе.
        enable_social:
          type: boolean
          default: false
          description: >-
            Если true, также запрашивает цифровой след номера: мессенджеры,
            социальные сети, площадки электронной коммерции и профессиональные
            платформы, где он зарегистрирован. Тарифицируется как одна единица
            `phone_social` за запрос дополнительно к цене самого endpoint.
          example: true
    PhoneRiskResponse:
      type: object
      required:
        - request_id
        - status
        - created_at
      properties:
        request_id:
          type: string
          format: uuid
          description: >-
            Идентификатор API-сессии, созданной для этого запроса. Сохраняйте
            его вместе с `vendor_data`, если нужно сопоставлять результат с
            последующими событиями webhook или действиями в консоли.
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Окончательное решение для этой сессии API. Обычно `Approved`; оценка
            риска может дать `In Review` или `Declined`.
        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: Временная метка этого ответа.
        phone:
          type: object
          description: >-
            Нормализованный отчёт по телефону, аналогичный блоку, используемому
            в ответах Проверки телефона.
          required:
            - status
          properties:
            status:
              type: string
              enum:
                - Approved
                - In Review
                - Declined
              description: >-
                Решение для этого номера телефона. Дублирует верхнеуровневый
                `status`.
            phone_number_prefix:
              type: string
              description: Телефонный код страны со знаком `+` в начале (например, `+1`).
              example: '+1'
            phone_number:
              type: string
              description: Национальный номер без телефонного кода страны.
              example: '4155552671'
            full_number:
              type: string
              description: Полный номер в формате E.164.
              example: '+14155552671'
            country_code:
              type: string
              nullable: true
              description: Код страны номера по стандарту ISO 3166-1 alpha-2.
              example: US
            country_name:
              type: string
              description: Полное название страны, полученное из `country_code`.
              example: United States
            carrier:
              type: object
              nullable: true
              description: >-
                Текущая сеть, обслуживающая номер. `null`, если при проверке не
                удалось определить оператора.
              properties:
                name:
                  type: string
                  description: >-
                    Название оператора связи. Пустая строка, если при поиске не
                    удалось его определить.
                type:
                  type: string
                  description: >-
                    Тип линии, возвращённый поиском: `mobile`, `fixed_line`,
                    `voip`, `isp`, `vpn`, `toll_free`, `premium_rate` или
                    аналогичный.
            is_disposable:
              type: boolean
              description: >-
                `true`, если номер принадлежит сервису временных или одноразовых
                номеров.
            is_virtual:
              type: boolean
              description: >-
                `true`, если тип линии является виртуальным (`voip`, `isp` или
                `vpn`).
            verification_method:
              type: string
              nullable: true
              description: >-
                Канал OTP для основной верификации. `null` для проверок риска,
                которые никогда не отправляют код.
            verification_attempts:
              type: integer
              description: >-
                Количество отправок одноразового кода для этого номера. `0` для
                проверок риска.
            verified_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Время последней верификации номера с помощью OTP. `null` для
                проверок риска.
            warnings:
              type: array
              description: >-
                Предупреждения о рисках, зафиксированные для этого запроса.
                Пустой массив, если предупреждений нет.
              items:
                $ref: '#/components/schemas/RiskWarning'
            lifecycle:
              type: array
              description: >-
                Хронологический журнал аудита запроса. Пустой массив для
                проверок риска без событий отправки.
              items:
                $ref: '#/components/schemas/RiskLifecycleEvent'
            matches:
              type: array
              description: >-
                Другие сессии вашего приложения, где тот же номер телефона
                использовался другим пользователем (другой `vendor_data`). До 5
                записей. Пустой массив при отсутствии совпадений.
              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: >-
        Необязательный контекст устройства и сети, зафиксированный вашим
        приложением. Все поля необязательны. Их передача обеспечивает
        обнаружение межсессионных совпадений в Networks.
      properties:
        ip:
          type: string
          format: ip
          description: Адрес IPv4 или IPv6, зафиксированный для конечного пользователя.
          example: 192.0.2.1
        device_id:
          type: string
          maxLength: 255
          description: >-
            Постоянный идентификатор устройства, собранный вашим приложением
            (Android `ANDROID_ID`, iOS `identifierForVendor`).
        device_platform:
          type: string
          enum:
            - android
            - ios
            - ipados
            - tvos
            - web
          description: Платформа устройства конечного пользователя.
        device_model:
          type: string
          maxLength: 255
          description: Модель устройства, переданная вашим приложением.
        os_version:
          type: string
          maxLength: 64
          description: Версия операционной системы.
        app_version:
          type: string
          maxLength: 64
          description: Версия вашего приложения.
        user_agent:
          type: string
          maxLength: 512
          description: Идентификатор браузера или приложения.
    RiskWarning:
      type: object
      required:
        - feature
        - risk
        - log_type
        - short_description
        - long_description
      properties:
        feature:
          type: string
          description: Функция, вызвавшая предупреждение.
        risk:
          type: string
          description: >-
            Машиночитаемый код риска. Со временем могут добавляться новые
            значения.
        additional_data:
          type: object
          nullable: true
          additionalProperties: true
          description: Контекст конкретного риска или `null`.
        log_type:
          type: string
          enum:
            - error
            - warning
            - information
          description: Уровень серьёзности, используемый правилами принятия решений.
        short_description:
          type: string
          description: Краткая сводка в одну строку в понятном человеку формате.
        long_description:
          type: string
          description: Понятное объяснение.
    RiskLifecycleEvent:
      type: object
      required:
        - type
        - timestamp
        - details
        - fee
      properties:
        type:
          type: string
          description: >-
            Машиночитаемый тип события. Со временем могут добавляться новые
            значения.
        timestamp:
          type: string
          format: date-time
          description: Когда событие произошло.
        details:
          type: object
          nullable: true
          additionalProperties: true
          description: payload, специфичный для события, или `null`.
        fee:
          type: number
          description: Сумма в USD, списанная за это событие.
    PhoneMatchItem:
      type: object
      description: >-
        Другая сессия вашего приложения, в которой использовался тот же номер
        телефона с другим `vendor_data`.
      properties:
        session_id:
          type: string
          format: uuid
          description: >-
            ID сессии другой верификации, в которой использовался этот номер
            телефона.
        session_number:
          type: integer
          description: Понятный порядковый номер этой сессии.
        vendor_data:
          type: string
          nullable: true
          description: '`vendor_data` этой сессии.'
        verification_date:
          type: string
          description: Когда была создана эта сессия (`YYYY-MM-DDTHH:MM:SSZ`).
        phone_number:
          type: string
          description: Совпавший номер телефона.
        status:
          type: string
          description: >-
            Статус этой сессии (например, `Approved`, `Declined`, `In
            Progress`).
        is_blocklisted:
          type: boolean
          description: Находится ли номер телефона в списке блокировки вашего приложения.
        api_service:
          type: string
          nullable: true
          description: >-
            Для сессий типа API это отдельный API, создавший её; `null` для
            обычных сессий верификации.
        source:
          type: string
          description: >-
            Где было найдено совпадение. Обычно `session`; при попадании в
            список блокировки через запись в списке организации используется
            `list_entry`.
    PhoneIntelligence:
      type: object
      description: >-
        Нормализованный блок аналитики телефона. Присутствует только в том
        случае, если для этого поиска запускалось дополнение для аналитики; если
        он присутствует, то также доступен под псевдонимом `enrichment` с
        идентичными значениями.
      properties:
        score:
          type: number
          nullable: true
          description: Нормализованная оценка риска от 0 до 100. Чем выше, тем выше риск.
        phone_type_risk:
          type: string
          nullable: true
          description: '`Low`, `Medium` или `High`, вычисляется на основе оценки.'
        phone_trust_index:
          type: number
          nullable: true
          description: >-
            Обратная оценка, для панелей управления, где предпочтительнее
            принцип «чем выше, тем лучше».
        network_stability_index:
          type: number
          nullable: true
          description: Стабильность сети телефонной линии.
        is_disposable:
          type: boolean
          nullable: true
          description: '`true`, если номер выглядит одноразовым или виртуальным.'
        is_ported:
          type: boolean
          nullable: true
          description: '`true`, если номер был перенесён к другому оператору связи.'
        is_recently_ported:
          type: boolean
          nullable: true
          description: '`true`, если перенос номера произошёл недавно.'
        carrier_type:
          type: string
          nullable: true
          description: Классификация линии, возвращённая поиском (например, `mobile`).
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  Постоянный идентификатор сигнала Didit, например
                  `IR-5AC67A32`. Непрозрачный: группируйте и фильтруйте по нему,
                  не парсите его.
              value:
                nullable: true
                description: >-
                  Для флага риска (например, `voip`, `leaked`, `disposable`,
                  `spam_trap`), его значение: логическое значение, уровень или
                  дата. Null для скорингового кода причины.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: Повысил ли сигнал риск или повысил уровень доверия.
              message:
                type: string
                description: Понятное объяснение сигнала на английском языке.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Насколько сильно сигнал повлиял на скоринг, например `low`,
                  `medium` или `high`.
          description: >-
            Сигналы, объясняющие оценку, каждый с фиксированным кодом Didit,
            направлением, сообщением и уровнем влияния. Со временем могут
            появляться новые коды, поэтому не отклоняйте неизвестные коды.
    PhoneSocialFootprint:
      type: object
      nullable: true
      description: >-
        Цифровой след номера телефона: онлайн-платформы, на которых он
        зарегистрирован. Присутствует, только если был задан параметр
        `enable_social` и проверка завершилась. Любое количество может быть
        null, если данные по нему не были возвращены. `profiles_registered: 0`
        означает, что платформы были проверены и номер телефона не найден ни на
        одной из них: это валидный, тарифицируемый ответ и частый признак
        синтетической личности.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: Платформы, где подтверждена регистрация номера телефона.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Платформы, проверенные на наличие регистрации.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Платформы, вернувшие связанное имя.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Платформы, вернувшие фото профиля.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: Коммуникационные платформы с обнаруженным присутствием.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Уникальные категории платформ с обнаруженным присутствием.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Составной индикатор цифровой зрелости, 0-10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Индикатор заполненности профиля, 0-10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Соотношение бесплатных и платных платформ, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Регистрации на бесплатных платформах.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Регистрации на полностью платных платформах.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Регистрации на freemium-платформах.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            Полнота профиля WhatsApp. Только для телефона; null для электронной
            почты.
          example: Partial
        registered_platforms:
          type: array
          description: Платформы, где подтверждена регистрация.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Платформы, проверенные с отрицательным результатом.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Количество регистраций и их соотношение по категориям платформ.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Сведения о профиле на платформе, сгруппированные по платформам, если
            платформа их предоставляет.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: Идентификатор платформы.
          example: whatsapp
        category:
          type: string
          description: >-
            Категория платформы, например: MESSAGING, SOCIAL_MEDIA, ECOMMERCE,
            PROFESSIONAL, EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: '`global` для глобальных платформ, `local` для региональных.'
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: Платформы этой категории, где подтверждена регистрация.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: >-
            Доля проверенных платформ категории с наличием регистрации, от 0.0
            до 1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: Имя профиля, если платформа его предоставляет.
        photo:
          type: string
          nullable: true
          description: URL фотографии профиля, если платформа её предоставляет.
        about:
          type: string
          nullable: true
          description: Текст «о себе»/биография профиля, если платформа его предоставляет.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: Видимость профиля, если платформа её предоставляет.
        business_account:
          type: boolean
          nullable: true
          description: >-
            Является ли профиль бизнес-аккаунтом, если платформа раскрывает эту
            информацию.
  responses:
    PhoneRiskValidationError:
      description: Ошибка валидации запроса.
      content:
        application/json:
          examples:
            Missing phone number:
              summary: Отсутствует номер телефона
              value:
                phone_number:
                  - This field is required.
            Invalid phone number:
              summary: Недопустимый номер телефона
              value:
                phone_number:
                  - Invalid phone number provided.
            Invalid signal IP:
              summary: Недопустимый IP-адрес сигнала
              value:
                signals:
                  ip:
                    - Enter a valid IPv4 or IPv6 address.
    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: >-
        Превышен общий лимит на запись в 300 запросов в минуту на один API-ключ.
        Подождите время, указанное в `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-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

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