> ## 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 Business API: Entitas KYB Vendor

> Buat entitas Didit Business (KYB) sebelum sesi KYB dijalankan. Onboarding massal dari database eksternal atau daftarkan untuk pemantauan transaksi.



Perintah Membuat Bisnis
        Salin prompt ke papan klip



      
      

\<pre>

\`Goal: Pre-create a Didit Business (KYB) entity by vendor_data before any KYB session runs.

Endpoint: POST https://verification.didit.me/v3/businesses/create/
Auth header: x-api-key: <DIDIT_API_KEY>
Content-Type: application/json

Request body fields:
\- vendor_data (string, REQUIRED) — your unique identifier. Free-form string, NOT a UUID. Must be unique among non-deleted businesses for the app. Normalised lowercase + whitespace trim ("COMPANY-1" and "company-1" collide).
\- display_name (string, nullable) — friendly display name shown in Console (takes precedence over legal_name).
\- legal_name (string, nullable)
\- registration_number (string, nullable)
\- country_code (string, nullable) — country of incorporation, ISO 3166-1 alpha-2 (e.g. "GB", "US").
\- region (string, nullable) — ISO 3166-2 subdivision code.
\- status (enum) — "ACTIVE" | "FLAGGED" | "BLOCKED" (VendorBusinessStatusChoices). Defaults to "ACTIVE".
\- metadata (object, nullable) — arbitrary JSON.

curl:
curl -X POST 'https://verification.didit.me/v3/businesses/create/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"vendor_data": "company-456", "legal_name": "New Corp Ltd", "country_code": "US"}'

Response 201: full BusinessDetailItem (same shape as GET /v3/businesses/{vendor_data}/). Includes didit_internal_id (UUID), session_count=0, metadata, comments=[], created_at, updated_at. See /reference/data-models.

Failure modes (envelope {"detail": "..."} for auth):
\- 400 — validation errors keyed by field. Common cases:
\{ "vendor_data": ["A business with this vendor_data already exists."] }  // NOT idempotent — use PATCH /v3/businesses/{vendor_data}/ to update.
\{ "vendor_data": ["This field is required."] }
\{ "metadata": ["Metadata must be a JSON object."] }
\- 401 — missing/invalid x-api-key.
\- 403 — lacks create:businesses.
\- 429 — rate-limited.

Upsert pattern (NOT idempotent on vendor_data):
GET /v3/businesses/{vendor_data}/  → on 404, POST /v3/businesses/create/; on 200, PATCH /v3/businesses/{vendor_data}/.

Notes:
\- Registry-derived fields (legal_name, registration_number, country_code) can be seeded here but will be OVERWRITTEN by the first approved Business Verification (KYB) session's registry data.
\- last_activity_at is set at the moment of creation.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Tempel ke

## IkhtisarMembuat [entitas bisnis](https://docs.didit.me/id/entities/businesses/overview.md) secara eksplisit sebelum sesi Verifikasi Bisnis (KYB) mana pun berjalan.## Kapan digunakan- **Pra-isi metadata** (mitra, tingkat, pengenal internal) sebelum sesi Verifikasi Bisnis (KYB) pertama.
- **Migrasi** dari vendor KYB lain dengan daftar bisnis yang sudah ada.
- **Registrasi khusus transaksi**: kirim transaksi untuk bisnis yang Anda verifikasi melalui proses offline.## Catatan- `vendor_data` wajib diisi dan harus unik per aplikasi. Duplikat akan menghasilkan error konflik. Gunakan [`PATCH /v3/businesses/{vendor_data}/`](https://docs.didit.me/id/management-api/businesses/update) untuk memperbarui.
- Kolom yang berasal dari registri (`legal_name`, `registration_number`, `country_code`) dapat diisi lebih dulu, tetapi akan **ditimpa** oleh data registri dari sesi Verifikasi Bisnis (KYB) yang disetujui pertama.
- Jika `country_code` cocok dengan daftar [negara berbahaya](https://docs.didit.me/id/entities/businesses/blocklist.md#negara-berbahaya) pada aplikasi Anda, bisnis dibuat dengan status `BLOCKED`.
- Mengirim event `business.data.updated`.## IzinPeran harus memberikan izin `create:businesses`.## Terkait- [Model data bisnis](https://docs.didit.me/id/entities/businesses/data-model.md)
- [Penautan data vendor](https://docs.didit.me/id/entities/vendor-data-linking.md)
- [Operasi bisnis](https://docs.didit.me/id/entities/businesses/operations.md)


## OpenAPI

````yaml id/openapi-25.json POST /v3/businesses/create/
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/businesses/create/:
    post:
      tags:
        - Businesses
      summary: Buat bisnis
      description: >-
        Buat [bisnis](/entities/businesses) terlebih dahulu *tanpa* sesi KYB.
        Semua kolom bersifat opsional, tetapi Anda harus selalu mengirimkan
        `vendor_data` — tanpanya catatan tidak dapat ditautkan ke sesi atau
        transaksi. Jika diberikan, `vendor_data` harus unik di antara bisnis
        yang tidak dihapus (kecocokan persis; konflik menghasilkan 400). Tidak
        idempoten.
      operationId: create_business
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                vendor_data:
                  type: string
                  nullable: true
                  description: >-
                    Pengidentifikasi unik Anda untuk bisnis ini (string bentuk
                    bebas, BUKAN UUID). Opsional tetapi sangat disarankan. Jika
                    diberikan, harus unik di antara bisnis yang tidak dihapus
                    untuk aplikasi tersebut; dicocokkan persis seperti yang
                    dikirim.
                display_name:
                  type: string
                  nullable: true
                  maxLength: 255
                  description: >-
                    Nama tampilan yang mudah dipahami yang ditampilkan di konsol
                    (mengambil prioritas di atas `legal_name` untuk tampilan
                    antarmuka).
                legal_name:
                  type: string
                  nullable: true
                  maxLength: 255
                  description: Nama resmi menurut hukum dari perusahaan.
                registration_number:
                  type: string
                  nullable: true
                  maxLength: 100
                  description: Nomor registrasi atau nomor pendirian perusahaan.
                country_code:
                  type: string
                  nullable: true
                  maxLength: 10
                  description: Negara pendirian (ISO 3166-1 alpha-2, misalnya `GB`, `US`).
                status:
                  type: string
                  enum:
                    - ACTIVE
                    - FLAGGED
                    - BLOCKED
                  default: ACTIVE
                  description: Status siklus hidup awal. Default-nya adalah `ACTIVE`.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    Objek JSON arbitrer yang Anda lampirkan ke bisnis.
                    Defaultnya adalah `{}`.
            examples:
              Basic:
                summary: Minimum yang disarankan
                value:
                  vendor_data: company-456
                  legal_name: New Corp Ltd
                  country_code: US
              Full:
                summary: Semua kolom
                value:
                  vendor_data: company-789
                  display_name: New Corp
                  legal_name: New Corp International Ltd
                  registration_number: '98765432'
                  country_code: DE
                  status: ACTIVE
                  metadata:
                    industry: fintech
                    tier: enterprise
      responses:
        '201':
          description: >-
            Bisnis berhasil dibuat. Data bisnis lengkap dikembalikan (struktur
            yang sama seperti Dapatkan Bisnis).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessDetailItem'
              examples:
                Created:
                  value:
                    didit_internal_id: a1b2c3d4-e5f6-4890-abcd-ef1234567890
                    vendor_data: company-456
                    display_name: null
                    legal_name: New Corp Ltd
                    registration_number: null
                    country_code: US
                    effective_name: New Corp Ltd
                    status: ACTIVE
                    session_count: 0
                    approved_count: 0
                    declined_count: 0
                    in_review_count: 0
                    features: {}
                    features_list: []
                    last_session_at: null
                    last_activity_at: '2026-03-15T10:30:00Z'
                    first_session_at: null
                    tags: []
                    created_at: '2026-03-15T10:30:00Z'
                    metadata: {}
                    updated_at: '2026-03-15T10:30:00Z'
        '400':
          description: >-
            Body tidak valid — biasanya duplikat `vendor_data`, `status` yang
            tidak dikenal, atau `metadata` yang salah format.
          content:
            application/json:
              examples:
                Duplicate:
                  value:
                    vendor_data:
                      - A business with this vendor_data already exists.
                Bad status:
                  value:
                    status:
                      - >-
                        Invalid status. Valid options are: ACTIVE, FLAGGED,
                        BLOCKED
                Bad metadata:
                  value:
                    metadata:
                      - Metadata must be a JSON object.
        '403':
          description: >-
            Kunci API tidak ada, tidak valid, atau dicabut, atau kunci tidak
            dapat membuat bisnis untuk aplikasi ini. Kunci yang tidak ada
            mengembalikan `403`; kunci yang salah, dicabut, atau kedaluwarsa
            mengembalikan `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            Batas laju terlampaui; kurangi laju permintaan dan coba lagi setelah
            interval yang ditunjukkan dalam `Retry-After`.
          content:
            application/json:
              examples:
                Rate limited:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST 'https://verification.didit.me/v3/businesses/create/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"vendor_data": "company-456", "legal_name": "New Corp Ltd", "country_code": "US"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.businesses.create(
                vendor_data="company-456",
                legal_name="New Corp Ltd",
                country_code="US",
            )
            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.businesses.create({
              vendor_data: "company-456",
              legal_name: "New Corp Ltd",
              country_code: "US",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.Create(ctx, didit.BusinessesCreateParams{\n\tVendorData:  didit.String(\"company-456\"),\n\tLegalName:   didit.String(\"New Corp Ltd\"),\n\tCountryCode: didit.String(\"US\"),\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.BusinessesCreateParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.businesses().create(BusinessesCreateParams.builder()
                    .vendorData("company-456")
                    .legalName("New Corp Ltd")
                    .countryCode("US")
                    .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->businesses->create([
                'vendor_data' => 'company-456',
                'legal_name' => 'New Corp Ltd',
                'country_code' => 'US',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.businesses.create(
              vendor_data: "company-456",
              legal_name: "New Corp Ltd",
              country_code: "US"
            )
            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.Businesses.CreateAsync(new
            BusinessesCreateParams

            {
                VendorData = "company-456",
                LegalName = "New Corp Ltd",
                CountryCode = "US",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    BusinessDetailItem:
      type: object
      description: >-
        Detail bisnis lengkap. Memperluas BusinessListItem dengan metadata dan
        updated_at.
      allOf:
        - $ref: '#/components/schemas/BusinessListItem'
        - type: object
          properties:
            metadata:
              type: object
              description: >-
                JSON metadata kustom yang Anda lampirkan ke bisnis ini. Default
                adalah `{}`.
            updated_at:
              type: string
              format: date-time
    BusinessListItem:
      type: object
      description: Bisnis yang terverifikasi.
      properties:
        didit_internal_id:
          type: string
          format: uuid
          description: UUID internal yang stabil dari Didit untuk bisnis ini.
        vendor_data:
          type: string
          nullable: true
          description: >-
            Pengidentifikasi unik Anda untuk bisnis ini (diteruskan saat membuat
            sesi). Nilai ini dapat berupa null jika tidak ada pengidentifikasi
            vendor yang diberikan.
        display_name:
          type: string
          nullable: true
          description: Nama tampilan kustom yang Anda tetapkan
        legal_name:
          type: string
          nullable: true
          description: Nama resmi menurut hukum dari registri atau entri manual
        registration_number:
          type: string
          nullable: true
          description: Nomor registrasi atau nomor pendirian perusahaan
        country_code:
          type: string
          nullable: true
          description: Negara pendirian (ISO 3166-1 alpha-2, misalnya `GB`, `US`).
        effective_name:
          type: string
          nullable: true
          description: >-
            Nama terbaik yang tersedia: display_name jika disetel, selain itu
            legal_name
        status:
          type: string
          enum:
            - ACTIVE
            - FLAGGED
            - BLOCKED
          description: >-
            Status siklus hidup rekaman bisnis (BUKAN status sesi). `ACTIVE`
            adalah default, `FLAGGED` menandainya untuk perhatian manual,
            `BLOCKED` mencegah sesi baru untuk `vendor_data` ini.
        session_count:
          type: integer
          description: Jumlah total sesi verifikasi untuk bisnis ini
        approved_count:
          type: integer
          description: Jumlah sesi yang disetujui
        declined_count:
          type: integer
          description: Jumlah sesi yang ditolak
        in_review_count:
          type: integer
          description: Jumlah sesi dalam peninjauan
        features:
          type: object
          description: >-
            Status per-fitur agregat di semua sesi KYB bisnis ini. Saat ini
            satu-satunya kunci adalah `KYB` (status pemeriksaan perusahaan di
            registri). Nilai yang memungkinkan: `Approved`, `Declined`, `In
            Review`, `Not Finished`, `Resub Requested`.
        features_list:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
              status:
                type: string
          description: >-
            Data yang sama dengan `features`, sebagai array berurutan dari objek
            `{feature, status}`.
        last_session_at:
          type: string
          format: date-time
          nullable: true
          description: Cap waktu sesi terbaru
        first_session_at:
          type: string
          format: date-time
          nullable: true
          description: Cap waktu sesi pertama
        last_activity_at:
          type: string
          format: date-time
          nullable: true
          description: Cap waktu aktivitas terbaru (perubahan status, pembaruan sesi, dll.)
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
          description: Tag yang ditetapkan untuk bisnis ini
        created_at:
          type: string
          format: date-time
  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.