> ## 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 actualizar estado de coincidencias AML

> Con la API de Didit, marca coincidencias AML como coincidencia confirmada, falso positivo o no concluyente, de forma individual o masiva.



Prompt para actualizar el estado de una coincidencia AML
        Copiar el prompt al portapapeles



      
      

\<pre>

\`Set the review status (disposition) of AML screening hits on a Didit session — one hit, or many at once.

AML screening returns a list of HITS (potential sanction / PEP / watchlist / adverse-media matches). Each hit carries a review_status you can change to record your compliance decision. This does NOT change the overall session decision.

Two endpoints:

1\) Single hit
PATCH https://verification.didit.me/v3/session/{session_id}/update-aml-hit-status/
Body:
\- hit_id (string, required) — the "id" of the hit in the AML check's "hits" array (see GET /v3/session/{id}/decision/), for example "hit_7c1e9a40b2d35f86e0a4c912". A hit id returned in the earlier format is still accepted; the response always returns the current "id".
\- review_status (string, required) — one of "Unreviewed", "Confirmed Match", "False Positive", "Inconclusive".
\- node_id (string, optional) — graph node ID, only if the session has multiple AML checks.

2\) Bulk
PATCH https://verification.didit.me/v3/session/{session_id}/bulk-update-aml-hit-status/
Body:
\- hit_updates (array, required) — list of { "hit_id": "...", "review_status": "..." }.
\- node_id (string, optional).
All-or-nothing: if any hit_id is missing, returns 404 and nothing changes.

Authentication:
x-api-key (client API key) or a user-auth token. Privilege: write:sessions.

Status values:
\- Unreviewed — default for hits at/above the match threshold; still needs review.
\- Confirmed Match — a true match.
\- False Positive — not the same entity; default for hits below the match threshold.
\- Inconclusive — could not determine.

Reviewer decisions are PRESERVED across ongoing-monitoring re-screens.

curl — clear one hit as a false positive:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/update-aml-hit-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "hit_id": "hit_7c1e9a40b2d35f86e0a4c912", "review_status": "False Positive" }'

curl — bulk:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/bulk-update-aml-hit-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "hit_updates": [ { "hit_id": "hit_7c1e9a40b2d35f86e0a4c912", "review_status": "Confirmed Match" }, { "hit_id": "hit_3b8f20d6a91c4e75f0b2d6a8", "review_status": "False Positive" } ] }'

Side effects:
\- Fires a data.updated webhook.
\- Appends an activity entry (with actor attribution) to the session review trail.

Failure modes:
\- 400 — review_status not a valid value, hit_id empty, or hit_updates empty.
\- 403 — missing credentials (a wrong, revoked or expired key gets 401), or the caller lacks write:sessions.
\- 404 — session not found, no AML check, or a hit_id was not found.

Related: to change the overall AML step status (Approved/Declined/In Review) use PATCH /v3/session/{id}/features/{node_id}/update-status/ (see /sessions-api/update-feature-status).

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

\</pre>



      
      

Pegar en

## Qué haceEl análisis AML devuelve una lista de **coincidencias** (hits): posibles coincidencias con listas de sanciones, bases de datos de PEP, listas de vigilancia y medios adversos. Cada coincidencia tiene un `review_status` (su disposición), que empieza como `Unreviewed` o `False Positive` según la puntuación de coincidencia. Este endpoint permite a tu equipo (o a tu automatización) registrar una decisión sobre cada coincidencia sin cambiar la decisión global de la sesión.Encontrarás las coincidencias y sus ID en la [decisión de la sesión](https://docs.didit.me/es/sessions-api/retrieve-session.md): en el array `hits` de la comprobación AML, donde el `id` de cada coincidencia es el `hit_id` que pasas aquí.El `id` de una coincidencia es `hit_` seguido de 24 caracteres hexadecimales, y no cambia cuando se vuelve a analizar al mismo sujeto. Un ID de coincidencia devuelto en el formato anterior se sigue aceptando; la respuesta siempre identifica la coincidencia por su `id` actual.## Estados de revisión| `review_status` | Significado |
| - | - |
| `Unreviewed` | Valor predeterminado para las coincidencias que alcanzan o superan el umbral de coincidencia: aún necesita una decisión. |
| `Confirmed Match` | Una coincidencia real con la persona o entidad analizada. |
| `False Positive` | No es la misma entidad. Valor predeterminado para las coincidencias por debajo del umbral de coincidencia. |
| `Inconclusive` | No se pudo determinar. |> [!NOTE]
>
> Las decisiones de los revisores se **conservan entre las reevaluaciones de la monitorización continua**: una coincidencia que marques como `False Positive` mantiene ese estado cuando el proveedor vuelve a analizar la entidad.## Actualizar una sola coincidencia**`PATCH /v3/session/{sessionId}/update-aml-hit-status/`**```bash theme={null}
curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../update-aml-hit-status/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hit_id": "hit_7c1e9a40b2d35f86e0a4c912",
    "review_status": "False Positive"
  }'
