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

# Obtener evento de monitorización con la API de Didit

> Didit obtiene un evento de monitorización con su payload, contexto del dispositivo, datos de IP, señales del sujeto, etiquetas y evidencia de reglas.

Prompt de la API para obtener un evento de monitorización
Copiar el prompt al portapapeles

<pre>
  \`Retrieve one monitoring event from Didit with its full envelope, enrichment and rule evidence.

  Endpoint:
  GET [https://verification.didit.me/v3/events/\{event\_uuid}/](https://verification.didit.me/v3/events/\{event_uuid}/)

  Authentication:
  Use the x-api-key header with my Didit API key. A scoped key needs transactions: read.

  Goal:

  * Show the event detail in my back office or an investigation tool: what was sent, what Didit derived, and why a rule matched.

  Behavior:

  * event\_uuid is the Didit id returned by the create, batch, list and timeline calls (not my own event\_id).
  * Returns every summary field of the list call plus payload, custom\_values, device\_context, field\_sources, the promoted domain fields (hand\_id, dispute\_id, chargeback\_id, withdrawal\_address\_hash, changed\_field, ...), expires\_at, rules\_evaluated\_count, rule\_runs, ip\_enrichment, subject\_profile and tags.
  * field\_sources maps each field path to customer (sent by my backend), sdk (sent by the device lane) or server (derived by Didit, such as received\_at and IP enrichment).
  * While correlation\_pending is true an asynchronous rule still has to run; read the event again later for the final status, score and rule\_runs.
  * ip\_enrichment and subject\_profile are null when nothing is known.

  Example call:
  curl -X GET "[https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/](https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/)" \
  -H "x-api-key: YOUR\_API\_KEY"

  What to read from the response:

  * status, score, rules\_matched\_count.
  * rule\_runs\[] - one per matching rule: rule\_uuid, rule\_title, library\_key, mode (ACTIVE or TEST), severity, matched (always true), score\_delta, action\_summary, is\_async, matched\_payload (the conditions and aggregations that matched, with expected and observed values) and created\_at.
  * ip\_enrichment - ip\_country\_code, ip\_city, asn\_number, asn\_organization, is\_vpn\_or\_tor, is\_data\_center, proxy\_type, last\_enriched\_at.
  * field\_sources - trust signal for each value before acting on a match.
  * tags - names of the tags rules attached.

  Failure modes:

  * 401 - the API key has expired.
  * 403 - missing API key (a wrong, revoked or expired key gets 401), or a scoped key without transactions: read.
  * 404 - no event with this event\_uuid in the application (never stored, deleted, or another application's).

  Side effects: none. This is a pure read.

  For the full integration shape, see /integration/integration-prompt.\`
</pre>

Pegar en

Consulta [Evidencias](https://docs.didit.me/es/transaction-monitoring/event-rules.md#evidencia) para ver cómo las ejecuciones de reglas registran cada valor coincidente y su origen, y [Enriquecimiento de IP](https://docs.didit.me/es/transaction-monitoring/ip-enrichment.md) para los campos enriquecidos de la dirección IP.


## OpenAPI

````yaml es/openapi-25.json GET /v3/events/{event_uuid}/
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/events/{event_uuid}/:
    get:
      tags:
        - Monitoring Events
      summary: Obtener un evento de monitorización
      description: >-
        Obtén un evento de monitorización con todo lo que devuelve la lista,
        además del payload, los valores personalizados, el contexto del
        dispositivo, la procedencia de los campos (`field_sources`), los campos
        de dominio promovidos, `expires_at`, cada ejecución de regla coincidente
        con su evidencia, el enriquecimiento de IP y las etiquetas que añadieron
        las reglas. Mientras `correlation_pending` sea `true`, todavía queda por
        ejecutarse una regla asíncrona; vuelve a leer el evento unos minutos
        después para obtener los valores finales de `status`, `score` y
        `rule_runs`. Las lecturas funcionan tanto si la ingesta de eventos está
        activada como si no. Una clave de API con alcance limitado necesita
        `transactions: read`. Consulta
        [Evidencia](https://docs.didit.me/es/transaction-monitoring/event-rules#evidencia)
        y [Enriquecimiento de
        IP](https://docs.didit.me/es/transaction-monitoring/ip-enrichment).
      operationId: get_monitoring_event
      parameters:
        - name: event_uuid
          in: path
          required: true
          description: >-
            Identificador de Didit del evento (`event_uuid` de la respuesta de
            creación, lote, listado o cronología), no tu propio `event_id`.
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
      responses:
        '200':
          description: El evento con su evidencia.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitoringEventDetail'
              examples:
                Login from a VPN, in review:
                  value:
                    event_uuid: 33333333-4444-5555-6666-777777777777
                    event_id: login-2026-10-17-000001
                    event_category: auth
                    action_type: login
                    occurred_at: '2026-10-17T09:15:02.481000Z'
                    received_at: '2026-10-17T09:15:02.903114Z'
                    status: IN_REVIEW
                    score: 40
                    subject_vendor_data: user-42
                    subject_entity_type: individual
                    subject_uuid: 66666666-7777-8888-9999-000000000000
                    counterparty_vendor_data: null
                    session_id: web-session-abc
                    device_fingerprint: fp-a8c1
                    ip_address: 203.0.113.42
                    ip_country: ES
                    amount: null
                    currency: null
                    game_id: null
                    round_id: null
                    bonus_id: null
                    affiliate_code: null
                    payment_reference_id: null
                    retention_class: risk_relevant
                    rules_matched_count: 1
                    correlation_pending: false
                    is_droppable: true
                    payload:
                      method: password
                    custom_values:
                      vip_tier: gold
                      vpn_or_proxy_detected: true
                    device_context:
                      fingerprint: fp-a8c1
                      network_context:
                        ip_address: 203.0.113.42
                        ip_country: Spain
                        ip_country_code: ES
                        ip_city: Madrid
                        asn_number: 64500
                        asn_organization: Example Networks
                        is_vpn_or_tor: true
                        is_data_center: false
                    field_sources:
                      subject.vendor_data: customer
                      event_category: customer
                      action_type: customer
                      occurred_at: customer
                      received_at: server
                      payload.method: customer
                      session.session_id: customer
                      session.sequence: customer
                      device_context.fingerprint: customer
                      device_context.network_context.ip_address: customer
                      device_context.network_context.ip_country: server
                      device_context.network_context.ip_country_code: server
                      device_context.network_context.ip_city: server
                      device_context.network_context.asn_number: server
                      device_context.network_context.asn_organization: server
                      device_context.network_context.is_vpn_or_tor: server
                      device_context.network_context.is_data_center: server
                    session_sequence: 142
                    table_id: null
                    hand_id: null
                    match_id: null
                    market_id: null
                    side: null
                    role: null
                    net_result_amount: null
                    payment_fingerprint: null
                    instrument_reference_hash: null
                    withdrawal_address_hash: null
                    dispute_id: null
                    chargeback_id: null
                    changed_field: null
                    identity_match_ref: null
                    schema_version: 1
                    expires_at: '2027-01-15T09:15:02.481000Z'
                    rules_evaluated_count: 6
                    rule_runs:
                      - rule_uuid: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                        rule_title: Login from VPN or Tor
                        library_key: null
                        matched: true
                        mode: ACTIVE
                        is_async: false
                        severity: MEDIUM
                        score_delta: 40
                        action_summary: score +40; add_tag:VPN_LOGIN
                        matched_payload:
                          - field: event.ip.is_vpn_or_tor
                            operator: eq
                            expected_value: true
                            current_value: true
                            matched: true
                            group_index: null
                            group_logic: AND
                            field_source: server
                        created_at: '2026-10-17T09:15:02.951207Z'
                    ip_enrichment:
                      ip_country_code: ES
                      ip_city: Madrid
                      asn_number: 64500
                      asn_organization: Example Networks
                      is_vpn_or_tor: true
                      is_data_center: false
                      proxy_type: null
                      last_enriched_at: '2026-10-17T09:15:02.910442Z'
                    subject_profile: null
                    tags:
                      - VPN_LOGIN
        '401':
          description: >-
            La clave de API con alcance limitado ha expirado. Solo una clave
            expirada recibe `401`; una clave ausente o no válida recibe `403`.
          content:
            application/json:
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Falta `x-api-key` (una clave incorrecta, revocada o expirada recibe
            `401`), una clave con permisos limitados sin `transactions: read`,
            una clave limitada a algunos flujos o a sesiones aprobadas (una
            clave así nunca accede a los datos de monitorización de
            transacciones), o una solicitud desde fuera de la lista de IP
            permitidas de la clave.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without access:
                  value:
                    detail: This API key has no read access to transactions.
                Key limited to workflows or approved sessions:
                  value:
                    detail: >-
                      This API key only reaches sessions inside its workflow or
                      status limits, so it can't use this endpoint.
                IP not allowed:
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            No existe ningún evento con este `event_uuid` en la aplicación:
            nunca se almacenó, se eliminó o pertenece a otra aplicación. Un
            segmento de ruta que no es un UUID no coincide con la ruta y también
            devuelve `404`.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: No MonitoringEvent matches the given query.
        '429':
          description: >-
            Límite de solicitudes superado: las solicitudes `GET` comparten un
            cupo de 600 solicitudes por minuto por clave de API. Espera
            `Retry-After` segundos y vuelve a intentarlo.
          headers:
            Retry-After:
              description: Segundos que hay que esperar antes de reintentar.
              schema:
                type: integer
                minimum: 1
                example: 30
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.monitoring_events.retrieve(
                "11111111-2222-3333-4444-555555555555",
            )
            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.monitoringEvents.retrieve("11111111-2222-3333-4444-555555555555");

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


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.monitoringEvents().retrieve("11111111-2222-3333-4444-555555555555");

            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->monitoringEvents->retrieve('11111111-2222-3333-4444-555555555555');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.monitoring_events.retrieve("11111111-2222-3333-4444-555555555555")

            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.MonitoringEvents.RetrieveAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    MonitoringEventDetail:
      description: >-
        Un evento de monitorización con su envoltorio completo, su
        enriquecimiento y la evidencia de las reglas. Todos los campos de
        `MonitoringEvent` más los campos siguientes.
      allOf:
        - $ref: '#/components/schemas/MonitoringEvent'
        - type: object
          required:
            - payload
            - custom_values
            - device_context
            - field_sources
            - session_sequence
            - table_id
            - hand_id
            - match_id
            - market_id
            - side
            - role
            - net_result_amount
            - payment_fingerprint
            - instrument_reference_hash
            - withdrawal_address_hash
            - dispute_id
            - chargeback_id
            - changed_field
            - identity_match_ref
            - schema_version
            - expires_at
            - rules_evaluated_count
            - rule_runs
            - ip_enrichment
            - subject_profile
            - tags
          properties:
            payload:
              type: object
              additionalProperties: true
              description: Los campos de la categoría que enviaste en `payload`.
            custom_values:
              type: object
              additionalProperties: true
              description: >-
                Los `custom_values` escalares que enviaste. Didit añade
                `vpn_or_proxy_detected: true` o `is_data_center: true` cuando el
                enriquecimiento de IP marca la dirección y tú no los
                estableciste.
            device_context:
              type: object
              additionalProperties: true
              description: >-
                El contexto de dispositivo tal como se almacena: tu
                `device_context` (incluidos `fingerprint`,
                `persistent_device_id` y `bot_score` cuando se envían) con
                `network_context` completado mediante el enriquecimiento de IP
                (`ip_country`, `ip_country_code`, `ip_city`, `asn_number`,
                `asn_organization`, `is_vpn_or_tor`, `is_data_center`,
                `proxy_type`, `connection_type`) para las claves que dejaste
                vacías.
            field_sources:
              type: object
              additionalProperties:
                type: string
                enum:
                  - customer
                  - sdk
                  - server
              description: >-
                Mapa de ruta de campo a procedencia: `customer` (enviado por tu
                backend), `sdk` (enviado a través del canal del dispositivo) o
                `server` (derivado por Didit, como `received_at` y los campos de
                red enriquecidos). Compruébalo antes de actuar ante una
                coincidencia.
            session_sequence:
              type: integer
              format: int64
              nullable: true
              description: '`session.sequence` enviado con el evento.'
            table_id:
              type: string
              nullable: true
              description: Tomado de `payload.table_id`.
              maxLength: 128
            hand_id:
              type: string
              nullable: true
              description: Se promueve desde `payload.hand_id`.
              maxLength: 128
            match_id:
              type: string
              nullable: true
              description: Tomado de `payload.match_id`.
              maxLength: 128
            market_id:
              type: string
              nullable: true
              description: Tomado de `payload.market_id`.
              maxLength: 128
            side:
              type: string
              nullable: true
              description: Tomado de `payload.side`.
              maxLength: 64
            role:
              type: string
              nullable: true
              description: Tomado de `payload.role`.
              maxLength: 64
            net_result_amount:
              type: string
              nullable: true
              description: >-
                Tomado de `payload.net_result_amount`, como cadena decimal con
                18 decimales.
              example: '-120.000000000000000000'
            payment_fingerprint:
              type: string
              nullable: true
              description: Tomado de `payload.payment_fingerprint`.
              maxLength: 255
            instrument_reference_hash:
              type: string
              nullable: true
              description: Tomado de `payload.instrument_reference_hash`.
              maxLength: 255
            withdrawal_address_hash:
              type: string
              nullable: true
              description: >-
                Tomado de `payload.withdrawal_address_hash` (o de
                `payload.destination_reference_hash`).
              maxLength: 255
            dispute_id:
              type: string
              nullable: true
              description: Se promueve desde `payload.dispute_id`.
              maxLength: 255
            chargeback_id:
              type: string
              nullable: true
              description: Se promueve desde `payload.chargeback_id`.
              maxLength: 255
            changed_field:
              type: string
              nullable: true
              description: >-
                Se promueve desde `payload.changed_field` (eventos de cambios de
                seguridad).
              maxLength: 128
            identity_match_ref:
              type: string
              nullable: true
              description: >-
                Se promueve desde `payload.identity_match_ref` (coincidencias en
                registros de juego responsable).
              maxLength: 255
            schema_version:
              type: integer
              description: Versión del esquema del sobre del evento. Actualmente, `1`.
              example: 1
            expires_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Cuándo expira el evento según su clase de retención y se
                elimina: `occurred_at` más el periodo de la clase (14, 30 o 90
                días por defecto, ajustable por aplicación). Nulo para los
                eventos `monetary_or_compliance`, que siguen la retención de
                transacciones.
            rules_evaluated_count:
              type: integer
              minimum: 0
              description: Número de reglas de eventos evaluadas para este evento.
            rule_runs:
              type: array
              description: >-
                Todas las reglas que coincidieron con el evento, de la más
                reciente a la más antigua.
              items:
                $ref: '#/components/schemas/MonitoringEventRuleRun'
            ip_enrichment:
              type: object
              nullable: true
              description: >-
                Enriquecimiento de la dirección IP del evento, o null si la
                dirección no se enriqueció. Consulta [Enriquecimiento de
                IP](https://docs.didit.me/es/transaction-monitoring/ip-enrichment).
              properties:
                ip_country_code:
                  type: string
                  nullable: true
                  description: Código de país de la dirección.
                ip_city:
                  type: string
                  nullable: true
                  description: Ciudad de la dirección.
                asn_number:
                  type: integer
                  nullable: true
                  description: Número de sistema autónomo.
                asn_organization:
                  type: string
                  nullable: true
                  description: Organización que opera el sistema autónomo.
                is_vpn_or_tor:
                  type: boolean
                  description: Si la dirección es un nodo de salida conocido de VPN o Tor.
                is_data_center:
                  type: boolean
                  description: >-
                    Si la dirección pertenece a una red de hosting o de centro
                    de datos.
                proxy_type:
                  type: string
                  nullable: true
                  description: >-
                    Clasificación de proxy de la dirección como cadena opaca, o
                    null.
                last_enriched_at:
                  type: string
                  format: date-time
                  nullable: true
                  description: Cuándo se enriqueció la dirección por última vez.
              required:
                - ip_country_code
                - ip_city
                - asn_number
                - asn_organization
                - is_vpn_or_tor
                - is_data_center
                - proxy_type
                - last_enriched_at
            subject_profile:
              type: object
              nullable: true
              description: >-
                Señales de riesgo de correo electrónico y teléfono del sujeto
                almacenadas en caché, o null cuando no existe ningún perfil para
                el sujeto.
              properties:
                email_risk_score:
                  type: integer
                  nullable: true
                  description: Puntuación de riesgo del correo electrónico.
                email_deliverability:
                  type: string
                  nullable: true
                  description: Veredicto sobre la entregabilidad del correo electrónico.
                email_is_disposable:
                  type: boolean
                  nullable: true
                  description: Si la dirección de correo electrónico es desechable.
                email_is_breached:
                  type: boolean
                  nullable: true
                  description: >-
                    Si la dirección de correo electrónico aparece en
                    filtraciones de datos conocidas.
                email_social_count:
                  type: integer
                  nullable: true
                  description: >-
                    Número de cuentas en línea vinculadas a la dirección de
                    correo electrónico.
                email_social_providers:
                  type: array
                  items:
                    type: string
                  description: >-
                    Nombres de los servicios en línea en los que se encontró una
                    cuenta vinculada a la dirección de correo electrónico.
                phone_risk_score:
                  type: integer
                  nullable: true
                  description: Puntuación de riesgo del teléfono.
                phone_line_type:
                  type: string
                  nullable: true
                  description: Tipo de línea telefónica.
                phone_carrier:
                  type: string
                  nullable: true
                  description: Nombre del operador telefónico.
                phone_social_count:
                  type: integer
                  nullable: true
                  description: Número de cuentas en línea vinculadas al número de teléfono.
                phone_social_providers:
                  type: array
                  items:
                    type: string
                  description: >-
                    Nombres de los servicios en línea en los que se encontró una
                    cuenta vinculada al número de teléfono.
                source_provider:
                  type: string
                  nullable: true
                  description: Identificador opaco de la fuente del perfil.
                last_enriched_at:
                  type: string
                  format: date-time
                  nullable: true
                  description: Fecha y hora de la última actualización del perfil.
              required:
                - email_risk_score
                - email_deliverability
                - email_is_disposable
                - email_is_breached
                - email_social_count
                - email_social_providers
                - phone_risk_score
                - phone_line_type
                - phone_carrier
                - phone_social_count
                - phone_social_providers
                - source_provider
                - last_enriched_at
            tags:
              type: array
              items:
                type: string
              description: >-
                Nombres de las etiquetas asociadas al evento (acciones
                `add_tags` de las reglas).
    MonitoringEvent:
      type: object
      description: >-
        Un evento de monitorización almacenado tal como lo devuelven los
        endpoints de lista y de cronología del sujeto. La evidencia restringida
        (payload, contexto del dispositivo, evidencia de reglas) solo la
        devuelve `GET /v3/events/{event_uuid}/`.
      required:
        - event_uuid
        - event_id
        - event_category
        - action_type
        - occurred_at
        - received_at
        - status
        - score
        - subject_vendor_data
        - subject_entity_type
        - subject_uuid
        - counterparty_vendor_data
        - session_id
        - device_fingerprint
        - ip_address
        - ip_country
        - amount
        - currency
        - game_id
        - round_id
        - bonus_id
        - affiliate_code
        - payment_reference_id
        - retention_class
        - rules_matched_count
        - correlation_pending
        - is_droppable
      properties:
        event_uuid:
          type: string
          format: uuid
          description: >-
            Identificador de Didit del evento. Úsalo como `{event_uuid}` en las
            llamadas de obtención y eliminación.
        event_id:
          type: string
          maxLength: 128
          description: Tu propio identificador, la clave de idempotencia que enviaste.
        event_category:
          type: string
          enum:
            - auth
            - session
            - gameplay
            - bonus
            - affiliate
            - payment
            - dispute
            - security
            - responsible_gambling
            - custom
          description: Categoría del evento.
        action_type:
          type: string
          maxLength: 128
          description: Qué ocurrió dentro de la categoría, tal como lo enviaste.
        occurred_at:
          type: string
          format: date-time
          description: Cuándo ocurrió el evento en tu lado.
        received_at:
          type: string
          format: date-time
          description: Cuándo aceptó Didit el evento.
        status:
          type: string
          enum:
            - ACCEPTED
            - APPROVED
            - IN_REVIEW
            - DECLINED
          description: >-
            `ACCEPTED`: almacenado, ninguna regla coincidente cambió su estado
            (la respuesta normal para la mayoría de los eventos, y siempre la
            respuesta en una aplicación sandbox, donde no se ejecuta ninguna
            regla). `APPROVED`: una regla coincidió y la puntuación se mantuvo
            por debajo de tu umbral de revisión. `IN_REVIEW`: una regla hizo que
            la puntuación superara el umbral de revisión o fijó el estado.
            `DECLINED`: una regla lo rechazó o la puntuación superó tu umbral de
            rechazo.
        score:
          type: integer
          description: >-
            Puntuación acumulada de las reglas. Empieza en 0; las acciones
            `add_score` de las reglas la modifican (se permiten incrementos
            negativos).
        subject_vendor_data:
          type: string
          maxLength: 255
          description: >-
            `subject.vendor_data` del evento: tu id para el usuario o la
            empresa.
        subject_entity_type:
          type: string
          description: >-
            `individual` o `company`: qué tipo de sujeto nombra
            `subject_vendor_data`.
          example: individual
        subject_uuid:
          type: string
          format: uuid
          nullable: true
          description: >-
            UUID del usuario (persona física) o de la empresa a la que se
            resolvió el evento, o null cuando ese registro ya no existe.
        counterparty_vendor_data:
          type: string
          nullable: true
          description: >-
            El otro jugador de un evento P2P (promovido desde
            `payload.counterparty_vendor_data`).
          maxLength: 255
        session_id:
          type: string
          nullable: true
          description: '`session.session_id` enviado con el evento.'
          maxLength: 255
        device_fingerprint:
          type: string
          nullable: true
          description: '`device_context.fingerprint` enviado con el evento.'
          maxLength: 255
        ip_address:
          type: string
          nullable: true
          description: >-
            Dirección IP del evento. En el canal del servidor es
            `device_context.network_context.ip_address` tal como lo enviaste; en
            el canal del dispositivo es la IP de la solicitud.
          maxLength: 64
        ip_country:
          type: string
          nullable: true
          description: >-
            Código de país de `ip_address` obtenido del enriquecimiento de IP, o
            null cuando la dirección no se enriqueció (ausente, privada o
            telemetría de poco valor cuya dirección no se conocía ya).
          example: ES
        amount:
          type: string
          nullable: true
          description: >-
            Importe como cadena decimal con 18 decimales, tomado de
            `transaction_context.amount`, `payload.amount` o
            `payload.stake_amount`, en ese orden.
          example: '250.000000000000000000'
        currency:
          type: string
          nullable: true
          description: >-
            Moneda tomada de `transaction_context.currency` o
            `payload.currency`.
          maxLength: 10
        game_id:
          type: string
          nullable: true
          description: Se promueve desde `payload.game_id`.
          maxLength: 128
        round_id:
          type: string
          nullable: true
          description: Tomado de `payload.round_id`.
          maxLength: 128
        bonus_id:
          type: string
          nullable: true
          description: Se promueve desde `payload.bonus_id`.
          maxLength: 128
        affiliate_code:
          type: string
          nullable: true
          description: Se promueve desde `payload.affiliate_code`.
          maxLength: 128
        payment_reference_id:
          type: string
          nullable: true
          description: >-
            Referencia de pago tomada de
            `transaction_context.payment_reference_id` o de
            `payload.payment_reference_id`.
          maxLength: 255
        retention_class:
          type: string
          enum:
            - low_value
            - standard
            - risk_relevant
            - monetary_or_compliance
          description: >-
            Clase de retención. Los eventos de pago y de disputa son
            `monetary_or_compliance`; los eventos de seguridad y de juego
            responsable son `risk_relevant`; `session.page_view`,
            `session.sdk_heartbeat`, `session.sdk_loaded`,
            `session.device_seen`, `session.bot_signal_observed`,
            `bonus.promotion_viewed` y `affiliate.referral_clicked` son
            `low_value`; todo lo demás es `standard`. Un evento que coincide con
            una regla activa se promociona a `risk_relevant` (nunca se degrada).
        rules_matched_count:
          type: integer
          minimum: 0
          description: >-
            Número de reglas que coincidieron con el evento, incluidas las
            reglas en modo `TEST` (que registran evidencias pero no aplican
            ninguna acción).
        correlation_pending:
          type: boolean
          description: >-
            `true` mientras una regla asíncrona (correlación entre sujetos o una
            secuencia de más de 24 horas) aún tiene que ejecutarse para este
            evento. Se resuelve en minutos y `status`, `score` y
            `rules_matched_count` se actualizan en el mismo registro.
        is_droppable:
          type: boolean
          description: >-
            Indica si un SDK con contrapresión puede descartar eventos de este
            tipo. `false` para todos los eventos `security`, `payment`,
            `dispute` y `responsible_gambling`, y para `gameplay.bet_placed`,
            `gameplay.bet_settled` y `gameplay.p2p_settlement`.
    MonitoringEventRuleRun:
      type: object
      properties:
        rule_uuid:
          type: string
          format: uuid
          description: UUID de la regla de monitorización de transacciones.
        rule_title:
          type: string
          description: Título de la regla.
        library_key:
          type: string
          nullable: true
          description: >-
            Clave de la biblioteca cuando la regla se instaló desde la
            biblioteca de reglas; en caso contrario, null.
        matched:
          type: boolean
          description: 'Siempre `true`: solo se registran las ejecuciones con coincidencia.'
        mode:
          type: string
          enum:
            - ACTIVE
            - TEST
          description: >-
            Modo de la regla cuando se ejecutó. Una ejecución `TEST` registra
            evidencias, pero no aplicó ninguna acción.
        is_async:
          type: boolean
          description: >-
            `true` cuando la ejecución procede de la pasada de correlación
            asíncrona en lugar de la solicitud de ingesta.
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
            - null
          description: >-
            Gravedad de la regla. Null para las ejecuciones `TEST` y para las
            reglas sin gravedad.
        score_delta:
          type: integer
          description: >-
            Cuánto cambió esta ejecución la puntuación del evento (0 en las
            ejecuciones `TEST`).
        action_summary:
          type: string
          nullable: true
          description: >-
            Resumen breve de las acciones aplicadas, por ejemplo `score +40;
            add_tag:VPN_LOGIN`. Es null cuando no se aplicó nada.
        matched_payload:
          type: array
          description: >-
            Las condiciones y agregaciones que coincidieron. Las entradas de
            condición llevan `field`, `operator`, `expected_value`,
            `current_value`, `matched`, `group_index`, `group_logic` y
            `field_source` (`server`, `sdk` o `customer`); las entradas de
            agregación llevan `metric`, `field`, `operator`, `expected_value`,
            `computed_value`, `window`, `filters`, `matched` y
            `sample_references`.
          items:
            type: object
            additionalProperties: true
        created_at:
          type: string
          format: date-time
          description: Fecha y hora en que se registró la ejecución de la regla.
      required:
        - rule_uuid
        - rule_title
        - library_key
        - matched
        - mode
        - is_async
        - severity
        - score_delta
        - action_summary
        - matched_payload
        - created_at
  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.