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

# Create List API: Allowlist & Daftar Kustom

> POST /v3/lists/: buat allowlist atau daftar kustom baru untuk aplikasi Didit Anda. Daftar blokir sistem disediakan otomatis. Bayar per panggilan, tanpa kontrak.



Prompt API Pembuatan Daftar
        Salin prompt ke papan klip



      
      

\<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>



      
      

Tempel ke

Buat daftar untuk aplikasi Anda. Hanya daftar `allowlist` dan `custom` yang dapat dibuat: Didit menyediakan satu daftar blokir sistem untuk setiap jenis entri, dan Anda menambahkan entri ke daftar tersebut dengan [Buat entri](https://docs.didit.me/id/management-api/lists/create-entry.md).Pilih `entry_type` dengan hati-hati: nilainya tidak dapat diubah nanti, dan nilai ini menentukan bagaimana setiap nilai divalidasi saat Anda menambahkannya. Lihat [Daftar](https://docs.didit.me/id/management-api/lists/overview.md) untuk mengetahui fungsi setiap jenis daftar.


## OpenAPI

````yaml id/openapi-25.json POST /v3/lists/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/lists/:
    post:
      tags:
        - Lists
      summary: Buat daftar
      description: >-
        Membuat allowlist atau daftar kustom dalam aplikasi yang memiliki kunci
        API tersebut. Daftar blokir tidak dapat dibuat: Didit menyediakan satu
        daftar blokir sistem per jenis entri, dan Anda menambahkannya dengan
        [Buat entri
        daftar](https://docs.didit.me/id/management-api/lists/create-entry).
        `entry_type` tidak dapat diubah setelah pembuatan dan menentukan
        bagaimana nilai entri divalidasi dan dicocokkan. Entri allowlist
        menandai item yang cocok sebagai tepercaya (misalnya, allowlist wajah
        melewati tindakan wajah duplikat) dan tidak pernah mengesampingkan
        kecocokan daftar blokir; rujuk daftar apa pun dalam kondisi aturan alur
        kerja atau aturan transaksi dengan `value_type: "list"`. Kunci API
        dengan cakupan memerlukan `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: >-
                    Nama daftar. Harus berbeda dari nama setiap daftar lain di
                    aplikasi, termasuk daftar sistem.
                description:
                  type: string
                  default: ''
                  description: Deskripsi teks bebas opsional.
                list_type:
                  type: string
                  enum:
                    - allowlist
                    - custom
                  description: >-
                    `allowlist` atau `custom`. `blocklist` ditolak dengan kode
                    `400`.
                entry_type:
                  type: string
                  enum:
                    - face
                    - document
                    - phone
                    - email
                    - ip_address
                    - device_fingerprint
                    - wallet_address
                    - bank_account
                    - country
                    - user
                    - business
                    - key
                  description: >-
                    Apa yang dimuat dalam daftar: `face`, `document` (nomor
                    dokumen), `phone`, `email`, `ip_address` (alamat atau
                    rentang CIDR), `device_fingerprint`, `wallet_address`,
                    `bank_account`, `country` (ISO 3166-1 alpha-3), `user` atau
                    `business` (`vendor_data` Anda), atau `key` (string apa
                    pun). Ini menentukan cara nilai entri divalidasi dan
                    dicocokkan. Tidak dapat diubah nanti.
            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: Daftar telah dibuat.
          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: Isi permintaan tidak valid.
          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: >-
            Kunci API dengan cakupan terbatas telah kedaluwarsa. Kegagalan
            autentikasi lainnya mengembalikan `403`.
          content:
            application/json:
              examples:
                Expired API key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Header `x-api-key` tidak ada (kunci yang salah, dicabut, atau
            kedaluwarsa menghasilkan `401`), atau kunci API dengan cakupan
            tertentu tidak memiliki `workflows: write` atau digunakan dari
            alamat IP di luar daftar izinnya.
          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: Daftar blokir, daftar izin, atau daftar kustom dari satu aplikasi.
      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: >-
            Pengidentifikasi daftar. Gunakan ini sebagai `list_uuid` di endpoint
            daftar dan entri, serta sebagai nilai dari kondisi aturan alur kerja
            atau transaksi dengan `value_type: "list"`.
        name:
          type: string
          maxLength: 255
          description: Nama daftar, unik di antara daftar milik aplikasi.
        description:
          type: string
          description: Deskripsi teks bebas. String kosong jika tidak diatur.
        list_type:
          type: string
          enum:
            - blocklist
            - allowlist
            - custom
          description: >-
            `blocklist`: kecocokan akan menolak sesi atau transaksi (hanya
            daftar sistem, satu per tipe entri). `allowlist`: item yang cocok
            dipercaya, misalnya allowlist wajah melewati tindakan untuk wajah
            duplikat; tidak pernah menimpa kecocokan daftar blokir. `custom`:
            digunakan dalam kondisi aturan alur kerja dan transaksi
            (`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: >-
            Apa yang dimuat dalam daftar: `face`, `document` (nomor dokumen),
            `phone`, `email`, `ip_address` (alamat atau rentang CIDR),
            `device_fingerprint`, `wallet_address`, `bank_account`, `country`
            (ISO 3166-1 alpha-3), `user` atau `business` (`vendor_data` Anda),
            atau `key` (string apa pun). Ini menentukan cara nilai entri
            divalidasi dan dicocokkan.
        is_system:
          type: boolean
          description: >-
            `true` untuk daftar yang disediakan oleh Didit: satu daftar blokir
            per tipe entri (`face`, `document`, `phone`, `email`, `ip_address`,
            `device_fingerprint`, `wallet_address`, `bank_account`, `user`,
            `business`), daftar kustom **Negara Berisiko Tinggi**, dan daftar
            izin sistem. Daftar sistem tidak dapat diganti namanya, diedit, atau
            dihapus; Anda dapat menambahkan dan menghapus entrinya.
        entry_count:
          type: integer
          minimum: 0
          description: Jumlah entri yang saat ini ada dalam daftar.
        last_entry_added_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Waktu entri saat ini yang terbaru ditambahkan. `null` untuk daftar
            kosong.
        created_at:
          type: string
          format: date-time
          description: Waktu daftar dibuat.
        updated_at:
          type: string
          format: date-time
          description: Waktu daftar terakhir diperbarui.
  responses:
    RateLimitedWrite:
      description: >-
        Batas tulis bersama sebesar 300 permintaan per menit per kunci API telah
        terlampaui. Patuhi `Retry-After` sebelum mencoba lagi.
      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: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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