> ## 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 per eliminare aziende in batch: cancellazione KYB

> Con Didit puoi eliminare in blocco le entità aziendali (KYB) tramite vendor_data o didit_internal_id. Conforme a GDPR e CCPA.



Prompt per l'eliminazione in blocco delle aziende
        Copia il prompt negli appunti



      
      

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



      
      

Incolla in

## PanoramicaElimina una o più [entità aziendali](https://docs.didit.me/it/entities/businesses/overview.md). I record delle aziende vengono rimossi in modo permanente. Le sessioni di Verifica aziendale (KYB) non sono coperte da questo endpoint e restano, con il collegamento all'azienda azzerato: eliminale con [Elimina sessione](https://docs.didit.me/it/sessions-api/delete-session.md). Anche le transazioni non sono coperte: eliminale con [Eliminazione in blocco delle transazioni](https://docs.didit.me/it/management-api/transactions/delete.md).## Quando usarlo- Richieste di **diritto all'oblio**.
- **Pulizia** delle aziende di test durante il QA.
- **Dismissione** delle aziende rimosse dalla tua piattaforma.## Note- Accetta un elenco di valori `vendor_data` o di valori `didit_internal_id`.
- Idempotente: eliminare un'azienda già eliminata non produce alcun effetto.
- Restituisce solo il conteggio di ciò che è stato eliminato, non un report per singolo elemento. I valori che non corrispondono a nulla vengono ignorati senza segnalazioni.
- Emette `business.data.updated` con `deleted_at` valorizzato.
- I record di proprietà dell'entità aziendale stessa vengono eliminati insieme a essa: i suoi collegamenti ai tag, la cronologia dei commenti e i propri record di dispositivo e di rete.
- I record prodotti da una sessione KYB NON vengono eliminati: i dati del registro delle imprese, i documenti caricati, i riscontri AML, i titolari effettivi e i controlli sulle persone chiave appartengono alla sessione e restano finché non elimini la sessione stessa.## Dati in un report normativo finalizzatoSe una qualsiasi azienda selezionata fa parte di un caso con un report normativo finalizzato, l'intera richiesta restituisce `409` e non viene eliminato nulla. La risposta usa `code: in_filed_report` e indica ciascun report:```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"
    }
  ]
}
```Elimina ciascun report con [Elimina report](https://docs.didit.me/it/management-api/regulatory-reports/delete.md), poi ripeti la stessa richiesta.## Un'eliminazione già in corsoUn'azienda viene eliminata da una sola richiesta alla volta. Se un'altra richiesta sta ancora eliminando una delle aziende selezionate, questa richiesta attende al massimo qualche secondo, quindi restituisce `409` con `code: subject_deletion_in_progress` e non elimina nulla:```json theme={null}
{
  "detail": "This person or company is being deleted. Retry after deletion completes.",
  "code": "subject_deletion_in_progress"
}
```Ripeti la stessa richiesta una volta completata l'altra eliminazione. Un'azienda già eliminata dalla richiesta precedente non corrisponde più, quindi la ripetizione elimina solo ciò che resta.## AutorizzazioniIl ruolo deve concedere `delete:businesses`. Di norma è riservato a `OWNER` e `ADMIN`.## Correlati- [Conservazione dei dati](https://docs.didit.me/it/console/data-retention.md)
- [Registro di audit](https://docs.didit.me/it/console/audit-logs.md)
- [Operazioni sulle aziende](https://docs.didit.me/it/entities/businesses/operations.md)


## OpenAPI

````yaml it/openapi-25.json POST /v3/businesses/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/businesses/delete/:
    post:
      tags:
        - Businesses
      summary: Elimina aziende in blocco
      description: >-
        **Elimina definitivamente** le aziende: questa operazione non può essere
        annullata. Per il blocco preferisci [Aggiorna stato
        azienda](#patch-/v3/businesses/-vendor_data-/update-status/) con
        `BLOCKED`.


        **Report normativi presentati:** se i dati selezionati sono presenti in
        un report normativo finalizzato, l'intera richiesta viene rifiutata con
        `409` e non viene eliminato nulla. Il corpo usa `code: in_filed_report`
        e indica ciascun report con `uuid`, `report_number`, `report_type` e
        `case_uuid`. Elimina i report, quindi ripeti la richiesta.
      operationId: batch_delete_businesses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Fornisci `vendor_data_list`, `didit_internal_id_list` o
                `delete_all: true`. Ordine di precedenza quando ne vengono
                inviati diversi: `delete_all` > `vendor_data_list` >
                `didit_internal_id_list` (viene utilizzato solo il selettore con
                precedenza più alta).
              properties:
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    I tuoi identificatori da eliminare, confrontati esattamente
                    come inviati.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: UUID interni Didit (`didit_internal_id`) da eliminare.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Se `true`, elimina ogni azienda nell'applicazione. Non può
                    essere combinato con i selettori di elenco.
            examples:
              Specific businesses:
                summary: Elimina tramite vendor_data
                value:
                  vendor_data_list:
                    - company-123
                    - company-456
              Specific internal IDs:
                summary: Elimina tramite didit_internal_id
                value:
                  didit_internal_id_list:
                    - a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    - b2c3d4e5-f6a7-8901-bcde-f12345678901
              All businesses:
                summary: Elimina tutte le aziende in questa applicazione
                value:
                  delete_all: true
      responses:
        '200':
          description: >-
            Aziende eliminate. Restituisce il numero di righe effettivamente
            rimosse.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    description: >-
                      Numero di aziende eliminate (esclude i valori di
                      vendor_data che non corrispondevano a nulla).
              examples:
                Deleted some:
                  value:
                    deleted: 2
                Nothing matched:
                  value:
                    deleted: 0
        '400':
          description: >-
            Nessun selettore fornito (tutti i parametri `vendor_data_list`,
            `didit_internal_id_list` e `delete_all` risultano mancanti o vuoti).
            Il corpo dell'errore è un array JSON.
          content:
            application/json:
              examples:
                Missing selector:
                  value:
                    - >-
                      Provide vendor_data_list, didit_internal_id_list, or set
                      delete_all=true.
        '403':
          description: >-
            Chiave API mancante, non valida o revocata, oppure la chiave non può
            eliminare aziende per questa applicazione. Una chiave mancante
            restituisce `403`; una chiave errata, revocata o scaduta restituisce
            `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Non viene eliminato nulla. `code` ne indica il motivo:
            `in_filed_report` quando la selezione include un'azienda presente in
            un report normativo finalizzato, `subject_deletion_in_progress`
            quando un'altra richiesta sta ancora eliminando una delle aziende
            selezionate. Ripeti la richiesta una volta completata tale
            eliminazione.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InFiledReportError'
                  - $ref: '#/components/schemas/SubjectDeletionInProgressError'
        '429':
          description: >-
            Limite di frequenza superato; rallenta e riprova dopo l'intervallo
            indicato in `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: >-
        L'eliminazione è stata rifiutata perché i dati selezionati si trovano in
        un report normativo finalizzato. Non viene eliminato nulla. Elimina il
        report, quindi ripeti la richiesta.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Codice di errore stabile per un'eliminazione bloccata da un report
            normativo finalizzato.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Report che bloccano l'eliminazione di una persona, azienda, caso o
            sessione.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transazioni che bloccano l'eliminazione di una transazione, ciascuna
            con i report che la elencano.
    SubjectDeletionInProgressError:
      type: object
      description: >-
        Un'altra richiesta sta ancora eliminando questa persona o azienda.
        Questa richiesta non ha eliminato nulla e può essere ripetuta una volta
        terminata tale eliminazione; un nuovo tentativo eliminerà quindi ciò che
        è ancora selezionato.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - subject_deletion_in_progress
          description: >-
            Codice di errore stabile per una persona o un'azienda che un'altra
            richiesta sta ancora eliminando.
    FiledRegulatoryReport:
      type: object
      description: Un report normativo finalizzato che impedisce l'eliminazione richiesta.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID del report.
        report_number:
          type: string
          description: Numero del report mostrato nella Console (ad esempio, SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Tipo di report normativo.
        case_uuid:
          type: string
          format: uuid
          description: Caso a cui appartiene il report.
    FiledReportTransaction:
      type: object
      description: >-
        Una transazione che non può essere eliminata perché inclusa in un report
        normativo finalizzato.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID della transazione Didit.
        transaction_id:
          type: string
          description: >-
            L'identificatore della transazione fornito al momento della
            creazione della transazione.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Report finalizzati che includono questa transazione.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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