> ## 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 Hapus Bisnis Batch: Penghapusan KYB

> Hapus entitas Verifikasi Bisnis (KYB) di Didit secara massal berdasarkan vendor_data atau didit_internal_id. Sesuai dengan GDPR dan CCPA.



Prompt Penghapusan Bisnis secara Batch
        Salin prompt ke papan klip



      
      

\<pre>

\`Goal: Permanently delete one or many Didit Business (KYB) entities. The matching business records, their tag links, and their comment history are removed permanently. Verification sessions and their records (KYB session data, document submissions, AML hits, beneficial-owner verifications) are NOT removed by this endpoint; delete those separately with DELETE /v3/session/{sessionId}/delete/.

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

Request body — provide EXACTLY ONE selector (mutually exclusive):
\- vendor_data_list: string[] — your own identifiers (case-insensitive after normalisation).
\- didit_internal_id_list: string[] (UUIDs) — Didit's internal IDs.
\- delete_all: true — wipe every business in this application. No confirmation, no undo.

curl:
curl -X POST 'https://verification.didit.me/v3/businesses/delete/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"vendor_data_list": ["company-123", "company-456"]}'

Response 200:
\{
"deleted": <int — number of businesses actually deleted; excludes vendor_data values that didn't match>
}

Idempotency: re-sending the same list returns deleted: 0 after the first run (unmatched IDs are silently skipped). There is no undo.

Failure modes:
\- 400 — no selector supplied. { "detail": "Provide vendor_data_list, didit_internal_id_list, or set delete_all=true." }
\- 401 — missing/invalid x-api-key.
\- 403 — lacks delete:businesses. { "detail": "You do not have permission to perform this action." }
\- 409 — the selection includes a company in a finalized regulatory report. Nothing is deleted. The body has code: in_filed_report and reports[] with uuid, report_number, report_type and case_uuid. Delete the reports, then repeat the request.
\- 409 — code: subject_deletion_in_progress: another request is still deleting one of the selected companies. This request deleted nothing; repeat it once that deletion has finished.
\- 429 — rate-limited.

WARNING — delete_all: true: there is no confirmation step and no undo. Restrict to API keys you intentionally provision for batch maintenance.

When to prefer status change instead:
\- For day-to-day blocking, use PATCH /v3/businesses/{vendor_data}/update-status/ with {"status": "BLOCKED"} — it keeps the audit trail intact while rejecting future sessions for the same identifier.

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

\</pre>



      
      

Tempel ke

## IkhtisarMenghapus satu atau beberapa [entitas bisnis](https://docs.didit.me/id/entities/businesses/overview.md). Catatan bisnis dihapus secara permanen. Sesi Verifikasi Bisnis (KYB) tidak tercakup oleh endpoint ini dan tetap ada dengan tautannya ke bisnis dihapus; hapus sesi tersebut dengan [Hapus Sesi](https://docs.didit.me/id/sessions-api/delete-session.md). Transaksi juga tidak tercakup; hapus transaksi tersebut dengan [Hapus Transaksi secara Batch](https://docs.didit.me/id/management-api/transactions/delete.md).## Kapan menggunakannya- Permintaan **hak untuk dilupakan**.
- **Pembersihan** bisnis uji selama QA.
- **Penghentian penyediaan** bisnis yang dihapus dari platform Anda sendiri.## Catatan- Menerima daftar nilai `vendor_data` atau nilai `didit_internal_id`.
- Idempoten: menghapus bisnis yang sudah dihapus tidak memberikan efek apa pun.
- Hanya mengembalikan jumlah yang dihapus, bukan laporan per item. Nilai yang tidak cocok dilewati tanpa pemberitahuan.
- Memancarkan `business.data.updated` dengan `deleted_at` yang diisi.
- Catatan yang dimiliki oleh entitas bisnis itu sendiri ikut terhapus: tautan tag, riwayat komentar, serta catatan perangkat dan jaringan miliknya.
- Catatan yang dihasilkan oleh sesi KYB TIDAK ikut terhapus: data registri perusahaan, dokumen yang diunggah, hasil AML, pemilik manfaat, dan pemeriksaan pihak kunci termasuk dalam sesi tersebut dan tetap ada sampai Anda menghapus sesinya sendiri.## Data dalam laporan regulasi yang sudah finalJika salah satu perusahaan yang dipilih merupakan bagian dari kasus dengan laporan regulasi yang sudah final, seluruh permintaan mengembalikan `409` dan tidak ada yang dihapus. Respons menggunakan `code: in_filed_report` dan menyebutkan setiap laporan:```json theme={null}
{
  "detail": "A case about this person or company has a filed regulatory report, so it cannot be deleted.",
  "code": "in_filed_report",
  "reports": [
    {
      "uuid": "5ec00000-0000-4000-8000-000000000007",
      "report_number": "SAR-0001",
      "report_type": "SAR",
      "case_uuid": "c1a5e000-0000-4000-8000-000000000001"
    }
  ]
}
```Hapus setiap laporan dengan [Hapus Laporan](https://docs.didit.me/id/management-api/regulatory-reports/delete.md), lalu ulangi permintaan yang sama.## Penghapusan yang sedang berlangsungSebuah perusahaan hanya dapat dihapus oleh satu permintaan pada satu waktu. Jika permintaan lain masih menghapus salah satu perusahaan yang dipilih, permintaan ini menunggu paling lama beberapa detik, lalu mengembalikan `409` dengan `code: subject_deletion_in_progress` dan tidak menghapus apa pun:```json theme={null}
{
  "detail": "This person or company is being deleted. Retry after deletion completes.",
  "code": "subject_deletion_in_progress"
}
```Ulangi permintaan yang sama setelah penghapusan lainnya selesai. Perusahaan yang sudah dihapus oleh permintaan lain tidak lagi cocok, sehingga pengulangan hanya menghapus sisanya.## IzinPeran harus memberikan izin `delete:businesses`. Biasanya hanya untuk `OWNER` dan `ADMIN`.## Terkait- [Retensi data](https://docs.didit.me/id/console/data-retention.md)
- [Log audit](https://docs.didit.me/id/console/audit-logs.md)
- [Operasi bisnis](https://docs.didit.me/id/entities/businesses/operations.md)


## OpenAPI

````yaml id/openapi-25.json POST /v3/businesses/delete/
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/delete/:
    post:
      tags:
        - Businesses
      summary: Hapus bisnis secara batch
      description: >-
        **Hapus bisnis secara permanen** — tindakan ini tidak dapat dibatalkan.
        Untuk pemblokiran, lebih disarankan menggunakan [Perbarui Status
        Bisnis](#patch-/v3/businesses/-vendor_data-/update-status/) dengan
        `BLOCKED`.


        **Laporan regulasi yang telah diajukan:** jika data yang dipilih berada
        dalam laporan regulasi yang sudah final, seluruh permintaan akan ditolak
        dengan `409` dan tidak ada yang dihapus. Isi respons menggunakan `code:
        in_filed_report` dan menyebutkan setiap laporan beserta `uuid`,
        `report_number`, `report_type`, dan `case_uuid`. Hapus laporan tersebut,
        lalu ulangi permintaan.
      operationId: batch_delete_businesses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Sediakan `vendor_data_list`, `didit_internal_id_list`, atau
                `delete_all: true`. Prioritas ketika beberapa dikirimkan:
                `delete_all` > `vendor_data_list` > `didit_internal_id_list`
                (hanya selektor dengan prioritas tertinggi yang digunakan).
              properties:
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Pengenal Anda sendiri yang akan dihapus, dicocokkan persis
                    seperti yang dikirimkan.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: UUID internal Didit (`didit_internal_id`) yang akan dihapus.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Jika `true`, menghapus setiap bisnis di aplikasi. Tidak
                    dapat digabungkan dengan pemilih daftar.
            examples:
              Specific businesses:
                summary: Hapus berdasarkan vendor_data
                value:
                  vendor_data_list:
                    - company-123
                    - company-456
              Specific internal IDs:
                summary: Hapus berdasarkan didit_internal_id
                value:
                  didit_internal_id_list:
                    - a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    - b2c3d4e5-f6a7-8901-bcde-f12345678901
              All businesses:
                summary: Hapus semua bisnis dalam aplikasi ini
                value:
                  delete_all: true
      responses:
        '200':
          description: Bisnis dihapus. Mengembalikan jumlah baris yang benar-benar dihapus.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    description: >-
                      Jumlah bisnis yang dihapus (tidak termasuk nilai
                      vendor_data yang tidak cocok dengan apa pun).
              examples:
                Deleted some:
                  value:
                    deleted: 2
                Nothing matched:
                  value:
                    deleted: 0
        '400':
          description: >-
            Tidak ada selektor yang diberikan (semua `vendor_data_list`,
            `didit_internal_id_list`, dan `delete_all` tidak ada atau kosong).
            Body error berupa array JSON.
          content:
            application/json:
              examples:
                Missing selector:
                  value:
                    - >-
                      Provide vendor_data_list, didit_internal_id_list, or set
                      delete_all=true.
        '403':
          description: >-
            Kunci API tidak ada, tidak valid, atau dicabut, atau kunci tersebut
            tidak dapat menghapus 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.
        '409':
          description: >-
            Tidak ada yang dihapus. `code` menyatakan alasannya:
            `in_filed_report` ketika pilihan mencakup perusahaan dalam laporan
            regulasi yang sudah final, `subject_deletion_in_progress` ketika
            permintaan lain masih menghapus salah satu perusahaan yang dipilih.
            Ulangi permintaan setelah penghapusan tersebut selesai.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InFiledReportError'
                  - $ref: '#/components/schemas/SubjectDeletionInProgressError'
        '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/delete/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"vendor_data_list": ["company-123", "company-456"]}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.businesses.batch_delete(
                vendor_data_list=["company-123", "company-456"],
            )
            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.batchDelete({
              vendor_data_list: ["company-123", "company-456"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.BatchDelete(ctx, didit.BusinessesBatchDeleteParams{\n\tVendorDataList: didit.Some([]string{\"company-123\", \"company-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.BusinessesBatchDeleteParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.businesses().batchDelete(BusinessesBatchDeleteParams.builder()
                    .vendorDataList(List.of("company-123", "company-456"))
                    .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->batchDelete([
                'vendor_data_list' => ['company-123', 'company-456'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result = didit.businesses.batch_delete(vendor_data_list:
            ["company-123", "company-456"])

            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.BatchDeleteAsync(new
            BusinessesBatchDeleteParams

            {
                VendorDataList = new string[] { "company-123", "company-456" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    InFiledReportError:
      type: object
      description: >-
        Penghapusan ditolak karena data yang dipilih berada dalam laporan
        regulasi yang telah diselesaikan. Tidak ada yang dihapus. Hapus laporan
        tersebut, lalu ulangi permintaan.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Kode kesalahan stabil untuk penghapusan yang diblokir oleh laporan
            regulasi yang telah difinalisasi.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Laporan yang memblokir penghapusan orang, perusahaan, kasus, atau
            sesi.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transaksi yang memblokir penghapusan transaksi, masing-masing
            beserta laporan yang mencantumkannya.
    SubjectDeletionInProgressError:
      type: object
      description: >-
        Permintaan lain masih menghapus individu atau perusahaan ini. Permintaan
        ini tidak menghapus apa pun dan dapat diulang setelah penghapusan
        tersebut selesai; pengulangan kemudian akan menghapus apa pun yang masih
        dipilih.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - subject_deletion_in_progress
          description: >-
            Kode kesalahan stabil untuk individu atau perusahaan yang masih
            dalam proses penghapusan oleh permintaan lain.
    FiledRegulatoryReport:
      type: object
      description: Laporan regulasi yang sudah final mencegah penghapusan yang diminta.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID laporan.
        report_number:
          type: string
          description: Nomor laporan yang ditampilkan di Console (misalnya, SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Jenis laporan regulasi.
        case_uuid:
          type: string
          format: uuid
          description: Kasus tempat laporan ini bernaung.
    FiledReportTransaction:
      type: object
      description: >-
        Transaksi yang tidak dapat dihapus karena tercantum dalam laporan
        regulasi yang telah difinalisasi.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID transaksi Didit.
        transaction_id:
          type: string
          description: Pengidentifikasi transaksi yang diberikan saat transaksi dibuat.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Laporan yang telah difinalisasi dan mencantumkan transaksi ini.
  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.