> ## 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 загрузки лица: биометрические списки

> Загрузите лицо в формате base64 в список блокировки или разрешённых лиц Didit. Didit извлекает биометрию и использует её при будущем сравнении лиц.



Промпт API для загрузки лица в список
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`Upload a face image directly to a Didit face blocklist or allowlist through the Management API.

Endpoint:
POST https://verification.didit.me/v3/lists/{list_uuid}/entries/face-upload/

Authentication:
Use the x-api-key header with my Didit API key. A scoped API key needs workflows: write.

Goal:
\- Add a face to a face blocklist or allowlist when I do not have a verification session to reference. Didit detects the faces in the image, keeps the largest one, stores the image and a crop of that face, computes a biometric face template that new sessions are compared against, and creates the entry.
\- A face blocklist entry declines future sessions whose face matches. A face allowlist entry stops a matching face from triggering the duplicated-face action, but does not override blocklist matches or the other checks.

When NOT to use this:
\- If I am listing a face from an existing verification session, use POST /v3/lists/{list_uuid}/entries/ with reference_session_id instead, so the entry links back to the session.

Path parameter:
\- list_uuid: must be a list with entry_type "face" and list_type "blocklist" or "allowlist". Other lists return 400.

Request body (application/json):
\{
"image": "/9j/4AAQSkZ...",        // required: base64-encoded JPEG or PNG, at most 2 MB once decoded. Do not include a "data:image/..." prefix.
"comment": "Known fraud attempt"  // optional
}

Important constraints:
\- The image must show a clearly visible face. If no face is detected, the API returns 400 and no entry is created. If it shows several faces, Didit uses the largest one.
\- In a sandbox application the image is not analysed or stored: the entry has display_label "Sandbox face entry" and metadata.sandbox true, and matches nothing.

Example call:
curl -X POST "https://verification.didit.me/v3/lists/{list_uuid}/entries/face-upload/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"image": "/9j/4AAQSkZ...", "comment": "Known fraud attempt"}'

Example response (201):
\{
"uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"value": "44444444-5555-6666-7777-888888888888",
"display_label": "Manually uploaded face",
"comment": "Known fraud attempt",
"added_by": "api",
"reference_session_id": null,
"reference_session_number": null,
"reference_session_type": null,
"reference_object_uuid": "44444444-5555-6666-7777-888888888888",
"metadata": { "reference_image_url": "https://<media-host>/face_reference_image.jpg" },
"created_at": "2026-10-12T10:12:18.904467Z"
}

value and reference_object_uuid are the UUID of the new face. metadata.reference_image_url is a short-lived signed URL (null for a scoped key without media: read).

Failure modes:
\- 400: the list is not a face list ({ "detail": "Face upload is only available for face-type lists." }), the list is a custom face list, image is missing, larger than 2 MB, not valid base64, not a readable JPEG or PNG, or shows no face ({ "image": "No face detected in the image. Please upload a clear photo with a visible face." }).
\- 401: the API key has expired.
\- 403: missing x-api-key (a wrong, revoked or expired key gets 401) ({ "detail": "You do not have permission to perform this action." }), or a scoped key without workflows: write.
\- 404: list not found in this application ({ "detail": "List not found." }).
\- 503: face analysis is temporarily unavailable; no entry was created, retry later.
\- 429: rate limited (see /integration/rate-limiting); back off and retry.

Side effects:
\- The face template is added to biometric matching. Future sessions matching a blocklisted face are declined. Future sessions matching an allowlisted face skip the duplicated-face action and include an informational allowlist warning.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

Вставьте в

Загрузите изображение лица в формате base64 в список блокировки или список разрешённых лиц. Didit находит лица на изображении, сохраняет самое крупное из них, хранит изображение и обрезанное изображение этого лица и вычисляет биометрический шаблон лица, с которым сравниваются новые сессии. Значение `value` новой записи является UUID этого лица.Доступно только для списков с `entry_type: face` и `list_type: blocklist` или `list_type: allowlist`.> [!TIP]
>
> Если вы хотите добавить в список блокировки или список разрешённых лиц лицо **из существующей сессии**, вместо этого используйте [Создать запись](https://docs.didit.me/ru/management-api/lists/create-entry.md) с `reference_session_id`: запись будет связана с сессией.> [!WARNING]
>
> Изображение должно содержать чётко видимое лицо и не превышать 2 МБ после декодирования. Если лицо не обнаружено, запрос возвращает `400` и запись не создаётся. Если анализ лиц временно недоступен, запрос возвращает `503`: повторите попытку позже.Чтобы удалить лицо из списка, [удалите его запись](https://docs.didit.me/ru/management-api/lists/delete-entry.md): запись больше не будет сопоставляться с новыми сессиями.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/lists/{list_uuid}/entries/face-upload/
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/lists/{list_uuid}/entries/face-upload/:
    post:
      tags:
        - Lists
      summary: Загрузить лицо в список
      description: >-
        Добавляет лицо в список блокировки лиц или список разрешённых лиц из
        изображения JPEG или PNG в кодировке base64, когда у вас нет сессии
        верификации, на которую можно сослаться. Didit обнаруживает лица на
        изображении, использует самое крупное и создаёт запись, чьи `value` и
        `reference_object_uuid` являются UUID нового лица. Лицо из списка
        блокировки приводит к отклонению новых сессий, чьё лицо совпадает; лицо
        из списка разрешённых пропускает действие для дублирующегося лица и
        никогда не переопределяет совпадение со списком блокировки. В приложении
        песочницы изображение не анализируется, и запись ни с чем не совпадает.
        Для API-ключа с ограниченными правами требуется `workflows: write`.
        Чтобы внести лицо в список из существующей сессии, используйте вместо
        этого [Create a list
        entry](https://docs.didit.me/ru/management-api/lists/create-entry) с
        `reference_session_id`.
      operationId: upload_list_entry_face
      parameters:
        - name: list_uuid
          in: path
          required: true
          description: >-
            UUID списка с `entry_type: face` и `list_type: blocklist` или
            `allowlist`.
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - image
              properties:
                image:
                  type: string
                  format: byte
                  description: >-
                    Изображение в формате JPEG или PNG в кодировке Base64,
                    размером не более 2 МБ после декодирования, с чётко видимым
                    лицом. Отправляйте чистую строку base64 без префикса
                    `data:image/...;base64,`.
                comment:
                  type: string
                  default: ''
                  description: >-
                    Необязательная текстовая заметка в свободной форме, например
                    причина внесения в список.
            examples:
              Face image:
                value:
                  image: /9j/4AAQSkZJRgABAQAAAQABAAD...
                  comment: Known fraud attempt
      responses:
        '201':
          description: Запись лица создана.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComplianceListEntry'
              examples:
                Uploaded face:
                  value:
                    uuid: cccccccc-dddd-eeee-ffff-000000000000
                    value: 44444444-5555-6666-7777-888888888888
                    display_label: Manually uploaded face
                    comment: Known fraud attempt
                    added_by: api
                    reference_session_id: null
                    reference_session_number: null
                    reference_session_type: null
                    reference_object_uuid: 44444444-5555-6666-7777-888888888888
                    metadata:
                      reference_image_url: >-
                        https://media.example.com/faces/reference.jpg?expires=1760263938&signature=3f9a1c
                    created_at: '2026-10-12T10:12:18.904467Z'
                Sandbox application:
                  value:
                    uuid: cccccccc-dddd-eeee-ffff-000000000000
                    value: 44444444-5555-6666-7777-888888888888
                    display_label: Sandbox face entry
                    comment: Known fraud attempt
                    added_by: api
                    reference_session_id: null
                    reference_session_number: null
                    reference_session_type: null
                    reference_object_uuid: 44444444-5555-6666-7777-888888888888
                    metadata:
                      sandbox: true
                    created_at: '2026-10-12T10:12:18.904467Z'
        '400':
          description: >-
            Список не принимает загрузку лиц, либо изображение отсутствует,
            недействительно, слишком велико или не содержит пригодного для
            использования лица. Запись создана не была.
          content:
            application/json:
              examples:
                Not a face list:
                  value:
                    detail: Face upload is only available for face-type lists.
                Custom face list:
                  value:
                    detail: >-
                      Face upload is only available for face blocklists and
                      allowlists.
                Missing image:
                  value:
                    image:
                      - This field is required.
                Invalid base64:
                  value:
                    image:
                      - Invalid base64 encoding.
                Too large:
                  value:
                    image:
                      - Image exceeds maximum size of 2 MB.
                Unreadable image:
                  value:
                    image: Invalid image. Provide a valid base64-encoded JPG or PNG.
                No face:
                  value:
                    image: >-
                      No face detected in the image. Please upload a clear photo
                      with a visible face.
                No usable face:
                  value:
                    image: Could not extract face embedding. Try a different image.
        '401':
          description: >-
            Срок действия API-ключа с ограниченной областью действия истёк.
            Другие ошибки аутентификации возвращают `403`.
          content:
            application/json:
              examples:
                Expired API key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Заголовок `x-api-key` отсутствует (при неверном, отозванном или
            истёкшем ключе возвращается `401`), либо API-ключ с ограниченной
            областью действия не имеет разрешения `workflows: write` или
            используется с IP-адреса вне своего списка разрешённых.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without workflows access:
                  value:
                    detail: This API key has no write access to workflows.
        '404':
          description: >-
            Списка с таким UUID не существует в приложении этого API-ключа, или
            он был удален.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: List not found.
        '429':
          $ref: '#/components/responses/RateLimitedWrite'
        '503':
          description: >-
            Анализ лица временно недоступен. Запись не была создана; повторите
            попытку позже.
          content:
            application/json:
              examples:
                Unavailable:
                  value:
                    detail: Service temporarily unavailable. Please try again later.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/lists/11111111-2222-3333-4444-555555555555/entries/face-upload/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d "{\"image\": \"$(base64 < face.jpg | tr -d '\n')\", \"comment\": \"Known fraud attempt\"}"
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.lists.entries.upload_face(
                "11111111-2222-3333-4444-555555555555",
                image="/9j/4AAQSkZJRgABAQAAAQABAAD...",
                comment="Known fraud attempt",
            )
            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.lists.entries.uploadFace("11111111-2222-3333-4444-555555555555",
            {
              image: "/9j/4AAQSkZJRgABAQAAAQABAAD...",
              comment: "Known fraud attempt",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Entries.UploadFace(ctx, \"11111111-2222-3333-4444-555555555555\", didit.ListsEntriesUploadFaceParams{\n\tImage:   \"/9j/4AAQSkZJRgABAQAAAQABAAD...\",\n\tComment: didit.String(\"Known fraud attempt\"),\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.ListsEntriesUploadFaceParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.lists().entries().uploadFace("11111111-2222-3333-4444-555555555555",
            ListsEntriesUploadFaceParams.builder()
                    .image("/9j/4AAQSkZJRgABAQAAAQABAAD...")
                    .comment("Known fraud attempt")
                    .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->lists->entries->uploadFace('11111111-2222-3333-4444-555555555555',
            [
                'image' => '/9j/4AAQSkZJRgABAQAAAQABAAD...',
                'comment' => 'Known fraud attempt',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.lists.entries.upload_face(
              "11111111-2222-3333-4444-555555555555",
              image: "/9j/4AAQSkZJRgABAQAAAQABAAD...",
              comment: "Known fraud attempt"
            )
            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.Lists.Entries.UploadFaceAsync("11111111-2222-3333-4444-555555555555",
            new ListsEntriesUploadFaceParams

            {
                Image = "/9j/4AAQSkZJRgABAQAAAQABAAD...",
                Comment = "Known fraud attempt",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    ComplianceListEntry:
      type: object
      description: Одно значение в списке.
      required:
        - uuid
        - value
        - display_label
        - comment
        - added_by
        - reference_session_id
        - reference_session_number
        - reference_session_type
        - reference_object_uuid
        - metadata
        - created_at
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Идентификатор записи. Используйте его в качестве `entry_uuid` в
            запросе «Удалить запись списка».
        value:
          type: string
          description: >-
            Значение из списка: номер телефона в формате E.164, адрес
            электронной почты, номер документа, IP-адрес или диапазон CIDR,
            цифровой отпечаток устройства, адрес кошелька, банковский счёт,
            трёхбуквенный код страны по стандарту ISO 3166-1 alpha-3,
            `vendor_data`, любая строка в списке типа `key` или UUID
            сохранённого лица в списке лиц. Отправляемые вами значения
            сохраняются в нижнем регистре, за исключением номеров телефонов и
            кодов стран. Сопоставление нечувствительно к регистру.
        display_label:
          type: string
          nullable: true
          maxLength: 512
          description: >-
            Понятная метка. Didit заполняет её для записей, взятых из сессии
            (например, имя владельца и номер документа), если вы ничего не
            передали.
        comment:
          type: string
          description: >-
            Примечание в виде произвольного текста. Пустая строка, если не
            задано.
        added_by:
          type: string
          nullable: true
          description: >-
            Кто добавил запись: `api` (API-ключ), адрес электронной почты
            пользователя консоли или `console`, `system` или `migration`
            (записи, созданные Didit), либо `rule` (действие правила транзакций
            или мониторинга).
        reference_session_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Сессия верификации, из которой была взята запись. `null`, если
            запись была добавлена по значению.
        reference_session_number:
          type: integer
          nullable: true
          description: >-
            Номер этой сессии в рамках приложения, как он отображается в
            консоли.
        reference_session_type:
          type: string
          nullable: true
          enum:
            - kyc
            - kyb
            - null
          description: >-
            `kyc` для сессии проверки физического лица, `kyb` для сессии
            верификации бизнеса, `null`, если сессия отсутствует.
        reference_object_uuid:
          type: string
          format: uuid
          nullable: true
          description: >-
            Запись, которой соответствует элемент: запись лица, документа,
            телефона или адреса электронной почты, считанная из сессии, лицо,
            созданное с помощью «Загрузить лицо в список», или переданный вами
            UUID (например, UUID транзакции или `didit_internal_id`
            пользователя).
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Дополнительный контекст. Содержит ключи, установленные Didit
            (перечисленные здесь), объединенные с любыми `metadata`, переданными
            вами при создании записи, и возвращается в сохраненном виде. `null`,
            если контекст отсутствует.
          properties:
            reference_image_url:
              type: string
              description: >-
                Записи лиц: короткоживущий подписанный URL, генерируемый заново
                при каждом вызове; `null` для API-ключа с ограниченными правами
                без `media: read`. Отсутствует, если к записи не привязано
                изображение.
            front_image_url:
              type: string
              description: >-
                Записи документов, содержащие изображение лицевой стороны
                документа: временный подписанный URL, генерируемый заново при
                каждом вызове; `null` для API-ключа с ограниченной областью
                действия без `media: read`.
            full_name:
              type: string
              description: 'Записи документов, полученные из сессии: полное имя владельца.'
            issuing_state:
              type: string
              description: >-
                Записи документов, полученные из сессии: страна выдачи по
                стандарту ISO 3166-1 alpha-3.
            document_type:
              type: string
              description: >-
                Записи документов, полученные из сессии: код типа документа,
                например `P`, `ID` или `DL`.
            region:
              type: string
              description: >-
                Записи документов, полученные из сессии: штат или провинция
                выдачи для документа регионального выпуска, пусто, если
                неприменимо. Не задаётся действием добавления элементов сессии в
                список блокировки.
            document_number:
              type: string
              description: 'Записи документов, полученные из сессии: номер документа.'
            face_image_source:
              type: string
              enum:
                - front_image_camera_front
                - back_image_camera_front
              description: >-
                Записи лиц, полученные из селфи с захвата документа: какое
                именно селфи. Отсутствует для лиц из проверки живости.
            reference_node_id:
              type: string
              nullable: true
              description: >-
                Записи лиц, полученные из селфи с захвата документа: узел
                верификации личности, из которого поступило селфи.
            fingerprint_tier:
              type: string
              nullable: true
              enum:
                - persistent_id
                - composite_hash
                - legacy_fp
                - unknown
                - null
              description: >-
                Записи цифрового отпечатка устройства, полученные из сессии:
                способ формирования отпечатка. `persistent_id` идентифицирует
                одно устройство; `composite_hash` и `legacy_fp` могут быть
                общими для устройств одной модели.
            sandbox:
              type: boolean
              description: >-
                `true` для записи лица, загруженной в приложении песочницы;
                такая запись ни с чем не совпадает.
            reference_type:
              type: string
              enum:
                - transaction
                - vendor_user
                - vendor_business
              description: >-
                Задаётся вами: объект, на который указывает
                `reference_object_uuid`, чтобы консоль ссылалась на него.
            reference_id:
              type: string
              description: 'Задаётся вами: идентификатор исходной записи.'
        created_at:
          type: string
          format: date-time
          description: Когда запись была добавлена.
  responses:
    RateLimitedWrite:
      description: >-
        Превышен общий лимит на запись в 300 запросов в минуту на один API-ключ.
        Подождите время, указанное в `Retry-After`, перед повторной попыткой.
      content:
        application/json:
          schema:
            type: object
            required:
              - detail
            properties:
              detail:
                type: string
          example:
            detail: >-
              Write request rate limit exceeded. You can make up to 300 requests
              per minute.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

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