> ## 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: Allowlist и кастомный список

> POST /v3/lists/: создание allowlist или кастомного списка в Didit. Системные blocklist создаются автоматически. Оплата за вызов, без контрактов.



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



      
      

\<pre>

\`Create a new allowlist or custom list in my Didit application through the Management API.

Endpoint:
POST https://verification.didit.me/v3/lists/

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

Goal:
\- Create an allowlist (matching items are treated as trusted, for example to skip a duplicated-face or duplicated-IP action; it never overrides a blocklist match) or a custom list (for workflow conditions, transaction rules, or manual review).
\- System blocklists are provisioned by Didit, one per entry type. You cannot create a blocklist.

Request body (application/json):
\{
"name": "Trusted office IPs",          // required, at most 255 characters, unique among the application's lists
"description": "Office egress ranges", // optional
"list_type": "allowlist",              // required: "allowlist" or "custom"
"entry_type": "ip_address"             // required: face | document | phone | email | ip_address | device_fingerprint | wallet_address | bank_account | country | user | business | key
}

entry_type is fixed once the list exists: it decides how entry values are validated and matched.

Example call:
curl -X POST "https://verification.didit.me/v3/lists/" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Trusted office IPs", "list_type": "allowlist", "entry_type": "ip_address"}'

Example response (201):
\{
"uuid": "66666666-7777-8888-9999-000000000000",
"name": "Trusted office IPs",
"description": "",
"list_type": "allowlist",
"entry_type": "ip_address",
"is_system": false,
"entry_count": 0,
"last_entry_added_at": null,
"created_at": "2026-10-12T09:15:44.031876Z",
"updated_at": "2026-10-12T09:15:44.031876Z"
}

Persist the returned uuid: use it as list_uuid in the entry calls, and as the value of a workflow or transaction rule condition with value_type "list".

Failure modes:
\- 400: list_type is "blocklist", a required field is missing, name is longer than 255 characters, entry_type is unknown, or another list of the application already has this name ({ "name": ["A list with this name already exists for this application."] }).
\- 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.
\- 429: rate limited (see /integration/rate-limiting); back off and retry.

Side effects:
\- Creates a new list in the application the API key belongs to.

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

\</pre>



      
      

Вставьте в

Создайте список для вашего приложения. Можно создавать только списки типов `allowlist` и `custom`: Didit создаёт один системный список блокировки для каждого типа записей, и вы добавляете в него записи с помощью [Создать запись](https://docs.didit.me/ru/management-api/lists/create-entry.md).Выбирайте `entry_type` внимательно: его нельзя изменить позже, и от него зависит, как будет проверяться каждое значение при добавлении. См. [Списки](https://docs.didit.me/ru/management-api/lists/overview.md), чтобы узнать, что делает каждый тип списка.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/lists/
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/:
    post:
      tags:
        - Lists
      summary: Создать список
      description: >-
        Создаёт список разрешений или кастомный список в приложении, которому
        принадлежит API-ключ. Списки блокировки создавать нельзя: Didit
        предоставляет один системный список блокировки для каждого типа записей,
        и вы добавляете элементы в него через [Create a list
        entry](https://docs.didit.me/ru/management-api/lists/create-entry).
        Параметр `entry_type` нельзя изменить после создания; он определяет, как
        валидируются и сопоставляются значения записей. Записи в списке
        разрешений отмечают совпавшие элементы как доверенные (например, список
        разрешений лиц пропускает действие по дубликату лица) и никогда не
        переопределяют совпадение со списком блокировки; ссылайтесь на любой
        список из условия правила сценария или транзакции с помощью `value_type:
        "list"`. Для API-ключа с ограниченными правами требуется разрешение
        `workflows: write`.
      operationId: create_list
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - list_type
                - entry_type
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 255
                  description: >-
                    Название списка. Должно отличаться от названий всех
                    остальных списков приложения, включая системные списки.
                description:
                  type: string
                  default: ''
                  description: Необязательное текстовое описание в свободной форме.
                list_type:
                  type: string
                  enum:
                    - allowlist
                    - custom
                  description: >-
                    `allowlist` или `custom`. `blocklist` отклоняется с кодом
                    `400`.
                entry_type:
                  type: string
                  enum:
                    - face
                    - document
                    - phone
                    - email
                    - ip_address
                    - device_fingerprint
                    - wallet_address
                    - bank_account
                    - country
                    - user
                    - business
                    - key
                  description: >-
                    Что содержит список: `face`, `document` (номер документа),
                    `phone`, `email`, `ip_address` (IP-адрес или диапазон CIDR),
                    `device_fingerprint`, `wallet_address`, `bank_account`,
                    `country` (ISO 3166-1 alpha-3), `user` или `business` (ваши
                    `vendor_data`), либо `key` (любая строка). Это определяет,
                    как проверяются и сопоставляются значения записей. Его
                    нельзя изменить позже.
            examples:
              IP allowlist:
                value:
                  name: Trusted office IPs
                  description: Office egress ranges
                  list_type: allowlist
                  entry_type: ip_address
              Custom country list:
                value:
                  name: Enhanced due diligence countries
                  list_type: custom
                  entry_type: country
      responses:
        '201':
          description: Список создан.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComplianceList'
              examples:
                New allowlist:
                  value:
                    uuid: 22222222-3333-4444-5555-666666666666
                    name: Trusted office IPs
                    description: Office egress ranges
                    list_type: allowlist
                    entry_type: ip_address
                    is_system: false
                    entry_count: 0
                    last_entry_added_at: null
                    created_at: '2026-10-12T09:15:44.031876Z'
                    updated_at: '2026-10-12T09:15:44.031876Z'
        '400':
          description: Некорректное тело запроса.
          content:
            application/json:
              examples:
                Blocklist refused:
                  value:
                    list_type:
                      - >-
                        Cannot create additional blocklist lists. System
                        blocklists are auto-created for each application.
                Duplicate name:
                  value:
                    name:
                      - >-
                        A list with this name already exists for this
                        application.
                Missing fields:
                  value:
                    name:
                      - This field is required.
                    list_type:
                      - This field is required.
                    entry_type:
                      - This field is required.
                Unknown entry type:
                  value:
                    entry_type:
                      - '"iban" is not a valid choice.'
                Name too long:
                  value:
                    name:
                      - Ensure this field has no more than 255 characters.
        '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.
        '429':
          $ref: '#/components/responses/RateLimitedWrite'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST 'https://verification.didit.me/v3/lists/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "name": "Trusted office IPs",
                "description": "Office egress ranges",
                "list_type": "allowlist",
                "entry_type": "ip_address"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.lists.create(
                name="Trusted office IPs",
                description="Office egress ranges",
                list_type="allowlist",
                entry_type="ip_address",
            )
            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.create({
              name: "Trusted office IPs",
              description: "Office egress ranges",
              list_type: "allowlist",
              entry_type: "ip_address",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Lists.Create(ctx, didit.ListsCreateParams{\n\tName:        \"Trusted office IPs\",\n\tDescription: didit.String(\"Office egress ranges\"),\n\tListType:    \"allowlist\",\n\tEntryType:   \"ip_address\",\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.ListsCreateParams;

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

            var result = client.lists().create(ListsCreateParams.builder()
                    .name("Trusted office IPs")
                    .description("Office egress ranges")
                    .listType(ListsCreateParams.ListType.of("allowlist"))
                    .entryType(ListsCreateParams.EntryType.of("ip_address"))
                    .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->create([
                'name' => 'Trusted office IPs',
                'description' => 'Office egress ranges',
                'list_type' => 'allowlist',
                'entry_type' => 'ip_address',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.lists.create(
              name: "Trusted office IPs",
              description: "Office egress ranges",
              list_type: "allowlist",
              entry_type: "ip_address"
            )
            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.CreateAsync(new ListsCreateParams
            {
                Name = "Trusted office IPs",
                Description = "Office egress ranges",
                ListType = "allowlist",
                EntryType = "ip_address",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    ComplianceList:
      type: object
      description: >-
        Список блокировки, список разрешений или кастомный список одного
        приложения.
      required:
        - uuid
        - name
        - description
        - list_type
        - entry_type
        - is_system
        - entry_count
        - last_entry_added_at
        - created_at
        - updated_at
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Идентификатор списка. Используйте его как `list_uuid` в endpoint'ах
            списков и записей, а также как значение условия правила сценария или
            правила транзакции с `value_type: "list"`.
        name:
          type: string
          maxLength: 255
          description: Название списка, уникальное среди списков приложения.
        description:
          type: string
          description: Описание в виде произвольного текста. Пустая строка, если не задано.
        list_type:
          type: string
          enum:
            - blocklist
            - allowlist
            - custom
          description: >-
            `blocklist`: совпадение отклоняет сессию или транзакцию (только
            системные списки, по одному на каждый тип записи). `allowlist`:
            совпадающие элементы считаются доверенными, например список
            разрешённых лиц пропускает действие при обнаружении дубликата лица;
            никогда не переопределяет совпадение со списком блокировки.
            `custom`: используется в условиях правил сценария и транзакций
            (`value_type: "list"`).
        entry_type:
          type: string
          enum:
            - face
            - document
            - phone
            - email
            - ip_address
            - device_fingerprint
            - wallet_address
            - bank_account
            - country
            - user
            - business
            - key
          description: >-
            Что содержит список: `face`, `document` (номер документа), `phone`,
            `email`, `ip_address` (IP-адрес или диапазон CIDR),
            `device_fingerprint`, `wallet_address`, `bank_account`, `country`
            (ISO 3166-1 alpha-3), `user` или `business` (ваши `vendor_data`),
            либо `key` (любая строка). Это определяет, как проверяются и
            сопоставляются значения записей.
        is_system:
          type: boolean
          description: >-
            `true` для списков, предоставляемых Didit: по одному списку
            блокировки на каждый тип записи (`face`, `document`, `phone`,
            `email`, `ip_address`, `device_fingerprint`, `wallet_address`,
            `bank_account`, `user`, `business`), пользовательский список **High
            Risk Countries** и системные белые списки. Системные списки нельзя
            переименовывать, редактировать или удалять; вы можете добавлять и
            удалять их записи.
        entry_count:
          type: integer
          minimum: 0
          description: Количество записей, находящихся в списке в данный момент.
        last_entry_added_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Время добавления самой новой текущей записи. `null` для пустого
            списка.
        created_at:
          type: string
          format: date-time
          description: Время создания списка.
        updated_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.