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

# Monitoraggio AML aziende: attivare o disattivare via API

> Attiva o disattiva il monitoraggio AML continuo per più aziende con una sola chiamata, con stima dei costi in dry-run, job interrogabile ed esito per azienda.



Prompt per attivare o disattivare il monitoraggio AML per le aziende
        Copia il prompt negli appunti



      
      

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



      
      

Incolla in

## PanoramicaAttiva o disattiva il [monitoraggio AML continuo](https://docs.didit.me/it/core-technology/aml-screening/continuous-monitoring-aml-screening.md) per le [entità Business](https://docs.didit.me/it/entities/businesses/overview.md) selezionate, esattamente come fa l'azione **Monitoraggio AML continuo** nella Business Console. La Console e questo endpoint eseguono la stessa operazione sottostante, quindi regole, fatturazione ed esiti sono identici.Invia prima `estimate_only: true` per vedere quante aziende sono selezionate, quante richiedono un nuovo screening AML, il costo una tantum dello screening e il costo annuo del monitoraggio. Un'esecuzione di prova non scrive nulla. La stima usa gli stessi nomi di campo dell'endpoint degli utenti, quindi `users_total` indica il numero di aziende selezionate.## Come viene elaborata una selezione- **Un solo screening monitorato per azienda.** Un'azienda verificata più volte viene monitorata e fatturata una sola volta. La disattivazione interrompe il monitoraggio su tutti gli screening di quell'azienda.
- **Le aziende senza screening AML vengono prima sottoposte a screening.** Didit crea per loro una nuova verifica AML (visibile nella scheda **Verifiche** dell'azienda), fatturata come un normale screening AML, e attiva il monitoraggio su di essa. Lo screening usa la ragione sociale (o il nome visualizzato) e il paese dell'azienda; un'azienda senza alcun nome viene segnalata come `skipped_no_identity_data` invece di essere scartata in silenzio.
- **Le applicazioni in sandbox non creano mai screening** (`skipped_sandbox`).
- **Il saldo viene verificato in anticipo.** L'attivazione viene rifiutata con `403` quando il saldo non copre la stima, e la risposta include la stima così sai quanto ricaricare.
- **Rinnovo annuale.** Un'azienda appena monitorata viene fatturata al prezzo annuale del monitoraggio alla sua prossima data di rinnovo, la stessa data che la Console mostra nella colonna **Monitoraggio continuo**. La disattivazione interrompe il rinnovo; non rimborsa un periodo già fatturato.## Selezione e dimensione del batchSeleziona le aziende con `vendor_data_list`, `didit_internal_id_list`, oppure entrambi; le due liste sono combinate con OR. Una richiesta accetta al massimo **1000 identificativi** in totale sulle due liste. Gli identificativi che non corrispondono ad alcuna azienda della tua applicazione vengono restituiti in `unmatched`, esattamente come inviati, e non fanno mai fallire la richiesta: una selezione che non corrisponde a nessuna azienda si completa come job vuoto (`total: 0`) con tutti gli identificativi elencati, la stessa convenzione degli endpoint di eliminazione in batch.## Elaborazione immediata o in backgroundLe selezioni di **20 aziende o meno** vengono elaborate immediatamente e la chiamata restituisce `200` con il job completato. Le selezioni più grandi restituiscono `202` con un job `PENDING`; interroga [Recupera job di monitoraggio AML](https://docs.didit.me/it/management-api/aml-monitoring/get-job.md) finché `status` non diventa `COMPLETED` o `FAILED`. In entrambi i casi il job contiene una voce `results` per azienda con il relativo `outcome`.| `outcome` | Significato |
| - | - |
| `enabled` | Monitoraggio attivato su uno screening AML esistente. |
| `screened_and_enabled` | È stato creato un nuovo screening AML (fatturato) e su di esso è stato attivato il monitoraggio. |
| `already_enabled` | Il monitoraggio era già attivo; nulla è stato modificato, nulla è stato fatturato. |
| `disabled` | Monitoraggio disattivato su tutti gli screening dell'azienda. |
| `skipped_no_identity_data` | L'azienda non ha una ragione sociale o un nome visualizzato da sottoporre a screening. |
| `skipped_sandbox` | Applicazione in sandbox; non viene creato alcuno screening. |
| `failed_provider` | Lo screening non è stato completato. Riprova più tardi. |
| `failed_insufficient_balance` | Il saldo si è esaurito durante l'esecuzione del job. |## WebhookAttivare o disattivare il monitoraggio non emette un webhook dedicato. Una volta attivo il monitoraggio, le ripetizioni dello screening continuano a generare i consueti eventi `status.updated` e `data.updated` descritti in [Monitoraggio AML continuo](https://docs.didit.me/it/core-technology/aml-screening/continuous-monitoring-aml-screening.md).## PermessiQualsiasi chiave API attiva dell'applicazione può chiamare questo endpoint. Le chiavi API di Didit sono **limitate all'applicazione, non al ruolo**: i [ruoli e i permessi](https://docs.didit.me/it/console/roles-permissions.md) della Console determinano cosa una *persona* può fare nella Console e non vengono valutati per il traffico della Management API.## Correlati- [Recupera job di monitoraggio AML](https://docs.didit.me/it/management-api/aml-monitoring/get-job.md)
- [Attiva o disattiva il monitoraggio AML per gli utenti](https://docs.didit.me/it/management-api/aml-monitoring/toggle-users.md)
- [Monitoraggio AML continuo](https://docs.didit.me/it/core-technology/aml-screening/continuous-monitoring-aml-screening.md)
- [Screening AML aziendale](https://docs.didit.me/it/business-verification/aml.md)
- [Elenca aziende](https://docs.didit.me/it/management-api/businesses/list.md)


## OpenAPI

````yaml it/openapi-25.json POST /v3/businesses/aml-monitoring/
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/aml-monitoring/:
    post:
      tags:
        - AML Ongoing Monitoring
      summary: Abilita o disabilita il monitoraggio AML continuo per le aziende
      description: >-
        Attiva o disattiva il monitoraggio AML continuo per le aziende
        selezionate, con la stessa semantica della Business Console. Viene
        mantenuto esattamente uno Screening AML monitorato per azienda, quindi
        un profilo che ha completato la verifica più volte viene monitorato e
        fatturato una sola volta; la disattivazione disabilita il monitoraggio
        in tutti gli screening del profilo. Le aziende senza alcuno Screening
        AML vengono prima sottoposte a screening (fatturato come normale
        Screening AML) se dispongono della ragione sociale o del nome
        visualizzato necessario; altrimenti vengono riportate come
        `skipped_no_identity_data`.


        Imposta `estimate_only: true` per visualizzare in anteprima conteggi e
        costi senza scrivere nulla. Le selezioni di 20 profili o meno vengono
        elaborate inline e restituiscono `200` con il job completato; le
        selezioni più ampie restituiscono `202` e vengono eseguite in
        background: esegui il polling di [Get AML monitoring
        job](#get-/v3/aml-monitoring/jobs/-job_id-/) con il `job_id` restituito.
        L'attivazione viene rifiutata con `403` quando il saldo
        dell'organizzazione non copre la stima. Gli identificatori che non
        corrispondono a nessun elemento vengono elencati in `unmatched` e non
        fanno mai fallire la richiesta: una selezione che non corrisponde a
        nulla si completa come un job vuoto (`total` 0), la stessa convenzione
        degli endpoint di eliminazione in batch.
      operationId: toggle_businesses_aml_monitoring
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - is_enabled
              description: >-
                Seleziona le aziende con `vendor_data_list`,
                `didit_internal_id_list` o entrambi (i due elenchi vengono
                combinati con OR). Al massimo 1000 identificatori per richiesta
                considerando entrambi gli elenchi.
              properties:
                is_enabled:
                  type: boolean
                  description: true per abilitare il monitoraggio, false per disabilitarlo.
                estimate_only:
                  type: boolean
                  default: false
                  description: >-
                    Se true, restituisce la stima dei costi e non esegue
                    scritture: nessuno screening, nessuna fatturazione, nessun
                    job.
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    I tuoi identificatori delle aziende da attivare/disattivare,
                    confrontati esattamente come inviati.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: >-
                    ID interni Didit delle aziende da attivare o disattivare: il
                    `didit_internal_id` restituito dagli endpoint di creazione,
                    recupero ed elenco.
            examples:
              Estimate first:
                summary: Visualizza l'anteprima del costo senza scrivere
                value:
                  is_enabled: true
                  estimate_only: true
                  vendor_data_list:
                    - company-123
                    - company-456
              Enable:
                summary: Abilita il monitoraggio per due aziende
                value:
                  is_enabled: true
                  vendor_data_list:
                    - company-123
                    - company-456
              Disable:
                summary: Disabilita il monitoraggio tramite ID interno di Didit
                value:
                  is_enabled: false
                  didit_internal_id_list:
                    - 3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11
      responses:
        '200':
          description: >-
            La stima (quando `estimate_only` è true) o il processo completato
            per una selezione elaborata in linea.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringToggleResult'
        '202':
          description: >-
            Le selezioni più ampie vengono eseguite in background. Esegui il
            polling dell'endpoint del job con `job_id`; `results` si popola man
            mano che i profili vengono elaborati.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringJob'
        '400':
          description: >-
            Errore di validazione: `is_enabled` mancante, nessun selettore o più
            di 1000 identificatori complessivamente nelle due liste.
        '401':
          description: Chiave API mancante o non valida.
        '403':
          description: >-
            Saldo insufficiente per abilitare il monitoraggio per questa
            selezione. La risposta include il campo `estimate` per consentirti
            di ricaricare l'importo corretto.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  estimate:
                    type: object
                    description: >-
                      Anteprima dei costi. Restituita direttamente quando
                      estimate_only è true (non viene scritto nulla).
                    properties:
                      users_total:
                        type: integer
                        description: Profili corrispondenti alla selezione.
                      already_enabled:
                        type: integer
                        description: >-
                          Profili già monitorati (nessuna operazione da eseguire
                          durante l'abilitazione; sono quelli che vengono
                          disattivati quando si disabilita il monitoraggio).
                      with_existing_aml:
                        type: integer
                        description: >-
                          Profili il cui Screening AML esistente verrà impostato
                          come monitorato (nessun nuovo screening).
                      needing_screening:
                        type: integer
                        description: >-
                          Profili senza alcuno Screening AML che verranno prima
                          sottoposti a screening (fatturati come normale
                          Screening AML).
                      skipped_no_identity_data:
                        type: integer
                        description: >-
                          Profili di cui non è possibile effettuare lo screening
                          a causa della mancanza dei dati di identità.
                      skipped_blocked:
                        type: integer
                        description: >-
                          Utenti bloccati che verranno saltati (sempre 0 per le
                          aziende).
                      estimated_screening_cost_usd:
                        type: number
                        example: 0.2
                        description: Costo una tantum dei nuovi screening.
                      estimated_annual_monitoring_cost_usd:
                        type: number
                        example: 0.07
                        description: >-
                          Costo annuale di monitoraggio dei profili che
                          passeranno a essere monitorati.
                      balance_sufficient:
                        type: boolean
                        description: >-
                          Indica se il saldo dell'organizzazione copre lo
                          screening e il primo anno di monitoraggio.
      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: >-
            Anteprima dei costi. Restituita direttamente quando estimate_only è
            true (non viene scritto nulla).
          properties:
            users_total:
              type: integer
              description: Profili corrispondenti alla selezione.
            already_enabled:
              type: integer
              description: >-
                Profili già monitorati (nessuna operazione da eseguire durante
                l'abilitazione; sono quelli che vengono disattivati quando si
                disabilita il monitoraggio).
            with_existing_aml:
              type: integer
              description: >-
                Profili il cui Screening AML esistente verrà impostato come
                monitorato (nessun nuovo screening).
            needing_screening:
              type: integer
              description: >-
                Profili senza alcuno Screening AML che verranno prima sottoposti
                a screening (fatturati come normale Screening AML).
            skipped_no_identity_data:
              type: integer
              description: >-
                Profili di cui non è possibile effettuare lo screening a causa
                della mancanza dei dati di identità.
            skipped_blocked:
              type: integer
              description: Utenti bloccati che verranno saltati (sempre 0 per le aziende).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: Costo una tantum dei nuovi screening.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: >-
                Costo annuale di monitoraggio dei profili che passeranno a
                essere monitorati.
            balance_sufficient:
              type: boolean
              description: >-
                Indica se il saldo dell'organizzazione copre lo screening e il
                primo anno di monitoraggio.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                Identificatori della richiesta che non hanno trovato
                corrispondenza con alcun profilo in questa applicazione,
                esattamente come inviati.
        - 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 quando il job abilita il monitoraggio, false quando lo
                disabilita.
            target_type:
              type: string
              enum:
                - user
                - business
              description: Quale famiglia di profili viene attivata o disattivata dal job.
            total:
              type: integer
              description: Profili elaborati dal job.
            processed:
              type: integer
              description: Profili elaborati finora.
            outcomes:
              type: object
              description: >-
                Contatori di esito per singolo record. Ogni profilo selezionato
                corrisponde esattamente a un contatore; nulla viene ignorato
                silenziosamente.
              properties:
                enabled:
                  type: integer
                  description: Monitoraggio abilitato su uno screening AML esistente.
                screened_and_enabled:
                  type: integer
                  description: >-
                    È stato creato un nuovo screening AML (fatturato) e il
                    relativo monitoraggio è stato abilitato.
                already_enabled:
                  type: integer
                  description: >-
                    Il monitoraggio era già attivo; non è cambiato nulla e non è
                    stato fatturato nulla.
                disabled:
                  type: integer
                  description: >-
                    Monitoraggio disattivato su tutti gli screening AML del
                    profilo.
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    Saltato: il profilo è privo di nome completo, data di
                    nascita e paese (utenti) o di un nome (aziende) necessari
                    per lo screening.
                skipped_blocked:
                  type: integer
                  description: 'Saltato: l''utente è bloccato.'
                skipped_sandbox:
                  type: integer
                  description: >-
                    Saltato: applicazione sandbox, non viene creato alcuno
                    screening.
                failed_provider:
                  type: integer
                  description: Impossibile completare lo screening; riprova più tardi.
                failed_insufficient_balance:
                  type: integer
                  description: Il saldo si è esaurito mentre il processo era in esecuzione.
            results:
              type: array
              description: >-
                Una voce per ogni profilo elaborato, nell'ordine di
                elaborazione. Aumenta durante l'esecuzione del job; completa una
                volta che lo stato è COMPLETED. Registrata per i job avviati
                tramite API.
              items:
                type: object
                properties:
                  didit_internal_id:
                    type: string
                    format: uuid
                    description: ID interno Didit del profilo.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Il tuo identificatore per il profilo.
                  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: >-
                Messaggio di errore generico quando lo stato è FAILED; la causa
                dettagliata viene conservata lato piattaforma.
            created_at:
              type: string
              format: date-time
            completed_at:
              type: string
              format: date-time
              nullable: true
            estimate:
              type: object
              description: >-
                Anteprima dei costi. Restituita direttamente quando
                estimate_only è true (non viene scritto nulla).
              properties:
                users_total:
                  type: integer
                  description: Profili corrispondenti alla selezione.
                already_enabled:
                  type: integer
                  description: >-
                    Profili già monitorati (nessuna operazione da eseguire
                    durante l'abilitazione; sono quelli che vengono disattivati
                    quando si disabilita il monitoraggio).
                with_existing_aml:
                  type: integer
                  description: >-
                    Profili il cui Screening AML esistente verrà impostato come
                    monitorato (nessun nuovo screening).
                needing_screening:
                  type: integer
                  description: >-
                    Profili senza alcuno Screening AML che verranno prima
                    sottoposti a screening (fatturati come normale Screening
                    AML).
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    Profili di cui non è possibile effettuare lo screening a
                    causa della mancanza dei dati di identità.
                skipped_blocked:
                  type: integer
                  description: >-
                    Utenti bloccati che verranno saltati (sempre 0 per le
                    aziende).
                estimated_screening_cost_usd:
                  type: number
                  example: 0.2
                  description: Costo una tantum dei nuovi screening.
                estimated_annual_monitoring_cost_usd:
                  type: number
                  example: 0.07
                  description: >-
                    Costo annuale di monitoraggio dei profili che passeranno a
                    essere monitorati.
                balance_sufficient:
                  type: boolean
                  description: >-
                    Indica se il saldo dell'organizzazione copre lo screening e
                    il primo anno di monitoraggio.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                Identificatori della richiesta che non hanno trovato
                corrispondenza con alcun profilo in questa applicazione,
                esattamente come inviati. Non fanno parte del processo.
    AMLMonitoringJob:
      type: object
      properties:
        job_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
        is_enabled:
          type: boolean
          description: >-
            true quando il job abilita il monitoraggio, false quando lo
            disabilita.
        target_type:
          type: string
          enum:
            - user
            - business
          description: Quale famiglia di profili viene attivata o disattivata dal job.
        total:
          type: integer
          description: Profili elaborati dal job.
        processed:
          type: integer
          description: Profili elaborati finora.
        outcomes:
          type: object
          description: >-
            Contatori di esito per singolo record. Ogni profilo selezionato
            corrisponde esattamente a un contatore; nulla viene ignorato
            silenziosamente.
          properties:
            enabled:
              type: integer
              description: Monitoraggio abilitato su uno screening AML esistente.
            screened_and_enabled:
              type: integer
              description: >-
                È stato creato un nuovo screening AML (fatturato) e il relativo
                monitoraggio è stato abilitato.
            already_enabled:
              type: integer
              description: >-
                Il monitoraggio era già attivo; non è cambiato nulla e non è
                stato fatturato nulla.
            disabled:
              type: integer
              description: Monitoraggio disattivato su tutti gli screening AML del profilo.
            skipped_no_identity_data:
              type: integer
              description: >-
                Saltato: il profilo è privo di nome completo, data di nascita e
                paese (utenti) o di un nome (aziende) necessari per lo
                screening.
            skipped_blocked:
              type: integer
              description: 'Saltato: l''utente è bloccato.'
            skipped_sandbox:
              type: integer
              description: >-
                Saltato: applicazione sandbox, non viene creato alcuno
                screening.
            failed_provider:
              type: integer
              description: Impossibile completare lo screening; riprova più tardi.
            failed_insufficient_balance:
              type: integer
              description: Il saldo si è esaurito mentre il processo era in esecuzione.
        results:
          type: array
          description: >-
            Una voce per ogni profilo elaborato, nell'ordine di elaborazione.
            Aumenta durante l'esecuzione del job; completa una volta che lo
            stato è COMPLETED. Registrata per i job avviati tramite API.
          items:
            type: object
            properties:
              didit_internal_id:
                type: string
                format: uuid
                description: ID interno Didit del profilo.
              vendor_data:
                type: string
                nullable: true
                description: Il tuo identificatore per il profilo.
              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: >-
            Messaggio di errore generico quando lo stato è FAILED; la causa
            dettagliata viene conservata lato piattaforma.
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
        estimate:
          type: object
          description: >-
            Anteprima dei costi. Restituita direttamente quando estimate_only è
            true (non viene scritto nulla).
          properties:
            users_total:
              type: integer
              description: Profili corrispondenti alla selezione.
            already_enabled:
              type: integer
              description: >-
                Profili già monitorati (nessuna operazione da eseguire durante
                l'abilitazione; sono quelli che vengono disattivati quando si
                disabilita il monitoraggio).
            with_existing_aml:
              type: integer
              description: >-
                Profili il cui Screening AML esistente verrà impostato come
                monitorato (nessun nuovo screening).
            needing_screening:
              type: integer
              description: >-
                Profili senza alcuno Screening AML che verranno prima sottoposti
                a screening (fatturati come normale Screening AML).
            skipped_no_identity_data:
              type: integer
              description: >-
                Profili di cui non è possibile effettuare lo screening a causa
                della mancanza dei dati di identità.
            skipped_blocked:
              type: integer
              description: Utenti bloccati che verranno saltati (sempre 0 per le aziende).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: Costo una tantum dei nuovi screening.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: >-
                Costo annuale di monitoraggio dei profili che passeranno a
                essere monitorati.
            balance_sufficient:
              type: boolean
              description: >-
                Indica se il saldo dell'organizzazione copre lo screening e il
                primo anno di monitoraggio.
        unmatched:
          type: array
          items:
            type: string
          description: >-
            Identificatori della richiesta che non hanno trovato corrispondenza
            con alcun profilo in questa applicazione, esattamente come inviati.
            Non fanno parte del processo.
  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.