```En una sesión con varias comprobaciones AML (flujos de trabajo de grafo), añade `?node_id=feature_aml_1` a la URL o incluye `"node_id"` en el cuerpo para seleccionar una comprobación concreta.## Actualizar varias coincidencias a la vez**`PATCH /v3/session/{sessionId}/bulk-update-aml-hit-status/`**Pasa `hit_updates`, una lista de pares `{ hit_id, review_status }`. La operación es **de todo o nada**: si no se encuentra algún `hit_id`, la solicitud devuelve `404` y no se modifica ninguna coincidencia.```bash theme={null}
curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../bulk-update-aml-hit-status/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hit_updates": [
      { "hit_id": "hit_7c1e9a40b2d35f86e0a4c912", "review_status": "Confirmed Match" },
      { "hit_id": "hit_3b8f20d6a91c4e75f0b2d6a8", "review_status": "False Positive" }
    ]
  }'
```Una llamada masiva exitosa dispara un único webhook `data.updated` y registra una sola entrada de actividad que abarca todos los cambios.## Qué ocurre después de una actualización- **Webhook**: se dispara un evento `data.updated` en la sesión.
- **Registro de auditoría**: el cambio queda registrado en el historial de revisión de la sesión junto con quién lo hizo (clave de API o usuario), y es visible en la cronología de actividad de la consola.
- **El estado global del paso AML no cambia**: cambiar la disposición de una coincidencia no modifica por sí solo el estado del paso AML ni la decisión de la sesión. Para cambiar el estado del **paso** AML (`Approved` / `Declined` / `In Review`), usa [update-feature-status](https://docs.didit.me/es/sessions-api/update-feature-status.md). Para cambiar la decisión de la **sesión**, usa [update-status](https://docs.didit.me/es/sessions-api/update-status.md).## Compatibilidad con KYC y KYBFunciona tanto con sesiones de **Verificación de usuario (KYC)** como de **Verificación de empresas (KYB)**: Didit resuelve el `sessionId` en ambos tipos. En KYB, el análisis AML se ejecuta sobre la empresa y sus personas clave; cada comprobación AML expone sus propias coincidencias.## PermisoRequiere el privilegio `write:sessions`, con una clave de API de cliente (`x-api-key`) o un encabezado de autorización de usuario.## Errores| Estado | Significado |
| - | - |
| `400` | `review_status` no es un valor válido, `hit_id` está vacío o `hit_updates` está vacío. |
| `403` | Faltan credenciales o no son válidas, o quien realiza la solicitud no tiene `write:sessions`. |
| `404` | No se encontró la sesión, la sesión no tiene ninguna comprobación AML o no se encontró un `hit_id` (en la operación masiva no se modifica nada). |## Relacionado- [Actualizar el estado de una función](https://docs.didit.me/es/sessions-api/update-feature-status.md): cambia el estado del **step** AML (o de cualquier otro paso).
- [Actualizar el estado de la sesión](https://docs.didit.me/es/sessions-api/update-status.md): cambia la decisión global de la sesión.
- [Obtener una sesión](https://docs.didit.me/es/sessions-api/retrieve-session.md): consulta los `hits` de AML y sus ID.
- [Análisis AML](https://docs.didit.me/es/standalone-apis/aml-screening.md): cómo funcionan el análisis y la puntuación.


## OpenAPI

````yaml es/openapi-25.json PATCH /v3/session/{sessionId}/update-aml-hit-status/
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/session/{sessionId}/update-aml-hit-status/:
    patch:
      tags:
        - Sessions
      summary: Actualizar el estado de revisión de una coincidencia AML
      description: >-
        Establece el estado de revisión de un **único resultado AML** (una
        posible coincidencia con sanciones, PEP, listas de vigilancia o medios
        adversos) devuelto por el análisis AML, sin cambiar la decisión general
        de la sesión. Identifica el resultado por su `hit_id` (el `id` de una
        entrada del array `hits` de la comprobación AML; consulta la decisión de
        la sesión). Se sigue aceptando un id de resultado devuelto en el formato
        anterior; la respuesta siempre nombra el resultado por su `id` actual.


        `review_status` es uno de `Unreviewed`, `Confirmed Match`, `False
        Positive` o `Inconclusive`. Las decisiones del revisor se conservan en
        las actualizaciones de la monitorización continua, de modo que un
        resultado que marques como `False Positive` se mantiene así cuando el
        proveedor vuelve a analizarlo.


        Una llamada exitosa dispara un webhook `data.updated` y añade una
        entrada de actividad (con atribución del autor) al historial de revisión
        de la sesión. En los flujos basados en grafos con varias comprobaciones
        AML, pasa `node_id` para apuntar a una comprobación concreta.


        Autentícate con tu clave de API (`x-api-key`) o con un encabezado de
        autorización de usuario; cualquiera de los dos debe tener el privilegio
        `write:sessions`.
      operationId: patch_v3_session_update_aml_hit_status
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            UUID de la sesión de verificación. Acepta ID de sesión tanto de
            usuario (KYC) como de empresa (KYB): el servicio resuelve el ID en
            ambos tipos de sesión.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - in: query
          name: node_id
          required: false
          description: >-
            ID del nodo del grafo del flujo. Solo es obligatorio cuando la
            sesión tiene varios análisis AML (uno por nodo); omítelo en sesiones
            con un único análisis AML.
          schema:
            type: string
            example: feature_aml_1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - hit_id
                - review_status
              properties:
                hit_id:
                  type: string
                  description: >-
                    El `id` de la coincidencia en el array `hits` de la
                    comprobación AML (`hit_...`). Se sigue aceptando un id de
                    coincidencia devuelto en el formato anterior.
                  example: hit_7c1e9a40b2d35f86e0a4c912
                review_status:
                  type: string
                  description: El nuevo estado de revisión de la coincidencia.
                  enum:
                    - Unreviewed
                    - Confirmed Match
                    - False Positive
                    - Inconclusive
                  example: False Positive
                node_id:
                  type: string
                  description: >-
                    ID de nodo del grafo opcional. Úsalo (aquí o como parámetro
                    de consulta) cuando la sesión tenga varias comprobaciones
                    AML.
                  example: feature_aml_1
            example:
              hit_id: hit_7c1e9a40b2d35f86e0a4c912
              review_status: False Positive
      responses:
        '200':
          description: Se actualizó el estado de revisión de la coincidencia.
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                  - hit_id
                  - review_status
                properties:
                  message:
                    type: string
                    description: Siempre `Hit status updated successfully`.
                  hit_id:
                    type: string
                    description: >-
                      El `id` de la coincidencia actualizada, tal como lo
                      devuelve la decisión de la sesión, también cuando la
                      solicitud identificó la coincidencia con un id en el
                      formato anterior.
                  review_status:
                    type: string
                    enum:
                      - Unreviewed
                      - Confirmed Match
                      - False Positive
                      - Inconclusive
                    description: >-
                      El estado de revisión que ahora tiene guardado la
                      coincidencia.
              example:
                message: Hit status updated successfully
                hit_id: hit_7c1e9a40b2d35f86e0a4c912
                review_status: False Positive
        '400':
          description: >-
            Error de validación: `hit_id` está vacío o `review_status` no es uno
            de los valores permitidos.
          content:
            application/json:
              example:
                review_status:
                  - '"Maybe" is not a valid choice.'
        '403':
          description: >-
            Faltan las credenciales o los permisos son insuficientes. Si falta
            la clave, se devuelve `403`; si la clave es incorrecta, está
            revocada o ha expirado, se devuelve `401`.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: x-api-key ausente o no válido
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: La clave de API no tiene el permiso write:sessions
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            No se encontró la sesión, la sesión no tiene ninguna comprobación
            AML (opcionalmente para el `node_id` indicado) o ninguna
            coincidencia corresponde a `hit_id`.
          content:
            application/json:
              examples:
                No AML Check:
                  summary: La sesión no tiene ninguna comprobación AML
                  value:
                    detail: The session does not have an AML check.
                Hit Not Found:
                  summary: hit_id desconocido
                  value:
                    detail: >-
                      Hit with ID 'hit_9d2e7f41c0a8b3e65d1f0c47' not found in
                      the AML check.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X PATCH \
              https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-aml-hit-status/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "hit_id": "abc123",
                "review_status": "False Positive"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.update_aml_hit_status(
                "11111111-2222-3333-4444-555555555555",
                hit_id="hit_7c1e9a40b2d35f86e0a4c912",
                review_status="False Positive",
            )
            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.sessions.updateAmlHitStatus("11111111-2222-3333-4444-555555555555",
            {
              hit_id: "hit_7c1e9a40b2d35f86e0a4c912",
              review_status: "False Positive",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateAMLHitStatus(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdateAMLHitStatusParams{\n\tHitID:        \"hit_7c1e9a40b2d35f86e0a4c912\",\n\tReviewStatus: \"False Positive\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.SessionsUpdateAmlHitStatusParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().updateAmlHitStatus("11111111-2222-3333-4444-555555555555",
            SessionsUpdateAmlHitStatusParams.builder()
                    .hitId("hit_7c1e9a40b2d35f86e0a4c912")
                    .reviewStatus(SessionsUpdateAmlHitStatusParams.ReviewStatus.of("False Positive"))
                    .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->sessions->updateAmlHitStatus('11111111-2222-3333-4444-555555555555',
            [
                'hit_id' => 'hit_7c1e9a40b2d35f86e0a4c912',
                'review_status' => 'False Positive',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.sessions.update_aml_hit_status(
              "11111111-2222-3333-4444-555555555555",
              hit_id: "hit_7c1e9a40b2d35f86e0a4c912",
              review_status: "False Positive"
            )
            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.Sessions.UpdateAmlHitStatusAsync("11111111-2222-3333-4444-555555555555",
            new SessionsUpdateAmlHitStatusParams

            {
                HitId = "hit_7c1e9a40b2d35f86e0a4c912",
                ReviewStatus = "False Positive",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  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.