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

# Unternehmen per Batch löschen: API für KYB-Löschung

> Löschen Sie Didit-Unternehmensentitäten (KYB) stapelweise per vendor_data oder didit_internal_id. DSGVO- und CCPA-konform.



Prompt für das Batch-Löschen von Unternehmen
        Prompt in die Zwischenablage kopieren



      
      

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



      
      

Einfügen in

## ÜberblickLöscht eine oder mehrere [Unternehmensentitäten](https://docs.didit.me/de/entities/businesses/overview.md). Die Unternehmensdatensätze werden dauerhaft entfernt. Sitzungen für die Unternehmensverifizierung (KYB) werden von diesem Endpoint nicht erfasst. Sie bleiben erhalten, und ihre Verknüpfung mit dem Unternehmen wird entfernt. Löschen Sie sie mit [Sitzung löschen](https://docs.didit.me/de/sessions-api/delete-session.md). Transaktionen werden ebenfalls nicht erfasst. Löschen Sie sie mit [Transaktionen im Batch löschen](https://docs.didit.me/de/management-api/transactions/delete.md).## Wann verwenden- **Anfragen zum Recht auf Vergessenwerden.**
- **Bereinigung** von Testunternehmen während der QA.
- **Deprovisionierung** von Unternehmen, die von Ihrer eigenen Plattform entfernt wurden.## Hinweise- Akzeptiert eine Liste von `vendor_data`-Werten oder `didit_internal_id`-Werten.
- Idempotent: Das Löschen eines bereits gelöschten Unternehmens hat keine Wirkung.
- Gibt nur die Anzahl der gelöschten Elemente zurück, keinen Bericht pro Element. Werte ohne Treffer werden stillschweigend übersprungen.
- Sendet `business.data.updated` mit gesetztem `deleted_at`.
- Datensätze, die der Unternehmensentität selbst gehören, werden mit ihr gelöscht: ihre Tag-Verknüpfungen, ihr Kommentarverlauf sowie ihre eigenen Geräte- und Netzwerkdatensätze.
- Datensätze, die durch eine KYB-Sitzung entstehen, werden NICHT mitgelöscht: Unternehmensregisterdaten, hochgeladene Dokumente, AML-Treffer, wirtschaftlich Berechtigte und Prüfungen der Schlüsselpersonen gehören zur Sitzung und bleiben erhalten, bis Sie die Sitzung selbst löschen.## Daten in einem finalisierten regulatorischen BerichtWenn ein ausgewähltes Unternehmen Teil eines Falls mit einem finalisierten regulatorischen Bericht ist, gibt die gesamte Anfrage `409` zurück, und nichts wird gelöscht. Die Antwort enthält `code: in_filed_report` und nennt jeden Bericht:```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"
    }
  ]
}
```Löschen Sie jeden Bericht mit [Bericht löschen](https://docs.didit.me/de/management-api/regulatory-reports/delete.md) und wiederholen Sie dann dieselbe Anfrage.## Eine laufende LöschungEin Unternehmen wird jeweils nur durch eine Anfrage gelöscht. Wenn eine andere Anfrage gerade eines der ausgewählten Unternehmen löscht, wartet diese Anfrage höchstens einige Sekunden. Danach gibt sie `409` mit `code: subject_deletion_in_progress` zurück und löscht nichts:```json theme={null}
{
  "detail": "This person or company is being deleted. Retry after deletion completes.",
  "code": "subject_deletion_in_progress"
}
```Wiederholen Sie dieselbe Anfrage, sobald die andere Löschung abgeschlossen ist. Ein Unternehmen, das die andere Anfrage bereits gelöscht hat, passt nicht mehr, daher löscht die Wiederholung nur noch die verbleibenden Unternehmen.## BerechtigungenDie Rolle muss `delete:businesses` gewähren. In der Regel ist diese Berechtigung `OWNER` und `ADMIN` vorbehalten.## Verwandte Themen- [Datenaufbewahrung](https://docs.didit.me/de/console/data-retention.md)
- [Audit-Logs](https://docs.didit.me/de/console/audit-logs.md)
- [Vorgänge für Unternehmen](https://docs.didit.me/de/entities/businesses/operations.md)


## OpenAPI

````yaml de/openapi-25.json POST /v3/businesses/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/businesses/delete/:
    post:
      tags:
        - Businesses
      summary: Unternehmen im Batch löschen
      description: >-
        **Unternehmen dauerhaft löschen** — dies kann nicht rückgängig gemacht
        werden. Zum Blockieren empfiehlt sich [Unternehmensstatus
        aktualisieren](#patch-/v3/businesses/-vendor_data-/update-status/) mit
        `BLOCKED`.


        **Eingereichte behördliche Berichte:** Befinden sich die ausgewählten
        Daten in einem finalisierten behördlichen Bericht, wird die gesamte
        Anfrage mit `409` abgelehnt und nichts wird gelöscht. Der Body verwendet
        `code: in_filed_report` und benennt jeden Bericht mit `uuid`,
        `report_number`, `report_type` und `case_uuid`. Löschen Sie die Berichte
        und wiederholen Sie dann die Anfrage.
      operationId: batch_delete_businesses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Geben Sie `vendor_data_list`, `didit_internal_id_list` oder
                `delete_all: true` an. Rangfolge, wenn mehrere gesendet werden:
                `delete_all` > `vendor_data_list` > `didit_internal_id_list`
                (nur der Selektor mit dem höchsten Vorrang wird verwendet).
              properties:
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Ihre eigenen zu löschenden Kennungen, exakt so abgeglichen
                    wie übermittelt.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: Zu löschende interne Didit-UUIDs (`didit_internal_id`).
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Wenn `true`, werden alle Unternehmen in der Anwendung
                    gelöscht. Kann nicht mit den Listen-Selektoren kombiniert
                    werden.
            examples:
              Specific businesses:
                summary: Nach vendor_data löschen
                value:
                  vendor_data_list:
                    - company-123
                    - company-456
              Specific internal IDs:
                summary: Nach didit_internal_id löschen
                value:
                  didit_internal_id_list:
                    - a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    - b2c3d4e5-f6a7-8901-bcde-f12345678901
              All businesses:
                summary: Alle Unternehmen in dieser Anwendung löschen
                value:
                  delete_all: true
      responses:
        '200':
          description: >-
            Unternehmen gelöscht. Gibt die Anzahl der tatsächlich entfernten
            Zeilen zurück.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    description: >-
                      Anzahl der gelöschten Unternehmen (schließt
                      vendor_data-Werte aus, die mit nichts übereinstimmten).
              examples:
                Deleted some:
                  value:
                    deleted: 2
                Nothing matched:
                  value:
                    deleted: 0
        '400':
          description: >-
            Kein Selektor angegeben (alle drei von `vendor_data_list`,
            `didit_internal_id_list` und `delete_all` fehlen oder sind leer).
            Der Fehler-Body ist ein JSON-Array.
          content:
            application/json:
              examples:
                Missing selector:
                  value:
                    - >-
                      Provide vendor_data_list, didit_internal_id_list, or set
                      delete_all=true.
        '403':
          description: >-
            Fehlender, ungültiger oder widerrufener API-Schlüssel, oder der
            Schlüssel kann keine Unternehmen für diese Anwendung löschen. Ein
            fehlender Schlüssel gibt `403` zurück; ein falscher, widerrufener
            oder abgelaufener Schlüssel gibt `401` zurück.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Es wird nichts gelöscht. `code` gibt den Grund an:
            `in_filed_report`, wenn die Auswahl ein Unternehmen in einem
            finalisierten behördlichen Bericht enthält,
            `subject_deletion_in_progress`, wenn eine andere Anfrage noch eines
            der ausgewählten Unternehmen löscht. Wiederholen Sie die Anfrage,
            sobald dieser Löschvorgang abgeschlossen ist.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InFiledReportError'
                  - $ref: '#/components/schemas/SubjectDeletionInProgressError'
        '429':
          description: >-
            Rate-Limit überschritten; drosseln Sie die Anfragen und wiederholen
            Sie den Versuch nach dem in `Retry-After` angegebenen Intervall.
          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: >-
        Die Löschung wird verweigert, da sich die ausgewählten Daten in einem
        abgeschlossenen regulatorischen Bericht befinden. Es wird nichts
        gelöscht. Löschen Sie den Bericht und wiederholen Sie die Anfrage.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Stabiler Fehlercode für eine Löschung, die durch einen finalisierten
            regulatorischen Bericht blockiert wird.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Berichte, die das Löschen einer Person, eines Unternehmens, eines
            Falls oder einer Sitzung blockieren.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transaktionen, die das Löschen einer Transaktion blockieren, jeweils
            mit den Berichten, in denen sie aufgeführt sind.
    SubjectDeletionInProgressError:
      type: object
      description: >-
        Eine andere Anfrage löscht diese Person oder dieses Unternehmen noch.
        Diese Anfrage hat nichts gelöscht und kann wiederholt werden, sobald
        dieser Löschvorgang abgeschlossen ist; eine Wiederholung löscht dann
        alles, was noch ausgewählt ist.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - subject_deletion_in_progress
          description: >-
            Stabiler Fehlercode für eine Person oder ein Unternehmen, die bzw.
            das von einer anderen Anfrage noch gelöscht wird.
    FiledRegulatoryReport:
      type: object
      description: >-
        Ein finalisierter regulatorischer Bericht, der die angeforderte Löschung
        verhindert.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: Berichts-UUID.
        report_number:
          type: string
          description: In der Console angezeigte Berichtsnummer (z. B. SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Art des aufsichtsrechtlichen Berichts.
        case_uuid:
          type: string
          format: uuid
          description: Fall, zu dem der Bericht gehört.
    FiledReportTransaction:
      type: object
      description: >-
        Eine Transaktion, die nicht gelöscht werden kann, da ein abgeschlossener
        regulatorischer Bericht sie auflistet.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: Didit-Transaktions-UUID.
        transaction_id:
          type: string
          description: >-
            Die Transaktionskennung, die bei der Erstellung der Transaktion
            angegeben wurde.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Abgeschlossene Berichte, die diese Transaktion aufführen.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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