> ## 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: 1:N дедупликация и фрод-кольца

> Didit: поиск по лицу 1:N среди верифицированных пользователей. Находит дубликаты и фрод-кольца. Ответ за 2s, оплата за вызов, без контрактов.



## OpenAPI

````yaml ru/openapi-25.json POST /v3/face-search/
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/face-search/:
    post:
      tags:
        - Standalone APIs
      summary: Поиск по лицу
      description: >-
        Выполните поиск изображения лица (1:N) по индексу поиска по лицу вашего
        приложения — лицам, зарегистрированным из сессий верификации,
        сохранённых отдельных вызовов API, прямых загрузок лиц в профили
        пользователей, а также ваших списков блокировки и разрешений — и
        получите ранжированные совпадения по сходству, а также предупреждения о
        списках блокировки и дубликатах.


        **Как это работает.** Для самого крупного обнаруженного лица на
        `user_image` формируется эмбеддинг, по которому выполняется поиск по
        индексу в рамках вашего приложения. В `matches` возвращается до **5
        совпадений** выше минимального порога сходства, каждое из которых
        содержит `similarity_percentage`, исходную сессию (`session_id`,
        `session_number`, `status`, `vendor_data`), данные `user_details`,
        извлечённые в ходе верификации документа этой сессии, флаги
        `is_blocklisted` / `is_allowlisted` и дискриминатор `source` (`session`,
        `imported` или `list_entry`).


        - `search_type=most_similar` (по умолчанию) ранжирует все
        зарегистрированные лица по сходству — используйте этот тип для
        дедупликации и расследования мошеннических схем.

        - `search_type=blocklisted_or_approved` ограничивает кандидатов лицами
        из списка блокировки, разрешёнными лицами, лицами из одобренных сессий и
        импортированными лицами из профилей пользователей, при этом записи из
        списка блокировки ранжируются первыми — используйте этот тип, когда
        основной целью является скрининг по списку блокировки.


        Параметр `status` принимает значение `Declined` только в том случае,
        если срабатывает предупреждение `FACE_IN_BLOCKLIST` или
        `POSSIBLE_FACE_IN_BLOCKLIST`; предупреждения `DUPLICATED_FACE` /
        `POSSIBLE_DUPLICATED_FACE` (`information`) и `MULTIPLE_FACES_DETECTED`
        (`warning`) никогда не приводят к отклонению. В отличие от пассивной
        проверки живости, этот endpoint **не** исключает из сопоставления
        предыдущие сессии с тем же `vendor_data`. Внутренний анализ пассивной
        проверки живости также запускается и сохраняется вместе с сохранённой
        сессией, но его результат не включается в данный ответ.


        **Биллинг.** Каждый ответ `200` расходует один кредит API Поиска по лицу
        (списывается с кредитов вашего тарифа или баланса пополнения). При
        недостаточном балансе возвращается `403` до начала какой-либо обработки
        изображения.


        **Сохранение сессии и регистрация лица (`save_api_request`, по умолчанию
        `true`).** Если установлено значение `true`, вызов сохраняется как
        сессия типа API (Business Console, `GET
        /v3/session/{sessionId}/decision/` по возвращённому `request_id`,
        webhook `status.updated`), а лицо, по которому выполнялся поиск,
        регистрируется в вашем индексе поиска по лицу. Лица, зарегистрированные
        при вызовах Поиска по лицу, исключаются из будущих результатов Поиска по
        лицу, поэтому повторные поиски никогда не совпадут друг с другом. Если
        установлено значение `false`, вызов является однократным: ничего не
        сохраняется, лицо не регистрируется, а значения `match_image_url`
        представляют собой внутренние пути хранилища, а не доступные для
        скачивания URL.


        **Песочница.** API-ключи песочницы пропускают всю обработку и биллинг:
        после валидации запроса (некорректный ввод по-прежнему возвращает `400`)
        endpoint возвращает статический payload-заглушку со статусом `Approved`,
        сессия не сохраняется, и кредиты не расходуются.


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


        **Лимит запросов.** Общий лимит на запись составляет 300 запросов/мин на
        один API-ключ для всех endpoints POST/PATCH/DELETE; при его превышении
        возвращается `429`.
      operationId: post_v3face-search
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - user_image
              properties:
                user_image:
                  type: string
                  format: binary
                  description: >-
                    Фронтальное изображение лица для поиска. Допустимые
                    расширения: `tiff`, `jpg`, `jpeg`, `png`, `webp`.
                    Максимальный размер загружаемого файла: **5 MB** (файлы
                    большего размера отклоняются с ошибкой `400`). Перед
                    обработкой изображения автоматически сжимаются примерно до
                    0.5 MB, поэтому сверхвысокое разрешение не повышает
                    точность. На изображении должно быть хотя бы одно
                    распознаваемое лицо — иначе endpoint возвращает `400`. Если
                    лиц несколько, поиск выполняется по самому крупному и
                    добавляется предупреждение `MULTIPLE_FACES_DETECTED`.
                search_type:
                  type: string
                  default: most_similar
                  enum:
                    - most_similar
                    - blocklisted_or_approved
                  description: >-
                    Политика поиска. `most_similar` (по умолчанию) ранжирует все
                    зарегистрированные лица в вашем приложении по сходству.
                    `blocklisted_or_approved` ограничивает кандидатов лицами из
                    списка блокировки, белого списка, лицами из одобренных
                    сессий и импортированными лицами из профилей пользователей,
                    при этом записи из списка блокировки располагаются первыми.
                  example: most_similar
                rotate_image:
                  type: boolean
                  default: false
                  description: >-
                    Когда `true`, сервис пробует поворачивать входное
                    изображение с шагом 90 градусов и использует ориентацию,
                    обеспечивающую наилучшее обнаружение лица. Полезно, когда
                    отсутствуют данные ориентации EXIF. Увеличивает задержку
                    ответа.
                  example: false
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Когда `true` (по умолчанию), сохраняет вызов как сессию типа
                    API, отправляет webhook `status.updated`, генерирует
                    предварительно подписанные URL для значений
                    `match_image_url` и регистрирует найденное лицо в вашем
                    индексе Поиска по лицу (зарегистрированные лица исключаются
                    из будущих поисков). Когда `false`, поиск является
                    однократным — сессия не сохраняется, а лицо не
                    регистрируется.
                  example: true
                vendor_data:
                  type: string
                  description: >-
                    Необязательный непрозрачный идентификатор (ваш user id,
                    email, UUID…), сохраняемый в сессии и возвращаемый обратно.
                    Он не исключает лица того же пользователя из результатов
                    поиска.
                  example: user-123
                metadata:
                  type: object
                  additionalProperties: true
                  description: >-
                    Необязательный объект JSON, сохраняемый вместе с сессией
                    (когда `save_api_request=true`) и возвращаемый обратно. В
                    multipart-запросах отправляйте его как строковое поле в
                    формате JSON — он парсится в объект.
                  example:
                    flow: dedup_check
            example:
              user_image: (binary JPEG/PNG selfie)
              search_type: most_similar
              rotate_image: false
              save_api_request: true
              vendor_data: user-123
              metadata:
                flow: dedup_check
      responses:
        '200':
          description: >-
            Поиск по лицу завершен. `face_search.matches` содержит до 5 похожих
            лиц, отсортированных по схожести; пустой массив означает, что ни
            одно зарегистрированное лицо не превысило минимальный порог
            схожести. `status` принимает значение `Declined` только при
            совпадениях со списком блокировки — совпадения-дубликаты возвращают
            `Approved`, поэтому проверяйте `matches` и `warnings`, а не только
            `status`. Если `save_api_request=true`, `request_id` является
            сохраненным id сессии. Каждое совпадение содержит `source`
            (`session`, `imported`, `list_entry` или `retained_template`),
            `vendor_user_id` и `biometric_template_id`; совпадение
            `retained_template` поступает из биометрического шаблона без
            изображений, сохраненного после удаления исходной сессии, и содержит
            `null` в полях сессии, `match_image_url` и `user_details`.
          content:
            application/json:
              examples:
                Blocklist hit (Declined):
                  summary: Лицо совпадает с лицом из списка блокировки
                  value:
                    request_id: a1b2c3d4-e5f6-7890-1234-567890abcdef
                    face_search:
                      status: Declined
                      total_matches: 1
                      matches:
                        - session_id: 882c42d5-8a4d-4d20-8080-a22f57822c86
                          session_number: 323442
                          similarity_percentage: 99.99
                          source: session
                          vendor_data: user-1
                          verification_date: '2025-01-01T00:00:00Z'
                          user_details:
                            full_name: Jane Marie Doe
                            document_type: ID
                            document_number: X1234567
                          match_image_url: https://<media-host>/face/3f6a1c2e/reference.jpg
                          status: Approved
                          is_blocklisted: true
                          is_allowlisted: false
                          api_service: null
                          vendor_user_id: 2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f
                          biometric_template_id: null
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 120
                              - 120
                            confidence: 0.732973
                        best_angle: 0
                      warnings:
                        - risk: FACE_IN_BLOCKLIST
                          feature: LIVENESS
                          additional_data:
                            blocklisted_session_id: 882c42d5-8a4d-4d20-8080-a22f57822c86
                            blocklisted_session_number: 323442
                            api_service: null
                          log_type: error
                          short_description: Face in blocklist
                          long_description: >-
                            The system identified a face in the blocklist, which
                            means the face is not allowed to be verified.
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                Duplicate found (Approved):
                  summary: >-
                    Лицо уже фигурировало в другой одобренной сессии —
                    информационное сообщение, не приводит к отклонению
                  value:
                    request_id: 5e0c3a1f-7b2d-4c8e-9f10-2a3b4c5d6e7f
                    face_search:
                      status: Approved
                      total_matches: 1
                      matches:
                        - session_id: 1f2e3d4c-5b6a-7980-1122-334455667788
                          session_number: 1024
                          similarity_percentage: 87.42
                          source: session
                          vendor_data: user-9
                          verification_date: '2025-11-20T09:15:00Z'
                          user_details: null
                          match_image_url: https://<media-host>/face/9c8b7a6d/reference.jpg
                          status: Approved
                          is_blocklisted: false
                          is_allowlisted: false
                          api_service: PASSIVE_LIVENESS
                          vendor_user_id: 2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f
                          biometric_template_id: null
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 120
                              - 120
                            confidence: 0.732973
                        best_angle: 0
                      warnings:
                        - risk: DUPLICATED_FACE
                          feature: LIVENESS
                          additional_data:
                            duplicated_session_id: 1f2e3d4c-5b6a-7980-1122-334455667788
                            duplicated_session_number: 1024
                            api_service: PASSIVE_LIVENESS
                          log_type: information
                          short_description: Duplicated face from other approved session
                          long_description: >-
                            The system identified a duplicated face from another
                            approved session, requiring further investigation.
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                No matches (Approved):
                  summary: >-
                    Ни одно зарегистрированное лицо не превысило минимальный
                    порог сходства
                  value:
                    request_id: 9d8c7b6a-5f4e-3d2c-1b0a-998877665544
                    face_search:
                      status: Approved
                      total_matches: 0
                      matches: []
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 120
                              - 120
                            confidence: 0.732973
                        best_angle: 0
                      warnings: []
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      Идентификатор сохраненной сессии при
                      `save_api_request=true` (доступен для использования с `GET
                      /v3/session/{sessionId}/decision/`); в противном случае
                      это временный корреляционный UUID.
                  face_search:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                        description: >-
                          `Declined`, только если сработало предупреждение
                          `FACE_IN_BLOCKLIST` или `POSSIBLE_FACE_IN_BLOCKLIST`.
                          Предупреждения о дубликатах совпадений и нескольких
                          лицах никогда не приводят к отклонению.
                      total_matches:
                        type: integer
                        description: Количество записей в `matches` (0–5).
                        example: 1
                      matches:
                        type: array
                        maxItems: 5
                        description: >-
                          До 5 лиц из вашего индекса поиска по лицу, превышающих
                          порог схожести, отсортированных по схожести (записи из
                          списка блокировки идут первыми при
                          `search_type=blocklisted_or_approved`). Пусто, если ни
                          одно зарегистрированное лицо не является достаточно
                          похожим.
                        items:
                          type: object
                          properties:
                            session_id:
                              type: string
                              format: uuid
                              nullable: true
                              description: >-
                                Идентификатор сессии верификации, к которой
                                относится совпавшее лицо. Имеет значение `null`,
                                если `source` равен `imported`, `list_entry` или
                                `retained_template`.
                              example: 882c42d5-8a4d-4d20-8080-a22f57822c86
                            session_number:
                              type: integer
                              nullable: true
                              description: >-
                                Понятный номер сессии, отображаемый в Business
                                Console. `null` для совпадений, не связанных с
                                сессиями.
                              example: 323442
                            similarity_percentage:
                              type: number
                              format: float
                              minimum: 0
                              maximum: 100
                              description: >-
                                Степень сходства между переданным лицом и
                                найденным лицом (0–100).
                              example: 99.99
                            source:
                              type: string
                              enum:
                                - session
                                - imported
                                - list_entry
                                - retained_template
                              description: >-
                                Откуда было зарегистрировано совпавшее лицо:
                                `session` — сессия верификации или сохраненный
                                отдельный вызов API; `imported` — лицо,
                                загруженное напрямую в профиль пользователя;
                                `list_entry` — лицо, прикрепленное к одному из
                                ваших списков; `retained_template` —
                                биометрический шаблон без изображения,
                                сохраненный у пользователя и доступный в списке
                                `/v3/biometric-templates/`.
                            vendor_data:
                              type: string
                              nullable: true
                              description: >-
                                `vendor_data` совпавшей сессии или связанного
                                пользователя для импортированных лиц и лиц с
                                сохранённым шаблоном.
                              example: user-1
                            vendor_user_id:
                              type: string
                              format: uuid
                              nullable: true
                              description: >-
                                Идентификатор связанного пользователя. `null`
                                для записей списка и совпадений сессий без
                                пользователя.
                              example: 2f7c1a9e-4b28-4a6d-97f1-83576f80e1b4
                            biometric_template_id:
                              type: string
                              format: uuid
                              nullable: true
                              description: >-
                                Идентификатор сохранённого биометрического
                                шаблона. Задаётся, только если `source` равен
                                `retained_template`; в противном случае `null`.
                              example: null
                            verification_date:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Время первоначального захвата совпавшего лица
                                или время создания сохранённого шаблона
                                (`YYYY-MM-DDThh:mm:ssZ`). `null` для совпадений
                                типа `list_entry`.
                              example: '2025-01-01T00:00:00Z'
                            user_details:
                              type: object
                              nullable: true
                              description: >-
                                Данные личности, извлечённые во время проверки
                                документов в совпавшей сессии. `null`, если в
                                совпавшей сессии нет данных документов
                                (например, в сессиях только с проверкой
                                живости), и всегда `null` для совпадений с
                                `retained_template`. Для совпадений с `source:
                                imported` заполняется из профиля пользователя:
                                `full_name` задано,
                                `document_type`/`document_number` null.
                              properties:
                                full_name:
                                  type: string
                                  nullable: true
                                  example: Jane Marie Doe
                                document_type:
                                  type: string
                                  nullable: true
                                  example: ID
                                document_number:
                                  type: string
                                  nullable: true
                                  example: X1234567
                            match_image_url:
                              type: string
                              nullable: true
                              description: >-
                                URL с ограниченным сроком действия
                                (`https://<media-host>/...`) эталонного
                                изображения совпавшего лица, если
                                `save_api_request=true`. При
                                `save_api_request=false` это внутренний путь
                                хранилища, недоступный для прямого скачивания.
                                Всегда `null` для совпадений
                                `retained_template`, поскольку сохранённые
                                шаблоны не содержат изображения.
                              example: https://<media-host>/face/3f6a1c2e/reference.jpg
                            status:
                              type: string
                              nullable: true
                              description: >-
                                Статус сопоставленной сессии (`Approved`,
                                `Declined`, `In Review`, …). `null` для
                                совпадений `imported`/`list_entry`.
                              example: Approved
                            is_blocklisted:
                              type: boolean
                              description: >-
                                `true`, если совпавшее лицо находится в вашем
                                списке блокировки лиц. Любое достаточно близкое
                                совпадение из списка блокировки отклоняет поиск.
                            is_allowlisted:
                              type: boolean
                              description: >-
                                `true`, если совпавшее лицо находится в одном из
                                ваших белых списков. Совпадения из белого списка
                                подавляют предупреждения о дубликатах.
                            api_service:
                              type: string
                              nullable: true
                              description: >-
                                Задаётся, если сопоставленное лицо было
                                зарегистрировано с помощью автономного вызова
                                API (например, `PASSIVE_LIVENESS`); `null` для
                                обычных сессий верификации и импортированных
                                лиц.
                              example: null
                      user_image:
                        type: object
                        description: >-
                          Результаты обнаружения лица для переданного
                          изображения. Элементы здесь содержат только `bbox` и
                          `confidence`.
                        properties:
                          entities:
                            type: array
                            description: >-
                              Одна запись на каждое обнаруженное лицо. Поиск
                              выполняется по самому крупному лицу.
                            items:
                              type: object
                              properties:
                                bbox:
                                  type: array
                                  items:
                                    type: integer
                                  minItems: 4
                                  maxItems: 4
                                  description: >-
                                    Ограничивающий прямоугольник `[x_min, y_min,
                                    x_max, y_max]` в пикселях.
                                  example:
                                    - 40
                                    - 40
                                    - 120
                                    - 120
                                confidence:
                                  type: number
                                  format: float
                                  minimum: 0
                                  maximum: 1
                                  description: Уверенность обнаружения лица (0–1).
                                  example: 0.732973
                          best_angle:
                            type: integer
                            description: >-
                              Поворот (в градусах), при котором было достигнуто
                              наилучшее обнаружение лица; отличен от нуля,
                              только если `rotate_image=true` скорректировал
                              ориентацию. На этом endpoint никогда не бывает
                              null (по умолчанию 0, если модель его опускает).
                            example: 0
                      warnings:
                        type: array
                        description: >-
                          Сигналы риска. `FACE_IN_BLOCKLIST` /
                          `POSSIBLE_FACE_IN_BLOCKLIST` (`error`) отклоняют
                          поиск; `MULTIPLE_FACES_DETECTED` (`warning`) и
                          `DUPLICATED_FACE` / `POSSIBLE_DUPLICATED_FACE`
                          (`information`) носят рекомендательный характер.
                        items:
                          type: object
                          properties:
                            risk:
                              type: string
                              enum:
                                - MULTIPLE_FACES_DETECTED
                                - FACE_IN_BLOCKLIST
                                - POSSIBLE_FACE_IN_BLOCKLIST
                                - DUPLICATED_FACE
                                - POSSIBLE_DUPLICATED_FACE
                              description: Машиночитаемый код риска.
                            feature:
                              type: string
                              enum:
                                - LIVENESS
                              description: >-
                                Функция, вызвавшая предупреждение. На этом
                                endpoint всегда `LIVENESS`.
                            additional_data:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                `null` для `MULTIPLE_FACES_DETECTED`. Совпадения
                                со списком блокировки содержат
                                `{blocklisted_session_id,
                                blocklisted_session_number, api_service}`;
                                дубликаты содержат `{duplicated_session_id,
                                duplicated_session_number, api_service}`,
                                указывающие на первую совпавшую сессию.
                            log_type:
                              type: string
                              enum:
                                - error
                                - warning
                                - information
                              description: >-
                                Серьёзность. Предупреждения `error` переводят
                                `status` в `Declined`; записи `warning` и
                                `information` носят информационный характер и
                                сами по себе никогда не приводят к отклонению.
                            short_description:
                              type: string
                              description: >-
                                Краткая сводка риска в одну строку в понятном
                                человеку формате.
                            long_description:
                              type: string
                              description: Понятное объяснение риска.
                  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: >-
                      Временная метка ISO 8601 (UTC) момента генерации ответа,
                      например `2026-06-12T01:04:42.763237+00:00`.
        '400':
          description: >-
            Ошибка валидации. Возвращается, если `user_image` отсутствует,
            превышает 5 МБ, имеет неподдерживаемое расширение или если в
            отправленном изображении **лицо не обнаружено**. Ошибки полей
            используют обёртку DRF `{field: [messages]}`; сбои обнаружения лица
            используют `{"error": ...}`.
          content:
            application/json:
              examples:
                No face detected:
                  summary: >-
                    Изображение успешно декодируется, но не содержит
                    обнаруживаемого лица
                  value:
                    error: No face detected in the image
                Missing image:
                  summary: '`user_image` не включён в данные формы'
                  value:
                    user_image:
                      - No file was submitted.
                Unsupported file extension:
                  summary: Расширение файла отличается от tiff/jpg/jpeg/png/webp
                  value:
                    user_image:
                      - >-
                        File extension “txt” is not allowed. Allowed extensions
                        are: tiff, jpg, jpeg, png, webp.
                File too large:
                  summary: Размер загружаемого файла превышает лимит в 5 МБ
                  value:
                    user_image:
                      - File size should not exceed 5 MB
        '403':
          description: >-
            В доступе отказано. Возвращается, если заголовок `x-api-key`
            отсутствует, а также если баланс вызывающей организации не покрывает
            вызов; неверный, отозванный или истекший ключ возвращает `401`.
            Отсутствующий ключ возвращает `403` с `{"detail": ...}`; неверный,
            отозванный или истекший ключ возвращает `401`. При нехватке кредитов
            возвращается `403` с `{"error": ...}` до начала любой обработки
            изображения.
          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.
                      Please top up at https://business.didit.me
        '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/face-search/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'user_image=@./selfie.jpg' \
              -F 'search_type=most_similar' \
              -F 'save_api_request=true' \
              -F 'vendor_data=user-123'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.face_search.search(
                user_image=open("user_image.jpg", "rb"),
                search_type="most_similar",
                rotate_image=False,
                save_api_request=True,
                vendor_data="user-123",
                metadata={"flow": "dedup_check"},
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

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

            const result = await didit.faceSearch.search({
              user_image: await fileFromPath("user_image.jpg"),
              search_type: "most_similar",
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "dedup_check" },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FaceSearch.Search(ctx, didit.FaceSearchSearchParams{\n\tUserImage:      didit.FileFromPath(\"user_image.jpg\"),\n\tSearchType:     didit.Some(didit.FaceSearchSearchParamsSearchType(\"most_similar\")),\n\tRotateImage:    didit.Bool(false),\n\tSaveAPIRequest: didit.Bool(true),\n\tVendorData:     didit.String(\"user-123\"),\n\tMetadata:       didit.Some(map[string]any{\"flow\": \"dedup_check\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import java.util.Map;

            import me.didit.Didit;

            import me.didit.types.FaceSearchSearchParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.faceSearch().search(FaceSearchSearchParams.builder()
                    .userImage(Path.of("user_image.jpg"))
                    .searchType(FaceSearchSearchParams.SearchType.of("most_similar"))
                    .rotateImage(false)
                    .saveApiRequest(true)
                    .vendorData("user-123")
                    .metadata(Map.of("flow", "dedup_check"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;
            use Didit\File;

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

            $result = $didit->faceSearch->search([
                'user_image' => File::fromPath('user_image.jpg'),
                'search_type' => 'most_similar',
                'rotate_image' => false,
                'save_api_request' => true,
                'vendor_data' => 'user-123',
                'metadata' => ['flow' => 'dedup_check'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.face_search.search(
              user_image: Pathname("user_image.jpg"),
              search_type: "most_similar",
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "dedup_check" }
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Collections.Generic;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.FaceSearch.SearchAsync(new
            FaceSearchSearchParams

            {
                UserImage = FileUpload.FromPath("user_image.jpg"),
                SearchType = new FaceSearchSearchParamsSearchType("most_similar"),
                RotateImage = false,
                SaveApiRequest = true,
                VendorData = "user-123",
                Metadata = new Dictionary<string, object> { ["flow"] = "dedup_check" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  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.