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

# Проверка email-кода через API: валидация одноразового кода

> Didit: POST /v3/email/check/ — проверка кода из email с сигналами утечек, одноразовых адресов и доставляемости. Оплата за использование.

## Интеллектуальное дополнение

Установите `enable_enrichment` в значение `true`, чтобы дополнительно запустить анализ адреса электронной почты: оценку риска и историю его утечек данных.
Дополнение тарифицируется по \$0.05 за запрос по стандартной цене, сверх стоимости самой проверки.
Запрос возвращает `403`, если на вашем балансе недостаточно средств для его оплаты.

Три поля определяют, как действуют сигналы.
Каждое из них принимает значение `NO_ACTION` (по умолчанию) или `DECLINE`, и каждое применяется только если `enable_enrichment` имеет значение `true`.

| Поле | Отклоняет, когда |
| - | - |
| `email_intelligence_score_action` | Оценка риска выше порога. |
| `recent_email_breach_action` | Адрес присутствует в недавней известной утечке данных. |
| `frequent_email_breach_action` | Адрес присутствует в многочисленных известных утечках данных. |

При значении `NO_ACTION` сигнал по-прежнему возвращается в `email.email_intelligence`, поэтому вы можете применить собственное правило.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/email/check/
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/email/check/:
    post:
      tags:
        - Standalone APIs
      summary: Проверить код из электронной почты
      description: >-
        Проверьте OTP, отправленный через [`POST
        /v3/email/send/`](/ru/standalone-apis/email-send), и получите
        окончательный результат верификации, а также аналитические данные об
        адресе: доставляемость, наличие в утечках (`is_breached` и список
        `breaches` из базы данных аналитики утечек), выявление одноразовых
        провайдеров и повторное использование адреса в ваших сессиях.


        **Как проверка находит верификацию.** Поиск выполняется по вашему
        приложению и адресу `email` — параметр `request_id` не передается.
        Проверяется самая последняя незавершённая верификация, созданная за
        последние **5 минут**. Если подходящей нет (никогда не отправлялась, уже
        завершена, оказалась недоставляемой на момент отправки или старше 5
        минут), endpoint возвращает `200` со `status: "Expired or Not Found"`.


        **Лимит попыток.** На каждую верификацию дается **3 попытки ввода
        кода**. Первые два неверных кода возвращают `status: "Failed"` с
        количеством оставшихся попыток и `email: null`; третий неверный код
        переводит верификацию в финальный статус `Declined` с предупреждением
        `EMAIL_CODE_ATTEMPTS_EXCEEDED` и возвращает полный отчёт по email. Коды
        сравниваются без учета регистра (актуально для кодов, отправленных с
        `alphanumeric_code`); действителен только последний отправленный код.


        **Результаты.** `Approved` — верный код и отсутствие рисков отклонения.
        `Declined` — финальный: код был верным, но сработал риск отклонения
        (действие `DECLINE`, указанное ниже, адрес в списке блокировки или
        признание адреса недоставляемым на момент завершения) либо исчерпан
        лимит попыток. `Failed` — неверный код, попытки еще остались. `Expired
        or Not Found` — нечего проверять. При `Approved`/`Declined` значение
        `request_id` совпадает с `request_id` отправки (id сессии), а объект
        `email` содержит полный отчёт (`is_breached`, `breaches`,
        `is_disposable`, `is_undeliverable`, `warnings`, `lifecycle`,
        `matches`); при `Failed` и `Expired or Not Found` параметр `request_id`
        представляет собой отдельный случайный UUID.


        **Действия при рисках.** Параметры `duplicated_email_action`,
        `breached_email_action` и `disposable_email_action` определяют, что
        происходит при обнаружении соответствующего риска при правильном коде:
        `DECLINE` меняет итоговый статус на `Declined`; `NO_ACTION` (по
        умолчанию) фиксирует риск в `email.warnings`, не влияя на статус.


        **Биллинг.** Проверки бесплатны — кредит списывается за успешную
        отправку.


        **Сохранение сессии.** Завершенная проверка обновляет сессию, созданную
        при отправке (отображается в Business Console, доступна для запроса
        через `GET /v3/session/{sessionId}/decision/`), и отправляет webhook
        `status.updated`.


        **Песочница.** При использовании API-ключей песочницы вся обработка
        пропускается: любой корректно сформированный код (включая `123456`)
        возвращает статический payload `Approved` с упрощенным объектом `email`
        (`status`, `email`, `is_breached`, `is_disposable`, `is_undeliverable`);
        некорректный ввод по-прежнему возвращает `400`. Никакие данные не
        сохраняются.


        **Аутентификация.** Передавайте API-ключ вашего приложения в заголовке
        `x-api-key`. При отсутствии или недействительности учетных данных
        возвращается `403` (`{"detail": "You do not have permission to perform
        this action."}`) — этот API никогда не возвращает `401`.


        **Лимит запросов.** Общий лимит на запись: 300 запросов в минуту на
        API-ключ для всех endpoint POST/PATCH/DELETE; при превышении
        возвращается `429`.


        **Цифровой след в соцсетях.** Установите `enable_social` в значение
        `true`, чтобы добавить блок `email_social`: онлайн-платформы, на которых
        зарегистрирован этот адрес, с количеством по категориям и всеми
        доступными данными профиля. `profiles_registered: 0` означает, что
        платформы были проверены и адрес не найден ни на одной из них - валидный
        ответ, за который взимается плата. Блок отсутствует, если опция не была
        запрошена или проверку не удалось выполнить; в этом случае плата за него
        не начисляется. При биллинге добавляется одна единица `email_social` за
        запрос сверх собственной цены этого endpoint.
      operationId: post_v3email_check
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  format: email
                  description: >-
                    Тот же адрес электронной почты, что использовался в
                    соответствующем вызове [`POST
                    /v3/email/send/`](/ru/standalone-apis/email-send). Именно он
                    связывает проверку с отправкой.
                  example: alice@example.com
                code:
                  type: string
                  maxLength: 10
                  description: >-
                    Одноразовый код (OTP), полученный конечным пользователем:
                    4–8 цифр, или 4–8 букв/цифр, если при отправке использовался
                    параметр `alphanumeric_code: true`. Сравнение
                    нечувствительно к регистру.
                  example: '123456'
                duplicated_email_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Что делать, если тот же адрес уже использовался и был
                    одобрен другим пользователем (учитываются только ранее
                    одобренные верификации) (другой `vendor_data`) вашего
                    приложения. `DECLINE` меняет итоговый `status` на
                    `Declined`; `NO_ACTION` фиксирует риск в `email.warnings` и
                    заполняет `email.matches`.
                breached_email_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Действие, если адрес фигурирует в известных утечках данных
                    (`email.is_breached`). `DECLINE` меняет итоговый `status` на
                    `Declined`; `NO_ACTION` фиксирует риск в `email.warnings`.
                disposable_email_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Что делать, если домен принадлежит провайдеру
                    одноразовой/временной почты (`email.is_disposable`).
                    `DECLINE` меняет итоговый `status` на `Declined`;
                    `NO_ACTION` фиксирует риск в `email.warnings`.
                enable_enrichment:
                  type: boolean
                  default: false
                  description: >-
                    Когда `true`, также выполняет проверку адреса электронной
                    почты (email intelligence): оценку риска и историю утечек.
                    Тарифицируется как одна единица `email_intelligence_api` за
                    запрос ($0.05 по прайс-листу) в дополнение к собственной
                    цене этого endpoint. Запрос возвращает `403`, если ваш
                    баланс не может покрыть списание.
                  example: false
                email_intelligence_score_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Действие, когда оценка риска при анализе электронной почты
                    превышает порог. `DECLINE` меняет итоговый `status` на
                    `Declined`; `NO_ACTION` фиксирует сигнал без отклонения.
                    Действует только тогда, когда `enable_enrichment` имеет
                    значение `true`.
                recent_email_breach_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Действие, когда адрес фигурирует в недавней известной утечке
                    данных. `DECLINE` меняет итоговый `status` на `Declined`;
                    `NO_ACTION` фиксирует сигнал без отклонения. Применяется
                    только при значении `true` для `enable_enrichment`.
                frequent_email_breach_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Действие, когда адрес фигурирует во множестве известных
                    утечек данных. `DECLINE` меняет итоговый `status` на
                    `Declined`; `NO_ACTION` фиксирует сигнал без отклонения.
                    Применяется только при значении `true` для
                    `enable_enrichment`.
                enable_social:
                  type: boolean
                  default: false
                  description: >-
                    Если true, также запрашивает цифровой след адреса: платформы
                    электронной почты, социальные, профессиональные сети,
                    площадки электронной коммерции и развлекательные сервисы,
                    где он зарегистрирован. Тарифицируется как одна единица
                    `email_social` за запрос дополнительно к цене самого
                    endpoint.
                  example: true
                email_no_social_presence_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Действие, когда проверка цифрового следа в соцсетях не
                    находит адрес ни на одной из поддерживаемых платформ. В этом
                    endpoint принимаются только NO_ACTION и DECLINE; REVIEW
                    доступно в одноимённом ключе конфигурации сценария.
              required:
                - email
                - code
            examples:
              Default:
                summary: Фиксировать любые риски, но никогда не отклонять автоматически
                value:
                  email: alice@example.com
                  code: '123456'
              Strict risk policy:
                summary: >-
                  Автоматически отклонять одноразовые и скомпрометированные
                  почтовые ящики
                value:
                  email: alice@example.com
                  code: '123456'
                  disposable_email_action: DECLINE
                  breached_email_action: DECLINE
      responses:
        '200':
          description: >-
            Проверка завершена — неверные коды и отсутствующие верификации также
            возвращают `200`; проверяйте `status`, а не HTTP-код. Поле `email`
            заполняется только при финальных результатах
            (`Approved`/`Declined`), равно `null` при `Failed` и отсутствует при
            `Expired or Not Found`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailVerificationCheckResponse'
              examples:
                Approved:
                  summary: >-
                    Правильный код — чистый адрес, полный отчёт по электронной
                    почте
                  value:
                    request_id: e39cb057-92fc-4b59-b84e-02fec29a0f24
                    status: Approved
                    message: The verification code is correct.
                    email:
                      status: Approved
                      email: alice@example.com
                      is_breached: false
                      breaches: []
                      is_disposable: false
                      is_undeliverable: false
                      verification_attempts: 1
                      verified_at: '2026-06-12T01:24:47.311323Z'
                      warnings: []
                      lifecycle:
                        - type: EMAIL_VERIFICATION_MESSAGE_SENT
                          timestamp: '2026-06-12T01:23:39.580554+00:00'
                          details:
                            status: Success
                            reason: null
                          fee: 0.02
                        - type: VALID_CODE_ENTERED
                          timestamp: '2026-06-12T01:24:47.311201+00:00'
                          details:
                            code_tried: '123456'
                            status: Approved
                          fee: 0
                        - type: EMAIL_VERIFICATION_APPROVED
                          timestamp: '2026-06-12T01:24:47.384292+00:00'
                          details: null
                          fee: 0
                      matches: []
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-12T01:24:47.401719+00:00'
                Approved with breach exposure:
                  summary: >-
                    Правильный код; обнаружение в утечках данных зафиксировано
                    как предупреждение (breached_email_action=NO_ACTION)
                  value:
                    request_id: 3a1f2b6c-9d4e-4f7a-8b2c-1e5d6f7a8b9c
                    status: Approved
                    message: The verification code is correct.
                    email:
                      status: Approved
                      email: bob@example.com
                      is_breached: true
                      breaches:
                        - name: ExampleApp
                          domain: exampleapp.com
                          breach_date: '2019-03-21'
                          breach_emails_count: 763117
                          description: >-
                            In March 2019, the social platform ExampleApp
                            suffered a data breach that exposed email addresses
                            and passwords.
                          logo_path: https://<media-host>/logos/ExampleApp.png
                          data_classes:
                            - email_addresses
                            - passwords
                          is_verified: true
                      is_disposable: false
                      is_undeliverable: false
                      verification_attempts: 1
                      verified_at: '2026-06-12T01:24:47.311323Z'
                      warnings:
                        - feature: EMAIL
                          risk: BREACHED_EMAIL_DETECTED
                          additional_data: null
                          log_type: information
                          short_description: Breached email detected
                          long_description: >-
                            This email address was found in one or more known
                            data breaches.
                      lifecycle:
                        - type: EMAIL_VERIFICATION_MESSAGE_SENT
                          timestamp: '2026-06-12T01:23:39.580554+00:00'
                          details:
                            status: Success
                            reason: null
                          fee: 0.02
                        - type: VALID_CODE_ENTERED
                          timestamp: '2026-06-12T01:24:47.311201+00:00'
                          details:
                            code_tried: '835126'
                            status: Approved
                          fee: 0
                        - type: EMAIL_VERIFICATION_APPROVED
                          timestamp: '2026-06-12T01:24:47.384292+00:00'
                          details: null
                          fee: 0
                      matches: []
                    vendor_data: user-5678
                    metadata: null
                    created_at: '2026-06-12T01:24:47.401719+00:00'
                Failed (attempts remaining):
                  summary: >-
                    Неверный код — пользователь может повторить попытку;
                    request_id здесь представляет собой одноразовый UUID
                  value:
                    request_id: 11111111-2222-3333-4444-555555555555
                    status: Failed
                    message: 'The verification code is incorrect. Attempts remaining: 2'
                    email: null
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-12T01:24:21.512340+00:00'
                Declined (risk policy):
                  summary: >-
                    Правильный код, но адрес одноразовый и
                    disposable_email_action=DECLINE
                  value:
                    request_id: 8c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f
                    status: Declined
                    message: The verification code is correct.
                    email:
                      status: Declined
                      email: tempuser42@mailinator.com
                      is_breached: false
                      breaches: []
                      is_disposable: true
                      is_undeliverable: false
                      verification_attempts: 1
                      verified_at: '2026-06-12T01:24:47.311323Z'
                      warnings:
                        - feature: EMAIL
                          risk: DISPOSABLE_EMAIL_DETECTED
                          additional_data: null
                          log_type: error
                          short_description: Disposable email detected
                          long_description: >-
                            The system detected that the email is disposable,
                            which is not allowed.
                      lifecycle:
                        - type: EMAIL_VERIFICATION_MESSAGE_SENT
                          timestamp: '2026-06-12T01:23:39.580554+00:00'
                          details:
                            status: Success
                            reason: null
                          fee: 0.02
                        - type: VALID_CODE_ENTERED
                          timestamp: '2026-06-12T01:24:47.311201+00:00'
                          details:
                            code_tried: '123456'
                            status: Approved
                          fee: 0
                        - type: EMAIL_VERIFICATION_DECLINED
                          timestamp: '2026-06-12T01:24:47.384292+00:00'
                          details:
                            reason: DISPOSABLE_EMAIL_DETECTED
                          fee: 0
                      matches: []
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-12T01:24:47.401719+00:00'
                Expired or Not Found:
                  summary: >-
                    За последние 5 минут нет ожидающих верификаций для этого
                    адреса
                  value:
                    request_id: 88808a77-06e9-4cb0-85f5-9c052ddfd987
                    status: Expired or Not Found
                    message: No pending email verification found in the last 5 minutes.
                    vendor_data: null
                    metadata: null
                    created_at: '2026-06-12T01:24:59.887904+00:00'
        '400':
          description: >-
            Ошибка валидации — обёртка ошибок полей DRF: один массив сообщений
            на каждое некорректное поле.
          content:
            application/json:
              examples:
                Invalid email:
                  summary: Некорректный адрес электронной почты
                  value:
                    email:
                      - Enter a valid email address.
                Missing code:
                  summary: '`code` не указан в теле запроса'
                  value:
                    code:
                      - This field is required.
        '403':
          description: >-
            В доступе отказано. Возвращается, если заголовок `x-api-key`
            отсутствует; неверный, отозванный или истекший ключ возвращает
            `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.
        '429':
          description: >-
            Превышен лимит запросов. Endpoint'ы POST/PATCH/DELETE делят общий
            лимит в 300 запросов на запись в минуту на один API-ключ (для
            создания транзакций и отправки событий действует отдельный лимит в
            600). Ответ содержит заголовки `X-RateLimit-Limit`,
            `X-RateLimit-Remaining`, `X-RateLimit-Reset` и `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Более 300 запросов на запись в текущую минуту
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/email/check/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "email": "alice@example.com",
                "code": "123456",
                "disposable_email_action": "DECLINE"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.email.check_code(
                email="alice@example.com",
                code="123456",
            )
            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.email.checkCode({
              email: "alice@example.com",
              code: "123456",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Email.CheckCode(ctx, didit.EmailCheckCodeParams{\n\tEmail: \"alice@example.com\",\n\tCode:  \"123456\",\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.EmailCheckCodeParams;

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

            var result = client.email().checkCode(EmailCheckCodeParams.builder()
                    .email("alice@example.com")
                    .code("123456")
                    .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->email->checkCode([
                'email' => 'alice@example.com',
                'code' => '123456',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.email.check_code(
              email: "alice@example.com",
              code: "123456"
            )
            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.Email.CheckCodeAsync(new
            EmailCheckCodeParams

            {
                Email = "alice@example.com",
                Code = "123456",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    EmailVerificationCheckResponse:
      type: object
      properties:
        request_id:
          type: string
          format: uuid
          description: >-
            При `Approved`/`Declined`: id сессии сопоставленной верификации —
            совпадает с `request_id`, возвращаемым `POST /v3/email/send/`. При
            `Failed` и `Expired or Not Found`: случайный разовый UUID, который
            впоследствии нельзя найти по запросу.
        status:
          type: string
          enum:
            - Approved
            - Declined
            - Failed
            - Expired or Not Found
          description: >-
            `Approved` — правильный код, отсутствуют отклоняющие риски.
            `Declined` — терминальный статус: сработал отклоняющий риск или
            исчерпан лимит попыток (3). `Failed` — неверный код, попытки ещё
            остались. `Expired or Not Found` — нет ожидающей верификации для
            этого адреса за последние 5 минут.
        message:
          type: string
          description: >-
            Понятное объяснение результата, включая количество оставшихся
            попыток после неверного ввода кода.
        email:
          type: object
          nullable: true
          description: >-
            Полный отчёт по электронной почте. Присутствует (не null) только при
            окончательных результатах (`Approved`/`Declined`); `null` при
            `Failed` и отсутствует при `Expired or Not Found`.
          properties:
            status:
              type: string
              enum:
                - Approved
                - Declined
                - In Review
                - Not Finished
                - Expired
              description: >-
                Финальный статус проверки электронной почты. Совпадает со
                значением `status` верхнего уровня для завершённых проверок.
            email:
              type: string
              format: email
              description: Подтверждённый адрес электронной почты.
              example: alice@example.com
            is_breached:
              type: boolean
              description: >-
                `true`, когда адрес фигурирует в известных утечках данных (поиск
                по базам утечек выполняется на этапе финализации).
            breaches:
              type: array
              description: >-
                До 5 последних известных утечек, содержащих этот адрес. Пустой
                массив (или поле опущено), если `is_breached` имеет значение
                `false`.
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: Идентификатор утечки.
                  domain:
                    type: string
                    description: Домен скомпрометированного сервиса.
                  breach_date:
                    type: string
                    format: date
                    description: Дата, когда произошло нарушение.
                  breach_emails_count:
                    type: integer
                    description: >-
                      Общее количество аккаунтов, данные которых оказались в
                      утечке.
                  description:
                    type: string
                    description: Понятное описание утечки (может содержать HTML-разметку).
                  logo_path:
                    type: string
                    description: URL логотипа скомпрометированного сервиса.
                  data_classes:
                    type: array
                    items:
                      type: string
                    description: >-
                      Категории раскрытых данных в формате snake_case (например,
                      `email_addresses`, `passwords`).
                  is_verified:
                    type: boolean
                    description: Была ли утечка подтверждена как подлинная.
            is_disposable:
              type: boolean
              description: >-
                `true`, если домен принадлежит известному сервису одноразовой
                или временной почты.
            is_undeliverable:
              type: boolean
              description: >-
                `true`, когда адрес не может принимать почту (ошибка синтаксиса
                или проверки DNS/MX, либо сообщение вернулось с ошибкой
                доставки).
            verification_attempts:
              type: integer
              description: >-
                Количество отправок OTP для этой верификации (1 или 2 после
                повторной попытки).
            verified_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Когда был введён правильный код. `null`, если верификация так и
                не была одобрена.
            warnings:
              type: array
              description: >-
                Предупреждения о рисках, зафиксированные в ходе верификации
                (дубликат, скомпрометированный, одноразовый, недоставляемый,
                превышение попыток, список блокировки и т. д.). Пустой массив,
                если предупреждений нет.
              items:
                type: object
                properties:
                  feature:
                    type: string
                    description: Функция, вызвавшая предупреждение. Здесь всегда `EMAIL`.
                  risk:
                    type: string
                    description: Машиночитаемый код риска.
                  additional_data:
                    type: object
                    nullable: true
                    description: >-
                      Контекст конкретного риска (например, ID дублированной
                      сессии для рисков дублирования). `null`, если риск не
                      содержит дополнительных данных.
                  log_type:
                    type: string
                    enum:
                      - error
                      - warning
                      - information
                    description: >-
                      Уровень серьёзности. Риски со значением `error` отклоняют
                      верификацию, `warning` отправляет её на проверку,
                      `information` фиксируется без влияния на статус.
                  short_description:
                    type: string
                    description: >-
                      Краткая сводка риска в одну строку в понятном человеку
                      формате.
                  long_description:
                    type: string
                    description: Понятное объяснение риска.
            lifecycle:
              type: array
              description: >-
                Хронологический журнал аудита верификации. Значение `type`
                события является одним из `EMAIL_VERIFICATION_MESSAGE_SENT`,
                `EMAIL_VERIFICATION_RETRY_MESSAGE_SENT`, `VALID_CODE_ENTERED`,
                `INVALID_CODE_ENTERED`, `EMAIL_VERIFICATION_APPROVED`,
                `EMAIL_VERIFICATION_DECLINED`, `EMAIL_VERIFICATION_IN_REVIEW`,
                `EMAIL_VERIFICATION_EXPIRED`.
              items:
                type: object
                properties:
                  type:
                    type: string
                    description: Тип события.
                  timestamp:
                    type: string
                    format: date-time
                    description: Когда событие произошло.
                  details:
                    type: object
                    nullable: true
                    description: >-
                      payload, специфичный для события. События отправки:
                      `{status, reason}`. События ввода кода: `{code_tried,
                      status}`. События финального статуса: `null`, или
                      `{reason}`, если отклонена или на проверке.
                  fee:
                    type: number
                    description: >-
                      Сумма в USD, списанная за это событие. Отлична от нуля
                      только при первой успешной отправке; 0 для повторных
                      попыток, ввода кода и событий статуса.
            matches:
              type: array
              description: >-
                Другие сессии вашего приложения (KYC, KYB или API), где тот же
                адрес электронной почты использовался другим пользователем (с
                другим `vendor_data`). До 5 записей; синтетическое совпадение со
                списком блокировки добавляется в начало при его наличии (и
                только если нет заблокированного адреса электронной почты,
                полученного из сессии) — совпадения из сессий сохраняют порядок
                created_at. Пустой массив, если совпадений нет.
              items:
                type: object
                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`).
                  email:
                    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, создавший её
                      (например, `PHONE_VERIFICATION`); `null` для обычных
                      сессий верификации.
                  source:
                    type: string
                    description: >-
                      Где было найдено совпадение. Обычно `session`; попадание в
                      список блокировки через запись в списке организации
                      добавляет в начало синтетическое совпадение с `source:
                      "list_entry"` и со значениями null для
                      `session_id`/`session_number`.
            email_social:
              $ref: '#/components/schemas/EmailSocialFootprint'
            email_intelligence:
              allOf:
                - $ref: '#/components/schemas/EmailIntelligence'
              description: >-
                Сигналы аналитики электронной почты. Присутствуют, только если
                параметр `enable_enrichment` имел значение `true` при проверке.
        vendor_data:
          type: string
          nullable: true
          description: >-
            `vendor_data` сессии совпавшей верификации. `null` при `Expired or
            Not Found`.
        metadata:
          type: object
          nullable: true
          description: >-
            `metadata` сессии совпавшей верификации. `null` при `Expired or Not
            Found`.
        created_at:
          type: string
          format: date-time
          description: Временная метка ответа на эту проверку.
    EmailSocialFootprint:
      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'
    EmailIntelligence:
      type: object
      description: >-
        Нормализованный блок аналитики электронной почты. Присутствует только в
        том случае, если для этого адреса электронной почты запускалось
        дополнение для аналитики; если он присутствует, то также доступен через
        псевдоним `enrichment` с идентичными значениями.
      properties:
        score:
          type: number
          nullable: true
          description: Нормализованная оценка риска от 0 до 100. Чем выше, тем выше риск.
        deliverable:
          type: string
          nullable: true
          description: Диапазон доставляемости (например, `high`).
        breach_risk_level:
          type: string
          nullable: true
          description: '`Low`, `Medium` или `High`.'
        breach_risk_index:
          type: number
          nullable: true
          description: Числовой индекс риска утечки данных.
        is_recent_breach:
          type: boolean
          nullable: true
          description: '`true`, когда адрес фигурирует в недавней утечке данных.'
        is_frequent_breached:
          type: boolean
          nullable: true
          description: '`true`, когда адрес фигурирует во множестве утечек данных.'
        is_disposable:
          type: boolean
          nullable: true
          description: '`true`, если домен принадлежит сервису одноразовой почты.'
        is_free_domain:
          type: boolean
          nullable: true
          description: '`true`, если домен принадлежит бесплатному почтовому сервису.'
        is_breached:
          type: boolean
          nullable: true
          description: '`true`, когда адрес фигурирует в известных утечках данных.'
        no_of_breaches:
          type: number
          nullable: true
          description: Количество известных утечек, содержащих этот адрес.
        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,
            направлением, сообщением и уровнем влияния. Со временем могут
            появляться новые коды, поэтому не отклоняйте неизвестные коды.
    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: >-
            Является ли профиль бизнес-аккаунтом, если платформа раскрывает эту
            информацию.
  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.