> ## 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 para eliminar empresas en lote: borrado de KYB

> Elimina en lote entidades de empresa (KYB) de Didit usando vendor_data o didit_internal_id como identificador. Cumple con GDPR y CCPA.



Prompt para eliminar empresas en lote
        Copiar el prompt al portapapeles



      
      

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



      
      

Pegar en

## Descripción generalElimina una o varias [entidades comerciales](https://docs.didit.me/es/entities/businesses/overview.md). Los registros de las empresas se eliminan de forma permanente. Este endpoint no abarca las sesiones de Verificación de empresas (KYB), que se conservan con su vínculo a la empresa eliminado; para eliminarlas, usa [Eliminar sesión](https://docs.didit.me/es/sessions-api/delete-session.md). Tampoco abarca las transacciones; para eliminarlas, usa [Eliminar transacciones en lote](https://docs.didit.me/es/management-api/transactions/delete.md).## Cuándo usarlo- Solicitudes de **derecho al olvido**.
- **Limpieza** de empresas de prueba durante el control de calidad.
- **Baja** de empresas eliminadas de tu propia plataforma.## Notas- Acepta una lista de valores de `vendor_data` o de `didit_internal_id`.
- Es idempotente: eliminar una empresa ya eliminada no tiene ningún efecto.
- Devuelve solo el número de elementos eliminados, no un informe por elemento. Los valores que no coinciden con nada se omiten sin aviso.
- Emite `business.data.updated` con `deleted_at` establecido.
- Los registros que pertenecen a la propia entidad de empresa se eliminan con ella: sus vínculos con etiquetas, su historial de comentarios y sus propios registros de dispositivo y de red.
- Los registros generados por una sesión KYB NO se eliminan: los datos del registro de empresas, los documentos subidos, las coincidencias AML, los beneficiarios finales y las comprobaciones de personas clave pertenecen a la sesión y se conservan hasta que elimines la propia sesión.## Datos en un informe regulatorio finalizadoSi alguna de las empresas seleccionadas forma parte de un caso con un informe regulatorio finalizado, toda la solicitud responde con `409` y no se elimina nada. La respuesta usa `code: in_filed_report` e indica cada informe:```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 cada informe con [Eliminar informe](https://docs.didit.me/es/management-api/regulatory-reports/delete.md) y luego repite la misma solicitud.## PermisosEl rol debe conceder `delete:businesses`. Normalmente se reserva para `OWNER` y `ADMIN`.## Relacionado- [Retención de datos](https://docs.didit.me/es/console/data-retention.md)
- [Registros de auditoría](https://docs.didit.me/es/console/audit-logs.md)
- [Operaciones de empresas](https://docs.didit.me/es/entities/businesses/operations.md)


## OpenAPI

````yaml es/openapi-25.json POST /v3/businesses/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificación de identidad. Autentícate con el encabezado x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/businesses/delete/:
    post:
      tags:
        - Businesses
      summary: Eliminar empresas en lote
      description: >-
        **Elimina permanentemente** empresas: esta acción no se puede deshacer.
        Para bloquearlas, es preferible usar [Actualizar el estado de la
        empresa](#patch-/v3/businesses/-vendor_data-/update-status/) con
        `BLOCKED`.


        **Informes regulatorios presentados:** si los datos seleccionados forman
        parte de un informe regulatorio finalizado, se rechaza toda la solicitud
        con `409` y no se elimina nada. El cuerpo usa `code: in_filed_report` e
        identifica cada informe con `uuid`, `report_number`, `report_type` y
        `case_uuid`. Elimina los informes y repite la solicitud.
      operationId: batch_delete_businesses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Proporciona `vendor_data_list`, `didit_internal_id_list` o
                `delete_all: true`. Precedencia cuando se envían varios:
                `delete_all` > `vendor_data_list` > `didit_internal_id_list`
                (solo se usa el selector de mayor precedencia).
              properties:
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Tus propios identificadores que se van a eliminar,
                    comparados exactamente como se enviaron.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: >-
                    UUID internos de Didit (`didit_internal_id`) que se van a
                    eliminar.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Si es `true`, elimina todas las empresas de la aplicación.
                    No se puede combinar con los selectores de lista.
            examples:
              Specific businesses:
                summary: Eliminar por vendor_data
                value:
                  vendor_data_list:
                    - company-123
                    - company-456
              Specific internal IDs:
                summary: Eliminar por didit_internal_id
                value:
                  didit_internal_id_list:
                    - a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    - b2c3d4e5-f6a7-8901-bcde-f12345678901
              All businesses:
                summary: Borrar todas las empresas de esta aplicación
                value:
                  delete_all: true
      responses:
        '200':
          description: >-
            Empresas eliminadas. Devuelve el número de filas eliminadas
            realmente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    description: >-
                      Número de empresas eliminadas (excluye los valores de
                      vendor_data que no coincidieron con nada).
              examples:
                Deleted some:
                  value:
                    deleted: 2
                Nothing matched:
                  value:
                    deleted: 0
        '400':
          description: >-
            No se proporcionó ningún selector (`vendor_data_list`,
            `didit_internal_id_list` y `delete_all` faltan todos o están
            vacíos). El cuerpo del error es 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: >-
            Falta la clave de API, no es válida o fue revocada, o la clave no
            puede eliminar empresas de esta aplicación. Si falta la clave, se
            devuelve `403`; si es incorrecta, fue revocada o expiró, se devuelve
            `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            La selección incluye una empresa que figura en un informe
            regulatorio finalizado. No se elimina nada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InFiledReportError'
        '429':
          description: >-
            Límite de solicitudes superado; espera y reintenta cuando haya
            pasado el intervalo indicado en `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 eliminación se rechaza porque los datos seleccionados están en un
        informe regulatorio finalizado. No se elimina nada. Elimina el informe y
        luego repite la solicitud.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Código de error estable para una eliminación bloqueada por un
            informe regulatorio finalizado.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Informes que impiden eliminar una persona, empresa, caso o sesión.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transacciones que bloquean la eliminación de una transacción, cada
            una con los informes que la incluyen.
    FiledRegulatoryReport:
      type: object
      description: Un informe regulatorio finalizado que impide la eliminación solicitada.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID del informe.
        report_number:
          type: string
          description: >-
            Número de informe que se muestra en la consola (por ejemplo,
            SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Tipo de informe regulatorio.
        case_uuid:
          type: string
          format: uuid
          description: Caso al que pertenece el informe.
    FiledReportTransaction:
      type: object
      description: >-
        Una transacción que no se puede eliminar porque figura en un informe
        regulatorio finalizado.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID de transacción de Didit.
        transaction_id:
          type: string
          description: >-
            El identificador de la transacción proporcionado al crear la
            transacción.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Informes finalizados que incluyen esta transacción.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clave de API de tu aplicación, que encontrarás en Developers -> API
        keys en la Business Console. La clave principal tiene acceso completo.
        Una clave con nombre puede tener un alcance limitado: ninguno, lectura o
        escritura por recurso, limitada a algunos flujos o a sesiones aprobadas,
        a una lista de direcciones IP y a una fecha de caducidad. 401 significa
        que la clave es incorrecta, se revocó o expiró; 403 significa que no se
        envió ninguna clave, que la clave no tiene acceso a este recurso o
        acción, o que la solicitud provino de una dirección fuera de su lista de
        IP; 404 en una ruta de sesión significa que la sesión está fuera de los
        flujos o estados de la clave. Una clave sin acceso a contenido
        multimedia recibe las URL de imágenes, videos y PDF como null, y una
        clave sin permiso de escritura en sesiones recibe los enlaces y tokens
        de sesión como null. Consulta https://docs.didit.me/console/api-keys.

````

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