Saltar al contenido principal
POST
curl
La ingesta de eventos es opcional y debes activarla. Actívala en Transactions > Settings > Event monitoring antes de enviar eventos; hasta entonces, este endpoint responde 403 con "code": "event_monitoring_disabled".
Ingesta de eventos describe el sobre, las diez categorías, las claves obligatorias del payload y las clases de retención. Reglas de eventos explica qué reglas se ejecutan durante la solicitud y cuáles se ejecutan de forma asíncrona. Para enviar eventos desde un navegador o una aplicación en lugar de hacerlo desde tu backend, usa el envío de eventos desde el SDK.

Autorizaciones

x-api-key
string
header
requerido

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.

Cuerpo

application/json

El sobre del evento, igual para todas las categorías. Se aceptan alias en camelCase: eventId, eventCategory (o category), actionType, occurredAt, timeZone (o zoneId), deviceContext (o device), transactionContext, customValues (o props); dentro de subject: vendorData, entityType, fullName; dentro de session: sessionId, pageUrl; dentro de transaction_context: paymentReferenceId.

event_id
string
requerido

Tu identificador para el evento, único por aplicación. Es la clave de idempotencia: reenviar los mismos event_category, action_type, occurred_at, subject.vendor_data y payload con este identificador es una repetición; cualquier diferencia es un conflicto.

Maximum string length: 128
Ejemplo:

"login-2026-10-17-000001"

event_category
enum<string>
requerido

Categoría del evento.

Opciones disponibles:
auth,
session,
gameplay,
bonus,
affiliate,
payment,
dispute,
security,
responsible_gambling,
custom
Ejemplo:

"auth"

action_type
string
requerido

Qué ocurrió dentro de la categoría. Vocabulario abierto; las acciones gestionadas que se indican en Ingesta de eventos (por ejemplo, login, deposit_completed, chargeback_opened) habilitan la validación tipada y los campos de regla gestionados. Se eliminan los espacios en blanco iniciales y finales.

Required string length: 1 - 128
Ejemplo:

"login"

occurred_at
string<date-time>
requerido

Cuándo ocurrió el evento en tu lado, en ISO 8601 (un valor sin desfase se interpreta como UTC). No puede ser de hace más de 7 días ni de más de 5 minutos en el futuro.

Ejemplo:

"2026-10-17T09:15:02.481Z"

subject
object
requerido

El usuario o la empresa a la que pertenece el evento. Se resuelve al usuario (o empresa) con este vendor_data en tu aplicación; se crea uno cuando no existe ninguno.

time_zone
string | null

Zona horaria del suceso en tu lado, por ejemplo Europe/Madrid. Se almacena con el evento; los endpoints de lectura no la devuelven.

Maximum string length: 64
business
object

La empresa a la que pertenece el evento, cuando es distinta del sujeto. Solo se lee vendor_data.

session
object

El contexto de tu sesión para el evento.

device_context
object

Contexto de dispositivo y red. Se almacena tal como se envía y lo devuelve GET /v3/events/{event_uuid}/. En este canal de servidor, Didit no ve la conexión del usuario final. Por eso, la IP que se enriquece y que usan las reglas es network_context.ip_address, tal como la envías.

transaction_context
object

Contexto monetario. Los valores no vacíos de este campo también cumplen las claves obligatorias del payload de la acción.

payload
object

Los campos de dominio de la categoría, como máximo 16384 bytes una vez codificados en JSON. Algunas acciones requieren claves (en payload o transaction_context): gameplay.p2p_settlement necesita game_id, counterparty_vendor_data, stake_amount, net_result_amount, role y uno de hand_id, round_id, match_id; gameplay.bet_placed y gameplay.bet_settled necesitan game_id; payment.deposit_initiated, payment.deposit_completed, payment.withdrawal_requested y payment.withdrawal_completed necesitan payment_reference_id, amount, currency, payment_method, status; payment.withdrawal_address_changed necesita withdrawal_address_hash; dispute.chargeback_opened, dispute.chargeback_won y dispute.chargeback_lost necesitan payment_reference_id y uno de dispute_id, chargeback_id; session.bot_signal_observed necesita telemetry_schema_version y uno de bot_score, actions_per_minute, timing_variance_ms, pointer_entropy, keystroke_entropy, reaction_time_ms_p50; responsible_gambling.self_exclusion_match necesita registry_source, exclusion_status, identity_match_ref. Toda acción security que termina en _changed necesita changed_field, además de previous_reference_hash o new_reference_hash cuando el campo es password, mfa_method, mfa, email, phone, withdrawal_address, payout_method o api_key. Envía hashes y referencias, nunca un número de tarjeta, una dirección de retiro completa, un hash de contraseña ni un secreto MFA.

custom_values
object

Hasta 100 claves propias, accesibles desde las reglas como custom_values.<key>. Los valores deben ser escalares (cadena, número, booleano o null); los objetos y arrays anidados se rechazan.

Respuesta

Reproducción idempotente: ya hay almacenado un evento con este event_id y el mismo contenido. No se ha vuelto a almacenar ni a evaluar nada; el cuerpo describe el evento almacenado.

Resultado de la ingesta de un evento. Se devuelve la misma estructura para un evento nuevo y para una repetición idempotente.

event_uuid
string<uuid>
requerido

Identificador de Didit del evento almacenado.

event_id
string
requerido

Tu event_id.

status
enum<string>
requerido

Estado después de ejecutar las reglas en tiempo real. Consulta MonitoringEvent.status.

Opciones disponibles:
ACCEPTED,
APPROVED,
IN_REVIEW,
DECLINED
score
integer
requerido

Puntuación después de ejecutar las reglas en tiempo real.

rules_evaluated_count
integer
requerido

Número de reglas de eventos evaluadas en la solicitud. 0 en una aplicación de sandbox, donde no se ejecuta ninguna regla.

Rango requerido: x >= 0
rules_matched_count
integer
requerido

Número de reglas que coincidieron, incluidas las reglas en modo TEST.

Rango requerido: x >= 0
correlation_pending
boolean
requerido

true cuando todavía falta ejecutar una regla asíncrona. Consulta GET /v3/events/{event_uuid}/ unos minutos después para obtener el status y el score finales.

retention_class
enum<string>
requerido

Clase de retención, tras cualquier promoción por una regla coincidente.

Opciones disponibles:
low_value,
standard,
risk_relevant,
monetary_or_compliance
expires_at
string<date-time> | null
requerido

Cuándo expira el evento según su clase de retención y se elimina. Nulo para los eventos monetary_or_compliance (pagos y disputas).

idempotent_replay
boolean
requerido

true cuando ya se había almacenado un evento con este event_id y el mismo contenido; los valores son los del evento almacenado y no se volvió a ejecutar ninguna regla.

rule_matches
object[]
requerido

Reglas que coincidieron con el evento.

Última modificación el 1 de noviembre de 2026