> ## 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 de suppression d'entreprises en lot : effacement KYB

> Supprimez en masse des entités Business (KYB) de Didit par leur vendor_data ou didit_internal_id. Conforme au RGPD et au CCPA.



Invite de suppression d'entreprises en lot
        Copier le prompt dans le presse-papiers



      
      

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



      
      

Coller dans

## Vue d'ensembleSupprime une ou plusieurs [entreprises](https://docs.didit.me/fr/entities/businesses/overview.md). Les enregistrements des entreprises sont supprimés définitivement. Les sessions de vérification d'entreprise (KYB) ne sont pas couvertes par cet endpoint : elles sont conservées, leur lien avec l'entreprise étant effacé. Supprimez-les avec [Supprimer une session](https://docs.didit.me/fr/sessions-api/delete-session.md). Les transactions ne sont pas non plus couvertes : supprimez-les avec [Suppression en lot des transactions](https://docs.didit.me/fr/management-api/transactions/delete.md).## Quand l'utiliser- **Demandes de droit à l'effacement.**
- **Nettoyage** des entreprises de test pendant la QA.
- **Déprovisionnement** des entreprises retirées de votre propre plateforme.## Remarques- Accepte une liste de valeurs `vendor_data` ou de valeurs `didit_internal_id`.
- Idempotent : supprimer une entreprise déjà supprimée ne produit aucun effet.
- Renvoie uniquement le nombre d'éléments supprimés, et non un rapport par élément. Les valeurs qui ne correspondent à rien sont ignorées silencieusement.
- Émet `business.data.updated` avec `deleted_at` renseigné.
- Les enregistrements appartenant à l'entreprise elle-même sont supprimés avec elle : ses liens de tags, son historique de commentaires, ainsi que ses propres enregistrements d'appareil et de réseau.
- Les enregistrements produits par une session KYB ne sont PAS supprimés : les données du registre des sociétés, les documents téléversés, les résultats AML, les bénéficiaires effectifs et les contrôles des personnes clés appartiennent à la session et subsistent jusqu'à ce que vous supprimiez la session elle-même.## Données dans un rapport réglementaire finaliséSi l'une des entreprises sélectionnées fait partie d'un dossier comportant un rapport réglementaire finalisé, la requête entière renvoie `409` et rien n'est supprimé. La réponse utilise `code: in_filed_report` et nomme chaque rapport :```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"
    }
  ]
}
```Supprimez chaque rapport avec [Supprimer le rapport](https://docs.didit.me/fr/management-api/regulatory-reports/delete.md), puis répétez la même requête.## Une suppression déjà en coursUne entreprise est supprimée par une seule requête à la fois. Si une autre requête supprime encore l'une des entreprises sélectionnées, cette requête attend quelques secondes au maximum, puis renvoie `409` avec `code: subject_deletion_in_progress` et ne supprime rien :```json theme={null}
{
  "detail": "This person or company is being deleted. Retry after deletion completes.",
  "code": "subject_deletion_in_progress"
}
```Répétez la même requête une fois l'autre suppression terminée. Une entreprise déjà supprimée par la première requête ne correspond plus : la répétition ne supprime donc que ce qui reste.## AutorisationsLe rôle doit accorder `delete:businesses`. Cette autorisation est généralement réservée aux rôles `OWNER` et `ADMIN`.## Voir aussi- [Conservation des données](https://docs.didit.me/fr/console/data-retention.md)
- [Journaux d'audit](https://docs.didit.me/fr/console/audit-logs.md)
- [Opérations sur les entreprises](https://docs.didit.me/fr/entities/businesses/operations.md)


## OpenAPI

````yaml fr/openapi-25.json POST /v3/businesses/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/businesses/delete/:
    post:
      tags:
        - Businesses
      summary: Supprimer des entreprises par lot
      description: >-
        **Supprimer définitivement** des entreprises — cette action ne peut pas
        être annulée. Pour bloquer, préférez [Update Business
        Status](#patch-/v3/businesses/-vendor_data-/update-status/) avec
        `BLOCKED`.


        **Rapports réglementaires déposés :** si les données sélectionnées
        figurent dans un rapport réglementaire finalisé, l'ensemble de la
        requête est refusé avec `409` et rien n'est supprimé. Le corps utilise
        `code: in_filed_report` et nomme chaque rapport avec `uuid`,
        `report_number`, `report_type` et `case_uuid`. Supprimez les rapports,
        puis réessayez la requête.
      operationId: batch_delete_businesses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Fournissez `vendor_data_list`, `didit_internal_id_list` ou
                `delete_all: true`. Ordre de priorité si plusieurs sont envoyés
                : `delete_all` > `vendor_data_list` > `didit_internal_id_list`
                (seul le sélecteur ayant la priorité la plus élevée est
                utilisé).
              properties:
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Vos propres identifiants à supprimer, mis en correspondance
                    exacte avec ceux transmis.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: UUID internes Didit (`didit_internal_id`) à supprimer.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Si `true`, supprime toutes les entreprises de l'application.
                    Ne peut pas être combiné avec les sélecteurs de liste.
            examples:
              Specific businesses:
                summary: Supprimer par vendor_data
                value:
                  vendor_data_list:
                    - company-123
                    - company-456
              Specific internal IDs:
                summary: Supprimer par didit_internal_id
                value:
                  didit_internal_id_list:
                    - a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    - b2c3d4e5-f6a7-8901-bcde-f12345678901
              All businesses:
                summary: Effacer toutes les entreprises de cette application
                value:
                  delete_all: true
      responses:
        '200':
          description: >-
            Entreprises supprimées. Renvoie le nombre de lignes effectivement
            supprimées.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    description: >-
                      Nombre d'entreprises supprimées (exclut les valeurs de
                      vendor_data qui ne correspondaient à rien).
              examples:
                Deleted some:
                  value:
                    deleted: 2
                Nothing matched:
                  value:
                    deleted: 0
        '400':
          description: >-
            Aucun sélecteur fourni (tous les éléments `vendor_data_list`,
            `didit_internal_id_list` et `delete_all` sont manquants ou vides).
            Le corps de l'erreur est un tableau JSON.
          content:
            application/json:
              examples:
                Missing selector:
                  value:
                    - >-
                      Provide vendor_data_list, didit_internal_id_list, or set
                      delete_all=true.
        '403':
          description: >-
            Clé API manquante, invalide ou révoquée, ou la clé ne peut pas
            supprimer d'entreprises pour cette application. Une clé manquante
            renvoie `403` ; une clé incorrecte, révoquée ou expirée renvoie
            `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Rien n'est supprimé. `code` en indique la raison : `in_filed_report`
            lorsque la sélection inclut une entreprise présente dans un rapport
            réglementaire finalisé, `subject_deletion_in_progress` lorsqu'une
            autre requête est encore en train de supprimer l'une des entreprises
            sélectionnées. Réessayez la requête une fois cette suppression
            terminée.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InFiledReportError'
                  - $ref: '#/components/schemas/SubjectDeletionInProgressError'
        '429':
          description: >-
            Limite de débit dépassée ; réduisez la cadence et réessayez après
            l'intervalle indiqué dans `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: >-
        La suppression est refusée car les données sélectionnées figurent dans
        un rapport réglementaire finalisé. Rien n'est supprimé. Supprimez le
        rapport, puis réessayez la requête.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Code d'erreur stable pour une suppression bloquée par un rapport
            réglementaire finalisé.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Rapports qui bloquent la suppression d'une personne, d'une
            entreprise, d'un dossier ou d'une session.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transactions qui bloquent la suppression d'une transaction, chacune
            accompagnée des rapports qui la répertorient.
    SubjectDeletionInProgressError:
      type: object
      description: "Une autre requête est toujours en train de supprimer cette personne ou cette entreprise. Cette requête n'a rien supprimé et peut être réessayée une fois cette suppression terminée\_; une nouvelle tentative supprimera alors ce qui est encore sélectionné."
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - subject_deletion_in_progress
          description: >-
            Code d'erreur stable pour une personne ou une entreprise qu'une
            autre requête est toujours en train de supprimer.
    FiledRegulatoryReport:
      type: object
      description: Un rapport réglementaire finalisé qui empêche la suppression demandée.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID du rapport.
        report_number:
          type: string
          description: Numéro de rapport affiché dans la Console (par exemple, SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Type de rapport réglementaire.
        case_uuid:
          type: string
          format: uuid
          description: Dossier auquel appartient le rapport.
    FiledReportTransaction:
      type: object
      description: >-
        Une transaction qui ne peut pas être supprimée car un rapport
        réglementaire finalisé la répertorie.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID de transaction Didit.
        transaction_id:
          type: string
          description: >-
            L'identifiant de la transaction fourni lors de la création de la
            transaction.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Rapports finalisés répertoriant cette transaction.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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