> ## 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 Pencarian Registri KYB - Pencarian Perusahaan

> Didit POST /v3/kyb/search/ mencari kandidat perusahaan. Pencarian berhasil di sumber data berbayar: $0.50 per permintaan; profil ditagih terpisah.

Gunakan endpoint ini terlebih dahulu untuk menemukan kandidat registri perusahaan yang cocok.
Pencarian tidak membuat Manual Check yang tersimpan.

Pencarian mandiri yang berhasil dan menggunakan sumber data perusahaan berbayar dikenai biaya **\$0.50 per permintaan**, terlepas dari jumlah kandidat. Hasil kosong, pencarian yang gagal, dan hasil yang hanya berasal dari sumber lain tidak dikenai biaya. Pengambilan profil berikutnya ditagih secara terpisah.

Untuk pencarian yang dapat menggunakan sumber berbayar, Didit memeriksa dan memesan harga pencarian yang berlaku sebelum menghubungi registri.
Saldo yang tidak mencukupi mengembalikan `403` dengan `code: "insufficient_credits"`.
Penagihan kontrak mengikuti tarif pencarian yang telah Anda sepakati; tarif kontrak yang belum dikonfigurasi akan ditolak sebelum pencarian dilakukan.
Pencarian di sandbox tidak dikenai biaya.
Setiap pencarian yang berhasil dan diulang adalah permintaan baru yang dapat ditagih; pengiriman callback tidak menambah biaya pencarian.

