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

# Monitorización AML de empresas: activar o desactivar

> Activa o desactiva la monitorización AML continua de muchas empresas en una llamada con Didit, con estimación de costo previa y job consultable.



Prompt para activar o desactivar la monitorización AML de empresas
        Copiar el prompt al portapapeles



      
      

\<pre>

\`Goal: Enable or disable ongoing AML monitoring for one or many Didit Business (KYB) entities in a single call, with the same semantics as the Business Console. Preview the cost first with estimate_only, then run the change and read the per-business outcome.

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

Request body:
\- is_enabled: boolean (required) - true to enable monitoring, false to disable it.
\- estimate_only: boolean (default false) - when true, returns the cost preview and performs NO writes: no screening, no billing, no job.
\- vendor_data_list: string[] - your own identifiers, matched exactly as sent.
\- didit_internal_id_list: string[] (UUIDs) - the didit_internal_id returned by the create, get and list endpoints.
Provide at least one list; the two are OR'd. At most 1000 identifiers per request across both lists - split larger selections into several calls.

Semantics:
\- One monitored screening per business: a company that verified several times is monitored and billed once. Disabling turns monitoring off across all of the business's screenings.
\- Businesses without any AML screening are screened first (billed as a regular AML screening) using their legal name (or display name) and country; a business with no name is reported as skipped_no_identity_data.
\- Sandbox applications never create screenings (skipped_sandbox).
\- Enabling is refused with 403 when the organization balance does not cover the estimate; the response carries the estimate.

curl (estimate first):
curl -X POST 'https://verification.didit.me/v3/businesses/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "estimate_only": true, "vendor_data_list": ["company-123", "company-456"]}'

Response 200 (estimate_only):
\{
"users_total": 2, "already_enabled": 0, "with_existing_aml": 1, "needing_screening": 1,
"skipped_no_identity_data": 0, "skipped_blocked": 0,
"estimated_screening_cost_usd": 0.2, "estimated_annual_monitoring_cost_usd": 0.14,
"balance_sufficient": true, "unmatched": []
}
(users_total counts the selected businesses; the estimate shape is shared with the users endpoint.)

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

Response 200 (20 businesses or fewer - processed inline, already COMPLETED) or 202 (more than 20 - running in the background):
\{
"job_id": "<uuid>", "status": "COMPLETED", "is_enabled": true, "target_type": "business",
"total": 2, "processed": 2,
"outcomes": {"enabled": 1, "screened_and_enabled": 1, "already_enabled": 0, "disabled": 0, "skipped_no_identity_data": 0, "skipped_blocked": 0, "skipped_sandbox": 0, "failed_provider": 0, "failed_insufficient_balance": 0},
"results": [
\{"didit_internal_id": "<uuid>", "vendor_data": "company-123", "outcome": "enabled"},
\{"didit_internal_id": "<uuid>", "vendor_data": "company-456", "outcome": "screened_and_enabled"}
],
"estimate": { ...same shape as above, without unmatched... },
"unmatched": [],
"error": null,                     // generic message when status is FAILED
"created_at": "<datetime>", "completed_at": "<datetime>"
}
On 202, poll GET /v3/aml-monitoring/jobs/{job_id}/ every couple of seconds until status is COMPLETED or FAILED; results fills in as businesses are processed.

Per-business outcome values: enabled, screened_and_enabled, already_enabled, disabled, skipped_no_identity_data, skipped_sandbox, failed_provider, failed_insufficient_balance (skipped_blocked is always 0 for businesses).

Failure modes:
\- 400 - is_enabled missing, no selector, or more than 1000 identifiers across both lists.
A selection that matches nothing is NOT an error: the job completes with total 0 and every identifier is listed under unmatched (same convention as the batch delete endpoints).
\- 401 - missing/invalid x-api-key.
\- 403 - insufficient balance to enable monitoring for this selection (body: error + estimate).

Idempotency: re-sending an enable returns already_enabled for businesses that are already monitored, with no second screening and no second bill. Disabling an unmonitored business returns disabled and changes nothing.

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

\</pre>



      
      

Pegar en

## Descripción generalActiva o desactiva la [monitorización AML continua](https://docs.didit.me/es/core-technology/aml-screening/continuous-monitoring-aml-screening.md) de las [entidades empresariales](https://docs.didit.me/es/entities/businesses/overview.md) seleccionadas, exactamente igual que la acción **Monitorización AML continua** de Business Console. Business Console y este endpoint ejecutan la misma operación interna, por lo que las reglas, la facturación y los resultados son idénticos.Envía primero `estimate_only: true` para ver cuántas empresas hay seleccionadas, cuántas necesitan un nuevo análisis AML, el importe único de los análisis y el importe anual de la monitorización. La simulación no realiza ninguna escritura. La estimación usa los mismos nombres de campo que el endpoint de usuarios, así que `users_total` es el número de empresas seleccionadas.## Cómo se procesa una selección- **Un análisis monitorizado por empresa.** Una empresa que se verificó varias veces se monitoriza y se factura una sola vez. Al desactivarla, la monitorización se apaga en todos los análisis de esa empresa.
- **Las empresas sin análisis AML se analizan primero.** Didit crea para ellas una nueva verificación AML (visible en la pestaña **Verifications** de la empresa), que se factura como un análisis AML normal, y activa en ella la monitorización. El análisis usa la razón social (o el nombre comercial) y el país de la empresa; una empresa sin ningún nombre se informa como `skipped_no_identity_data` en lugar de descartarse sin aviso.
- **Las aplicaciones de sandbox nunca crean análisis** (`skipped_sandbox`).
- **El saldo se comprueba de antemano.** La activación se rechaza con `403` cuando tu saldo no cubre la estimación, y la respuesta incluye la estimación para que sepas cuánto debes recargar.
- **Renovación anual.** A una empresa que pasa a estar monitorizada se le factura el precio anual de monitorización en su próxima fecha de renovación, la misma fecha que Business Console muestra en la columna **Ongoing monitoring**. Desactivar detiene la renovación; no reembolsa un periodo ya facturado.## Selección y tamaño del loteSelecciona las empresas con `vendor_data_list`, `didit_internal_id_list` o ambos; las dos listas se combinan con OR. Una solicitud acepta como máximo **1000 identificadores** entre ambas listas. Los identificadores que no coinciden con ninguna empresa de tu aplicación se devuelven en `unmatched`, tal como se enviaron, y nunca hacen fallar la solicitud: una selección que no coincide con nada termina como un trabajo vacío (`total: 0`) con todos los identificadores listados, la misma convención que siguen los endpoints de eliminación por lotes.## En la misma llamada o en segundo planoLas selecciones de **20 empresas o menos** se procesan en la misma llamada, que devuelve `200` con el trabajo terminado. Las selecciones más grandes devuelven `202` con un trabajo `PENDING`; consulta [Obtener trabajo de monitorización AML](https://docs.didit.me/es/management-api/aml-monitoring/get-job.md) periódicamente hasta que `status` sea `COMPLETED` o `FAILED`. En ambos casos, el trabajo incluye una entrada de `results` por empresa con su `outcome`.| `outcome` | Significado |
| - | - |
| `enabled` | Monitorización activada en un análisis AML existente. |
| `screened_and_enabled` | Se creó un nuevo análisis AML (facturado) y se activó en él la monitorización. |
| `already_enabled` | La monitorización ya estaba activa; no cambió nada y no se facturó nada. |
| `disabled` | Monitorización desactivada en todos los análisis de la empresa. |
| `skipped_no_identity_data` | La empresa no tiene razón social ni nombre visible que analizar. |
| `skipped_sandbox` | Aplicación de sandbox; no se crea ningún análisis. |
| `failed_provider` | No se pudo completar el análisis. Vuelve a intentarlo más tarde. |
| `failed_insufficient_balance` | El saldo se agotó mientras se ejecutaba el trabajo. |## WebhooksActivar o desactivar la monitorización no emite ningún webhook propio. Una vez activada la monitorización, los reanálisis siguen disparando los eventos habituales `status.updated` y `data.updated` descritos en [Monitorización AML continua](https://docs.didit.me/es/core-technology/aml-screening/continuous-monitoring-aml-screening.md).## PermisosCualquier clave de API activa de la aplicación puede invocar este endpoint. Las claves de API de Didit tienen **alcance de aplicación, no de rol**: los [roles y permisos](https://docs.didit.me/es/console/roles-permissions.md) de Business Console determinan lo que una *persona* puede hacer en Business Console y no se evalúan para el tráfico de la Management API.## Páginas relacionadas- [Obtener tarea de monitorización AML](https://docs.didit.me/es/management-api/aml-monitoring/get-job.md)
- [Activar o desactivar la monitorización AML de usuarios](https://docs.didit.me/es/management-api/aml-monitoring/toggle-users.md)
- [Monitorización AML continua](https://docs.didit.me/es/core-technology/aml-screening/continuous-monitoring-aml-screening.md)
- [Análisis AML de empresas](https://docs.didit.me/es/business-verification/aml.md)
- [Listar empresas](https://docs.didit.me/es/management-api/businesses/list.md)


## OpenAPI

````yaml es/openapi-25.json POST /v3/businesses/aml-monitoring/
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/aml-monitoring/:
    post:
      tags:
        - AML Ongoing Monitoring
      summary: Activar o desactivar la monitorización AML continua para empresas
      description: >-
        Activa o desactiva la monitorización AML continua para las empresas
        seleccionadas, con la misma semántica que la Business Console. Se
        mantiene exactamente un análisis AML monitorizado por empresa, de modo
        que un perfil que se verificó varias veces se monitoriza y se factura
        una sola vez; al desactivarla, la monitorización se desactiva en todos
        los análisis del perfil. Las empresas sin ningún análisis AML se
        analizan primero (facturado como un análisis AML normal) cuando tienen
        el nombre legal o comercial necesario; de lo contrario, se informan como
        `skipped_no_identity_data`.


        Establece `estimate_only: true` para previsualizar recuentos y costes
        sin escribir nada. Las selecciones de 20 perfiles o menos se resuelven
        en línea y devuelven `200` con el trabajo completado; las selecciones
        más grandes devuelven `202` y se ejecutan en segundo plano: consulta
        periódicamente [Obtener trabajo de monitorización
        AML](#get-/v3/aml-monitoring/jobs/-job_id-/) con el `job_id` devuelto.
        La activación se rechaza con `403` cuando el saldo de la organización no
        cubre la estimación. Los identificadores que no coinciden con nada se
        enumeran en `unmatched` y nunca hacen fallar la solicitud: una selección
        que no coincide con nada se completa como un trabajo vacío (`total` 0),
        la misma convención que los endpoints de eliminación por lotes.
      operationId: toggle_businesses_aml_monitoring
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - is_enabled
              description: >-
                Selecciona empresas con `vendor_data_list`,
                `didit_internal_id_list` o ambas (las dos listas se combinan con
                OR). Como máximo 1000 identificadores por solicitud entre ambas
                listas.
              properties:
                is_enabled:
                  type: boolean
                  description: >-
                    true para activar la monitorización, false para
                    desactivarla.
                estimate_only:
                  type: boolean
                  default: false
                  description: >-
                    Si es true, devuelve la estimación del costo y no realiza
                    ninguna escritura: ni análisis, ni facturación, ni tarea.
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Tus propios identificadores de las empresas que se van a
                    activar o desactivar, comparados exactamente como se
                    enviaron.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: >-
                    IDs internos de Didit de las empresas que se van a activar o
                    desactivar: el `didit_internal_id` que devuelven los
                    endpoints de creación, obtención y listado.
            examples:
              Estimate first:
                summary: Vista previa del coste sin escribir nada
                value:
                  is_enabled: true
                  estimate_only: true
                  vendor_data_list:
                    - company-123
                    - company-456
              Enable:
                summary: Activar la monitorización para dos empresas
                value:
                  is_enabled: true
                  vendor_data_list:
                    - company-123
                    - company-456
              Disable:
                summary: Desactivar la monitorización por ID interno de Didit
                value:
                  is_enabled: false
                  didit_internal_id_list:
                    - 3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11
      responses:
        '200':
          description: >-
            La estimación (cuando `estimate_only` es true) o el trabajo
            completado para una selección procesada en línea.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringToggleResult'
        '202':
          description: >-
            Las selecciones más grandes se ejecutan en segundo plano. Consulta
            periódicamente el endpoint del trabajo con `job_id`; `results` se va
            completando a medida que se procesan los perfiles.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringJob'
        '400':
          description: >-
            Error de validación: falta `is_enabled`, no hay selector o hay más
            de 1000 identificadores entre ambas listas.
        '401':
          description: Clave de API ausente o no válida.
        '403':
          description: >-
            Saldo insuficiente para habilitar la monitorización de esta
            selección. La respuesta incluye la `estimate` para que puedas
            recargar el importe correcto.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  estimate:
                    type: object
                    description: >-
                      Vista previa del coste. Se devuelve directamente cuando
                      estimate_only es true (no se escribe nada).
                    properties:
                      users_total:
                        type: integer
                        description: Perfiles que coinciden con la selección.
                      already_enabled:
                        type: integer
                        description: >-
                          Perfiles ya monitorizados (no hay nada que hacer al
                          activar; son los que se desactivan al desactivar).
                      with_existing_aml:
                        type: integer
                        description: >-
                          Perfiles cuyo análisis AML existente pasará a estar
                          monitorizado (sin un nuevo análisis).
                      needing_screening:
                        type: integer
                        description: >-
                          Perfiles sin ningún análisis AML que se analizarán
                          primero (se factura como un análisis AML normal).
                      skipped_no_identity_data:
                        type: integer
                        description: >-
                          Perfiles que no se pueden analizar porque faltan datos
                          de identidad.
                      skipped_blocked:
                        type: integer
                        description: >-
                          Usuarios bloqueados que se omitirán (siempre 0 para
                          empresas).
                      estimated_screening_cost_usd:
                        type: number
                        example: 0.2
                        description: Costo único de los nuevos análisis.
                      estimated_annual_monitoring_cost_usd:
                        type: number
                        example: 0.07
                        description: >-
                          Coste anual de monitorización de los perfiles que
                          pasarán a estar monitorizados.
                      balance_sufficient:
                        type: boolean
                        description: >-
                          Si el saldo de la organización cubre el análisis más
                          el primer año de monitorización.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/businesses/aml-monitoring/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"is_enabled": true, "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.set_aml_monitoring(
                is_enabled=True,
                estimate_only=True,
                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.setAmlMonitoring({
              is_enabled: true,
              estimate_only: true,
              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.SetAMLMonitoring(ctx, didit.BusinessesSetAMLMonitoringParams{\n\tIsEnabled:      true,\n\tEstimateOnly:   didit.Bool(true),\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.BusinessesSetAmlMonitoringParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.businesses().setAmlMonitoring(BusinessesSetAmlMonitoringParams.builder()
                    .isEnabled(true)
                    .estimateOnly(true)
                    .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->setAmlMonitoring([
                'is_enabled' => true,
                'estimate_only' => true,
                '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.set_aml_monitoring(
              is_enabled: true,
              estimate_only: true,
              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.SetAmlMonitoringAsync(new
            BusinessesSetAmlMonitoringParams

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

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    AMLMonitoringToggleResult:
      oneOf:
        - type: object
          required:
            - users_total
            - already_enabled
            - with_existing_aml
            - needing_screening
            - skipped_no_identity_data
            - skipped_blocked
            - estimated_screening_cost_usd
            - estimated_annual_monitoring_cost_usd
            - balance_sufficient
            - unmatched
          description: >-
            Vista previa del coste. Se devuelve directamente cuando
            estimate_only es true (no se escribe nada).
          properties:
            users_total:
              type: integer
              description: Perfiles que coinciden con la selección.
            already_enabled:
              type: integer
              description: >-
                Perfiles ya monitorizados (no hay nada que hacer al activar; son
                los que se desactivan al desactivar).
            with_existing_aml:
              type: integer
              description: >-
                Perfiles cuyo análisis AML existente pasará a estar monitorizado
                (sin un nuevo análisis).
            needing_screening:
              type: integer
              description: >-
                Perfiles sin ningún análisis AML que se analizarán primero (se
                factura como un análisis AML normal).
            skipped_no_identity_data:
              type: integer
              description: >-
                Perfiles que no se pueden analizar porque faltan datos de
                identidad.
            skipped_blocked:
              type: integer
              description: Usuarios bloqueados que se omitirán (siempre 0 para empresas).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: Costo único de los nuevos análisis.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: >-
                Coste anual de monitorización de los perfiles que pasarán a
                estar monitorizados.
            balance_sufficient:
              type: boolean
              description: >-
                Si el saldo de la organización cubre el análisis más el primer
                año de monitorización.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                Identificadores de la solicitud que no coincidieron con ningún
                perfil de esta aplicación, exactamente como se enviaron.
        - type: object
          required:
            - job_id
            - status
            - is_enabled
            - target_type
            - total
            - processed
            - outcomes
            - results
            - error
            - created_at
            - completed_at
            - estimate
            - unmatched
          properties:
            job_id:
              type: string
              format: uuid
            status:
              type: string
              enum:
                - PENDING
                - PROCESSING
                - COMPLETED
                - FAILED
            is_enabled:
              type: boolean
              description: >-
                true cuando el trabajo activa la monitorización, false cuando la
                desactiva.
            target_type:
              type: string
              enum:
                - user
                - business
              description: Qué familia de perfiles activa o desactiva el trabajo.
            total:
              type: integer
              description: Perfiles que procesa el trabajo.
            processed:
              type: integer
              description: Perfiles procesados hasta el momento.
            outcomes:
              type: object
              description: >-
                Contadores de resultados por registro. Cada perfil seleccionado
                corresponde exactamente a un contador; no se omite nada de forma
                silenciosa.
              properties:
                enabled:
                  type: integer
                  description: Monitorización activada en un análisis AML existente.
                screened_and_enabled:
                  type: integer
                  description: >-
                    Se creó un nuevo análisis AML (facturado) y se activó la
                    monitorización en él.
                already_enabled:
                  type: integer
                  description: >-
                    La monitorización ya estaba activa; no se cambió nada y no
                    se facturó nada.
                disabled:
                  type: integer
                  description: >-
                    Monitorización desactivada en todos los análisis AML del
                    perfil.
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    Omitido: al perfil le faltan el nombre completo, la fecha de
                    nacimiento y el país (usuarios) o un nombre (empresas)
                    necesarios para el análisis.
                skipped_blocked:
                  type: integer
                  description: 'Omitido: el usuario está bloqueado.'
                skipped_sandbox:
                  type: integer
                  description: 'Omitido: aplicación de sandbox, no se crea ningún análisis.'
                failed_provider:
                  type: integer
                  description: No se pudo completar el análisis; reinténtalo más tarde.
                failed_insufficient_balance:
                  type: integer
                  description: El saldo se agotó mientras se ejecutaba el trabajo.
            results:
              type: array
              description: >-
                Una entrada por perfil procesado, en orden de procesamiento.
                Crece mientras se ejecuta el trabajo; está completa cuando el
                estado es COMPLETED. Se registra para los trabajos iniciados a
                través de la API.
              items:
                type: object
                properties:
                  didit_internal_id:
                    type: string
                    format: uuid
                    description: ID interno de Didit del perfil.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Tu propio identificador del perfil.
                  outcome:
                    type: string
                    enum:
                      - enabled
                      - screened_and_enabled
                      - already_enabled
                      - disabled
                      - skipped_no_identity_data
                      - skipped_blocked
                      - skipped_sandbox
                      - failed_provider
                      - failed_insufficient_balance
            error:
              type: string
              nullable: true
              description: >-
                Mensaje de error genérico cuando el estado es FAILED; la causa
                detallada se conserva en la plataforma.
            created_at:
              type: string
              format: date-time
            completed_at:
              type: string
              format: date-time
              nullable: true
            estimate:
              type: object
              description: >-
                Vista previa del coste. Se devuelve directamente cuando
                estimate_only es true (no se escribe nada).
              properties:
                users_total:
                  type: integer
                  description: Perfiles que coinciden con la selección.
                already_enabled:
                  type: integer
                  description: >-
                    Perfiles ya monitorizados (no hay nada que hacer al activar;
                    son los que se desactivan al desactivar).
                with_existing_aml:
                  type: integer
                  description: >-
                    Perfiles cuyo análisis AML existente pasará a estar
                    monitorizado (sin un nuevo análisis).
                needing_screening:
                  type: integer
                  description: >-
                    Perfiles sin ningún análisis AML que se analizarán primero
                    (se factura como un análisis AML normal).
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    Perfiles que no se pueden analizar porque faltan datos de
                    identidad.
                skipped_blocked:
                  type: integer
                  description: >-
                    Usuarios bloqueados que se omitirán (siempre 0 para
                    empresas).
                estimated_screening_cost_usd:
                  type: number
                  example: 0.2
                  description: Costo único de los nuevos análisis.
                estimated_annual_monitoring_cost_usd:
                  type: number
                  example: 0.07
                  description: >-
                    Coste anual de monitorización de los perfiles que pasarán a
                    estar monitorizados.
                balance_sufficient:
                  type: boolean
                  description: >-
                    Si el saldo de la organización cubre el análisis más el
                    primer año de monitorización.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                Identificadores de la solicitud que no coincidieron con ningún
                perfil de esta aplicación, exactamente como se enviaron. No
                forman parte del trabajo.
    AMLMonitoringJob:
      type: object
      properties:
        job_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
        is_enabled:
          type: boolean
          description: >-
            true cuando el trabajo activa la monitorización, false cuando la
            desactiva.
        target_type:
          type: string
          enum:
            - user
            - business
          description: Qué familia de perfiles activa o desactiva el trabajo.
        total:
          type: integer
          description: Perfiles que procesa el trabajo.
        processed:
          type: integer
          description: Perfiles procesados hasta el momento.
        outcomes:
          type: object
          description: >-
            Contadores de resultados por registro. Cada perfil seleccionado
            corresponde exactamente a un contador; no se omite nada de forma
            silenciosa.
          properties:
            enabled:
              type: integer
              description: Monitorización activada en un análisis AML existente.
            screened_and_enabled:
              type: integer
              description: >-
                Se creó un nuevo análisis AML (facturado) y se activó la
                monitorización en él.
            already_enabled:
              type: integer
              description: >-
                La monitorización ya estaba activa; no se cambió nada y no se
                facturó nada.
            disabled:
              type: integer
              description: Monitorización desactivada en todos los análisis AML del perfil.
            skipped_no_identity_data:
              type: integer
              description: >-
                Omitido: al perfil le faltan el nombre completo, la fecha de
                nacimiento y el país (usuarios) o un nombre (empresas)
                necesarios para el análisis.
            skipped_blocked:
              type: integer
              description: 'Omitido: el usuario está bloqueado.'
            skipped_sandbox:
              type: integer
              description: 'Omitido: aplicación de sandbox, no se crea ningún análisis.'
            failed_provider:
              type: integer
              description: No se pudo completar el análisis; reinténtalo más tarde.
            failed_insufficient_balance:
              type: integer
              description: El saldo se agotó mientras se ejecutaba el trabajo.
        results:
          type: array
          description: >-
            Una entrada por perfil procesado, en orden de procesamiento. Crece
            mientras se ejecuta el trabajo; está completa cuando el estado es
            COMPLETED. Se registra para los trabajos iniciados a través de la
            API.
          items:
            type: object
            properties:
              didit_internal_id:
                type: string
                format: uuid
                description: ID interno de Didit del perfil.
              vendor_data:
                type: string
                nullable: true
                description: Tu propio identificador del perfil.
              outcome:
                type: string
                enum:
                  - enabled
                  - screened_and_enabled
                  - already_enabled
                  - disabled
                  - skipped_no_identity_data
                  - skipped_blocked
                  - skipped_sandbox
                  - failed_provider
                  - failed_insufficient_balance
        error:
          type: string
          nullable: true
          description: >-
            Mensaje de error genérico cuando el estado es FAILED; la causa
            detallada se conserva en la plataforma.
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
        estimate:
          type: object
          description: >-
            Vista previa del coste. Se devuelve directamente cuando
            estimate_only es true (no se escribe nada).
          properties:
            users_total:
              type: integer
              description: Perfiles que coinciden con la selección.
            already_enabled:
              type: integer
              description: >-
                Perfiles ya monitorizados (no hay nada que hacer al activar; son
                los que se desactivan al desactivar).
            with_existing_aml:
              type: integer
              description: >-
                Perfiles cuyo análisis AML existente pasará a estar monitorizado
                (sin un nuevo análisis).
            needing_screening:
              type: integer
              description: >-
                Perfiles sin ningún análisis AML que se analizarán primero (se
                factura como un análisis AML normal).
            skipped_no_identity_data:
              type: integer
              description: >-
                Perfiles que no se pueden analizar porque faltan datos de
                identidad.
            skipped_blocked:
              type: integer
              description: Usuarios bloqueados que se omitirán (siempre 0 para empresas).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: Costo único de los nuevos análisis.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: >-
                Coste anual de monitorización de los perfiles que pasarán a
                estar monitorizados.
            balance_sufficient:
              type: boolean
              description: >-
                Si el saldo de la organización cubre el análisis más el primer
                año de monitorización.
        unmatched:
          type: array
          items:
            type: string
          description: >-
            Identificadores de la solicitud que no coincidieron con ningún
            perfil de esta aplicación, exactamente como se enviaron. No forman
            parte del trabajo.
  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.