Jika Anda mengirim `webhook_url`, Didit dapat langsung memberikan respons sementara penyedia menyelesaikan pencarian, lalu mengirim kandidat ke URL callback Anda saat sudah siap. Callback ini sengaja tidak ditandatangani, sehingga Anda tidak perlu mengonfigurasi rahasia webhook untuk notifikasi pencarian ini. Lihat [contoh payload callback pencarian](https://docs.didit.me/id/standalone-apis/kyb-registry.md#callback-pencarian).

Setelah Anda memilih `kyb_response_id` yang benar, panggil `POST /v3/kyb/select/` (Lite), `POST /v3/kyb/shareholders/`, atau `POST /v3/kyb/ubo/` untuk mengambil profil registri yang dapat ditagih pada tingkat yang Anda butuhkan.

> [!NOTE]
>
> `fetch_status` setiap kandidat bernilai `pending` saat pencarian dan tetap `pending` sampai Anda memilih kandidat tersebut. Pencarian hanya mencantumkan kandidat, dan tindakan select-lah yang mengambil profil lengkap. Jangan melakukan polling ke pencarian untuk menunggu status ini berubah.
>
> `kyb_response_id` adalah handle opak dan sementara yang hanya berlaku untuk satu permintaan pencarian. Kirimkan kembali persis seperti yang Anda terima, jangan pernah mengurai atau menurunkan apa pun dari isinya, dan perlu diketahui bahwa mengulang pencarian yang sama akan menghasilkan id baru. Pilih kandidat segera setelah pencarian, dan gunakan `registration_number` jika Anda memerlukan pengenal yang stabil untuk perusahaan itu sendiri.

## Tingkat pencarian

`tier` memilih tingkat registri yang rantai penyedianya dijalankan oleh pencarian: `basic` (default, rantai Lite), `shareholders`, atau `ubo`. Daftar kandidat berasal dari rantai tingkat tersebut, dan itu tidak selalu sama dengan sumber yang dibaca pencarian Lite. Oleh karena itu, pencarian Lite yang kosong tidak membuktikan bahwa registri tidak memiliki data perusahaan tersebut. Cari ulang pada tingkat yang Anda butuhkan.

Jika negara tidak menawarkan tingkat yang Anda sebutkan, pencarian dijalankan pada tingkat tertinggi yang ditawarkan negara itu hingga tingkat yang Anda minta. Negara yang sama sekali tidak memiliki data registri tidak tersedia untuk pemeriksaan registri; lanjutkan dengan memasukkan data perusahaan secara manual.

Cari pada tingkat yang ingin Anda beli, lalu ambil kandidat dari endpoint yang menjualnya:

| `tier` yang Anda cari | Endpoint yang mengambil kandidat |
| - | - |
| `basic` (default) | `POST /v3/kyb/select/` (Lite) |
| `shareholders` | `POST /v3/kyb/shareholders/` |
| `ubo` | `POST /v3/kyb/ubo/` |

## search\_type

`search_type` hanya menerima `contains`, dan nilai itu adalah default. Sumber registri di balik pencarian mencocokkan nama perusahaan berdasarkan apakah nama tersebut memuat teks pencarian, sehingga `start_with` dan `fuzzy` ditolak dengan `400` (`"start_with" is not a valid choice`) alih-alih diperlakukan diam-diam sebagai `contains`. Kirim `registration_number` untuk pencocokan perusahaan yang tepat.

## Pencarian yang di-hosting dan mandiri

`POST /v1/kyb/search/` adalah pencarian yang dijalankan oleh alur verifikasi yang di-hosting. Endpoint ini diautentikasi melalui sesi verifikasi, menjawab `403` untuk kunci API, dan tidak menerima `tier`. Konfigurasi registri KYB dari alur kerja yang menentukan rantai yang digunakan. Integrasi mandiri memanggil `POST /v2/kyb/search/` atau `POST /v3/kyb/search/` dengan `x-api-key` Anda. Input `tier` dan endpoint select bertingkat adalah cara integrasi mandiri menjangkau kandidat yang sama, pada tingkat yang dibutuhkannya.

## Menangani gangguan registri

Jika penyedia registri sementara tidak tersedia, endpoint mengembalikan `502` dengan kode yang stabil dan dapat dibaca mesin:

```json theme={null}
{
  "detail": "The company registry provider is temporarily unavailable.",
  "code": "kyb_registry_provider_unavailable"
}
```

Saat Anda menerima kode ini, biarkan pengguna melanjutkan dengan memasukkan data perusahaan secara manual, atau minta mereka mencoba lagi nanti. Pisahkan kesalahan validasi: input pencarian yang tidak valid mengembalikan `400` dan tidak menggunakan kode gangguan ini.

## Menangani negara yang tidak didukung dan batas pencarian

Ada dua kode stabil lainnya yang menandakan Anda harus berhenti mencoba ulang dan melanjutkan dengan memasukkan data perusahaan secara manual:

| Status | `code` | Kapan |
| - | - | - |
| `400` | `kyb_registry_country_unsupported` | Negara tidak memiliki sumber registri perusahaan pada tingkat mana pun. Keterbatasan ini bersifat permanen, sehingga mengulang pencarian yang sama tidak akan pernah berhasil. |
| `429` | `kyb_registry_search_limit_reached` | Aplikasi Anda telah menghabiskan kuota 600 pencarian per jam pada sumber data perusahaan berbayar, dan tidak ada sumber gratis yang tersisa untuk negara tersebut. Tunggu hingga jendela waktu berlalu atau masukkan data perusahaan secara manual. |

Dalam alur yang di-hosting, setiap langkah registri mengizinkan 3 pencarian pada sumber data perusahaan berbayar.
Setelah pencarian ketiga, pemohon ditawari opsi memasukkan data secara manual.

Memilih kandidat yang merupakan pendaftaran merek dagang, bukan perusahaan, mengembalikan `400` dengan `code: "kyb_registry_entry_not_a_company"`.
Pilih perusahaan dari hasil pencarian sebagai gantinya.


## OpenAPI

````yaml id/openapi-25.json POST /v3/kyb/search/
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/kyb/search/:
    post:
      tags:
        - Standalone APIs
      summary: Pencarian perusahaan registri KYB (mandiri)
      description: >-
        Cari registri perusahaan resmi untuk kandidat perusahaan berdasarkan
        nama dan/atau nomor registrasi. Ini adalah langkah 1 dari alur registri
        dua langkah: **pencarian** mengembalikan kandidat ringkas, lalu `POST
        /v3/kyb/select/` mengambil profil lengkap dari satu kandidat.


        **Penagihan pencarian.** Pencarian yang berhasil menggunakan sumber data
        perusahaan berbayar dikenakan biaya USD 0.50 per permintaan, terlepas
        dari jumlah kandidat. Hasil kosong, kegagalan, dan hasil yang hanya
        disajikan oleh sumber lain tidak dikenakan biaya. Harga yang berlaku
        dicadangkan sebelum pencarian; saldo yang tidak mencukupi mengembalikan
        403 dengan kode `insufficient_credits`. Tarif kontrak berlaku jika
        disepakati, dan tarif pencarian kontrak yang belum dikonfigurasi
        mengembalikan 403. Pencarian sandbox gratis. Mengulangi pencarian yang
        berhasil dapat dikenai biaya lain; pengiriman callback tidak menambah
        biaya. Pengambilan profil ditagihkan secara terpisah. Biaya pencarian
        ini juga berlaku untuk v2. Kandidat selalu dikembalikan dengan
        `fetch_status: "pending"`: data lengkap perusahaan hanya diambil (dan
        ditagih) saat pemilihan (select).


        **`kyb_response_id` bersifat efemeral.** Ini adalah handle per
        pencarian, bukan id perusahaan yang stabil. Lakukan select segera
        setelah mencari dan cari ulang untuk mendapatkan handle baru daripada
        menyimpannya.


        **`tier` memilih rantai penyedia.** `tier` menentukan tingkat registri
        tempat pencarian berjalan: `basic` (default, rantai Lite),
        `shareholders`, atau `ubo`. Pencarian menggunakan rantai penyedia yang
        melayani tingkat tersebut, dan ini tidak selalu merupakan rantai yang
        sama yang dibaca oleh pencarian Lite, jadi pencarian Lite yang kosong
        bukanlah bukti bahwa registri tidak memuat perusahaan tersebut — cari
        lagi pada tingkat yang Anda butuhkan. Negara yang tidak menawarkan
        tingkat yang Anda tentukan akan dicari pada tingkat tertinggi yang
        ditawarkannya hingga tingkat tersebut. Ambil kandidat dari endpoint yang
        menyediakan tingkat tersebut: `POST /v3/kyb/select/` (Lite), `POST
        /v3/kyb/shareholders/`, atau `POST /v3/kyb/ubo/`.


        **Autentikasi.** `POST /v3/kyb/search/` (dan `/v2/`) memerlukan kunci
        API aplikasi Anda di header `x-api-key`. `POST /v1/kyb/search/` yang
        di-hosting adalah rute terautentikasi sesi yang dipanggil oleh alur
        verifikasi yang di-hosting: endpoint ini merespons `403` untuk kunci API
        dan tidak menerima `tier` — konfigurasi registri KYB pada alur kerja
        akan memilih rantainya.


        **Dua mode.**

        - *Sinkron (default):* API melakukan polling pada registri hingga
        pencarian selesai dan mengembalikan daftar kandidat akhir
        (`search_resolved: true`).

        - *Asinkron:* kirimkan `webhook_url` dan API akan langsung merespons —
        biasanya dengan `search_status: "pending"` dan daftar kandidat kosong —
        lalu mengirimkan POST callback `kyb.registry_search.resolved` ke URL
        Anda saat registri selesai. Body callback adalah `{"event_id",
        "event_type": "kyb.registry_search.resolved", "request_id",
        "vendor_data", "metadata", "search_status", "search_resolved",
        "kyb_registry", "timestamp", "created_at"}` — perhatikan bahwa
        `timestamp` dan `created_at` dalam callback adalah bilangan bulat epoch,
        tidak seperti ISO `created_at` pada endpoint ini — dan dikirim **tanpa
        tanda tangan** (header `X-Didit-Unsigned-Callback: true`, tanpa
        `X-Signature`).


        **Kode negara.** ISO 3166-1 alpha-2 (`GB`, `DE`), ditambah kode
        subdivisi `XX-YY` untuk registri regional — misalnya `US-CA` untuk
        California.


        **Sandbox.** Kunci dari aplikasi sandbox mengembalikan satu kandidat
        statis tanpa menghubungi registri apa pun.
      operationId: post_v3_kyb_search
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - country_code
              properties:
                country_code:
                  type: string
                  maxLength: 10
                  description: >-
                    Kode ISO 3166-1 alpha-2 untuk negara yang registri
                    perusahaannya akan dicari. Misalnya, `GB`. Jika registri
                    perusahaan beroperasi di tingkat negara bagian atau
                    provinsi, tambahkan kode subdivisi ISO 3166-2 sebagai
                    `XX-YY`: `US-CA` mencari di registri California. Pencarian
                    untuk Amerika Serikat selalu memerlukan subdivisi — kode
                    `US` saja akan ditolak. Tidak peka huruf besar/kecil;
                    dinormalisasi ke huruf besar.
                  example: GB
                name:
                  type: string
                  maxLength: 255
                  description: >-
                    Nama perusahaan yang akan dicari. Salah satu dari `name`
                    atau `registration_number` diperlukan.
                  example: Tesco
                registration_number:
                  type: string
                  maxLength: 100
                  description: >-
                    Nomor registrasi registri yang dicari. Salah satu dari
                    `name` atau `registration_number` wajib diisi.
                tier:
                  type: string
                  enum:
                    - basic
                    - shareholders
                    - ubo
                  default: basic
                  description: >-
                    Tingkat registri tempat rantai penyedia pencarian ini
                    dijalankan. `basic` (default) mencari rantai Lite negara
                    tersebut; `shareholders` dan `ubo` mencari rantai
                    kepemilikan tingkat tersebut, yang dapat menjadi sumber
                    berbeda, sehingga pencarian Lite yang kosong tidak
                    membuktikan bahwa registri tidak memiliki perusahaan
                    tersebut. Negara yang tidak menawarkan tingkat yang
                    disebutkan akan dicari pada tingkat tertinggi yang
                    ditawarkannya hingga tingkat tersebut. Ambil kandidat dari
                    endpoint yang menjual tingkat yang Anda cari: `POST
                    /v3/kyb/select/` (Lite), `POST /v3/kyb/shareholders/` atau
                    `POST /v3/kyb/ubo/`.
                  example: basic
                search_type:
                  type: string
                  enum:
                    - contains
                  default: contains
                  description: >-
                    Strategi pencocokan nama yang diterapkan oleh pencarian
                    registri. `contains` adalah satu-satunya nilai yang
                    diterima: tidak ada sumber registri di balik pencarian yang
                    menawarkan mode awalan atau fuzzy, sehingga `start_with` dan
                    `fuzzy` ditolak dengan `400` (`not a valid choice`).
                vendor_data:
                  type: string
                  description: >-
                    Pengenal Anda untuk pencarian ini; dikembalikan dan
                    disertakan dalam callback webhook.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    JSON bentuk bebas; dikembalikan dalam respons dan disertakan
                    dalam callback webhook.
                webhook_url:
                  type: string
                  format: uri
                  maxLength: 500
                  description: >-
                    Mengalihkan pencarian ke mode asinkron: API segera
                    memberikan respons dan mengirimkan POST callback
                    `kyb.registry_search.resolved` yang tidak ditandatangani ke
                    URL ini saat daftar kandidat sudah siap.
            example:
              country_code: GB
              name: Tesco
              search_type: contains
              vendor_data: company-1234
      responses:
        '200':
          description: >-
            Pencarian diterima. Mode sinkron mengembalikan daftar kandidat hasil
            akhir; mode webhook mengembalikan respons segera (sering kali
            `search_status: "pending"`) dan mengirimkan daftar akhir melalui
            callback `kyb.registry_search.resolved`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      Dengan `webhook_url`: id permintaan pencarian yang
                      disimpan, ditampilkan kembali sebagai `request_id` dalam
                      callback `kyb.registry_search.resolved`. Tanpa
                      `webhook_url`: UUID korelasi sementara (pencarian tidak
                      disimpan).
                  kyb_registry:
                    $ref: '#/components/schemas/KYBRegistrySearchResults'
                  vendor_data:
                    type: string
                    nullable: true
                    description: Menampilkan kembali `vendor_data` yang Anda kirimkan.
                  metadata:
                    type: object
                    nullable: true
                    description: Salinan `metadata` yang Anda kirimkan.
                  created_at:
                    type: string
                    format: date-time
              examples:
                Resolved search:
                  summary: Mode sinkron — daftar kandidat akhir
                  value:
                    request_id: 0c7e9a40-3a13-4f7e-8a44-9d2e2f1c5b6a
                    kyb_registry:
                      companies:
                        - kyb_response_id: 69aeeb95febb0f1704042259
                          name: Tesco PLC
                          registration_number: '00445790'
                          status: active
                          type: Public Limited Company
                          risk_level: null
                          fetch_status: pending
                        - kyb_response_id: 69aeeb95febb0f170404225a
                          name: E-TESCO LTD
                          registration_number: '15168476'
                          status: active
                          type: Private Limited Company
                          risk_level: null
                          fetch_status: pending
                      pagination:
                        total: 2
                        page: 1
                        per_page: 25
                      search_status: resolved
                      search_resolved: true
                    vendor_data: company-1234
                    metadata: null
                    created_at: '2026-06-11T10:40:00.000000+00:00'
                Pending search (webhook mode):
                  summary: >-
                    `webhook_url` disediakan — kandidat masuk melalui callback
                    kyb.registry_search.resolved
                  value:
                    request_id: 5f2d8c1b-7e4a-4b9c-9f0d-3a6e8c2b1d4f
                    kyb_registry:
                      companies: []
                      pagination:
                        total: 0
                        page: 1
                        per_page: 25
                      search_status: pending
                      search_resolved: false
                    vendor_data: company-1234
                    metadata:
                      source: onboarding
                    created_at: '2026-06-11T10:41:00.000000+00:00'
        '400':
          description: >-
            Kesalahan validasi. Masalah tingkat kolom menggunakan format standar
            DRF; aturan nama/nomor registrasi dilaporkan di bawah
            `non_field_errors`. Negara yang tidak dicakup oleh registri akan
            menghasilkan respons `400` dengan `code:
            kyb_registry_country_unsupported`.
          content:
            application/json:
              examples:
                Missing search criteria:
                  summary: Baik `name` maupun `registration_number` tidak diberikan
                  value:
                    non_field_errors:
                      - Either 'name' or 'registration_number' is required.
                Invalid country_code:
                  summary: Harus berupa `XX` (alpha-2) atau subdivisi `XX-YY`
                  value:
                    country_code:
                      - country_code must be a 2-letter ISO code.
                Invalid search_type:
                  summary: Hanya `contains` yang diterima
                  value:
                    search_type:
                      - '"start_with" is not a valid choice.'
                Invalid webhook_url:
                  summary: '`webhook_url` harus berupa URL yang valid'
                  value:
                    webhook_url:
                      - Enter a valid URL.
                Country not covered:
                  summary: Tidak ada registri perusahaan yang mencakup negara tersebut
                  value:
                    detail: >-
                      Company registry search is not available for this country.
                      Enter the company details manually to continue.
                    code: kyb_registry_country_unsupported
        '403':
          description: >-
            Izin ditolak. Dikembalikan ketika header `x-api-key` tidak ada;
            kunci yang salah, dicabut, atau kedaluwarsa mengembalikan `401`.
            Kunci yang tidak ada mengembalikan `403` dengan `{"detail": ...}`;
            kunci yang salah, dicabut, atau kedaluwarsa mengembalikan `401`.
            Juga dikembalikan sebelum pencarian ketika biaya pencarian yang
            berlaku tidak dapat ditanggung (`code: "insufficient_credits"`),
            atau ketika tarif pencarian kontrak tidak ada.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Tidak ada header `x-api-key`, atau kuncinya tidak
                    valid/dicabut
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            Batas laju terlampaui, atau kuota pencarian telah habis. Endpoint
            POST/PATCH/DELETE berbagi anggaran 300 permintaan penulisan per
            menit per kunci API (pembuatan transaksi dan ingesti event memiliki
            anggaran terpisah sebesar 600), dengan header `X-RateLimit-*` dan
            `Retry-After`. Secara terpisah, pencarian registri berbayar dibatasi
            hingga 600 per aplikasi per jam: melebihi itu, responsnya adalah
            `429` dengan `code: kyb_registry_search_limit_reached`, dan
            pencarian yang hanya dilayani oleh sumber gratis tetap berfungsi.
            Tunggu dan cari lagi nanti.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Lebih dari 300 permintaan tulis pada menit ini
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
                Search allowance spent:
                  summary: Lebih dari 600 pencarian berbayar dalam satu jam terakhir
                  value:
                    detail: >-
                      The maximum number of company registry searches for this
                      session has been reached. Enter the company details
                      manually to continue.
                    code: kyb_registry_search_limit_reached
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
        '502':
          description: >-
            Penyedia registri KYB untuk sementara tidak tersedia - respons 5xx,
            batas waktu habis, atau kegagalan koneksi dari registri hulu.
            Pencarian tidak ditagih. Coba lagi nanti, atau, dalam alur
            verifikasi yang di-hosting Didit, pengguna secara otomatis ditawari
            entri perusahaan manual alih-alih kesalahan yang hanya meminta coba
            lagi.
          content:
            application/json:
              examples:
                Registry provider outage:
                  summary: Penyedia registri tidak merespons pencarian
                  value:
                    detail: >-
                      The KYB registry provider is temporarily unavailable.
                      Please try again shortly.
                    code: kyb_registry_provider_unavailable
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/kyb/search/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "country_code": "GB",
                "name": "Tesco",
                "search_type": "contains",
                "vendor_data": "company-1234"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.kyb.search(
                country_code="GB",
                name="Tesco",
                search_type="contains",
                vendor_data="company-1234",
            )
            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.kyb.search({
              country_code: "GB",
              name: "Tesco",
              search_type: "contains",
              vendor_data: "company-1234",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.Search(ctx, didit.KYBSearchParams{\n\tCountryCode: \"GB\",\n\tName:        didit.String(\"Tesco\"),\n\tSearchType:  didit.Some(didit.KYBSearchParamsSearchType(\"contains\")),\n\tVendorData:  didit.String(\"company-1234\"),\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.KybSearchParams;

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

            var result = client.kyb().search(KybSearchParams.builder()
                    .countryCode("GB")
                    .name("Tesco")
                    .searchType(KybSearchParams.SearchType.of("contains"))
                    .vendorData("company-1234")
                    .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->kyb->search([
                'country_code' => 'GB',
                'name' => 'Tesco',
                'search_type' => 'contains',
                'vendor_data' => 'company-1234',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.kyb.search(
              country_code: "GB",
              name: "Tesco",
              search_type: "contains",
              vendor_data: "company-1234"
            )
            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.Kyb.SearchAsync(new KybSearchParams
            {
                CountryCode = "GB",
                Name = "Tesco",
                SearchType = new KybSearchParamsSearchType("contains"),
                VendorData = "company-1234",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBRegistrySearchResults:
      type: object
      properties:
        companies:
          type: array
          items:
            type: object
            properties:
              kyb_response_id:
                type: string
                nullable: true
                description: >-
                  Handle untuk kandidat ini — teruskan ke `POST /v3/kyb/select/`
                  untuk mengambil profil lengkap. Bersifat sementara dan hanya
                  berlaku untuk pencarian ini: jangan menyimpannya untuk jangka
                  panjang; cari ulang untuk mendapatkan yang baru.
                example: 69aeeb95febb0f1704042259
              name:
                type: string
                nullable: true
                description: Nama perusahaan terdaftar.
                example: Tesco PLC
              registration_number:
                type: string
                nullable: true
                description: Nomor registrasi registri.
                example: '00445790'
              status:
                type: string
                nullable: true
                description: >-
                  Status registri perusahaan yang dinormalisasi (misalnya
                  `active`, `dissolved`, `inactive`, `struck off`).
                example: active
              type:
                type: string
                nullable: true
                description: Bentuk hukum sebagaimana dilaporkan oleh registri.
                example: Public Limited Company
              registered_address:
                type: string
                nullable: true
                description: >-
                  Alamat terdaftar kandidat, saat registri mengembalikannya.
                  Gunakan ini, bersama dengan nomor registrasi, untuk membedakan
                  perusahaan dengan nama yang sama: di Amerika Serikat, kandidat
                  dapat terdaftar di bawah negara bagian tempat perusahaan
                  beroperasi alih-alih negara bagian yang Anda cari.
                example: >-
                  Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7
                  1GA
              risk_level:
                type: string
                nullable: true
                description: >-
                  Tingkat risiko yang dilaporkan registri, jika tersedia.
                  Biasanya `null` pada saat pencarian.
              fetch_status:
                type: string
                nullable: true
                description: >-
                  Selalu `pending` untuk kandidat pencarian — profil lengkap
                  perusahaan hanya diambil (dan ditagihkan) saat Anda memilih
                  kandidat tersebut.
                example: pending
          description: >-
            Daftar kandidat yang telah dideduplikasi. Kosong selama
            `search_resolved=false` (mode webhook) atau saat tidak ada yang
            cocok.
        pagination:
          type: object
          properties:
            total:
              type: integer
              description: Jumlah kandidat yang dikembalikan.
            page:
              type: integer
            per_page:
              type: integer
              example: 25
        search_status:
          type: string
          nullable: true
          enum:
            - pending
            - resolved
          description: Status siklus hidup pencarian registri.
        search_resolved:
          type: boolean
          description: '`true` setelah daftar kandidat bersifat final.'
  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.