Arquitectura
Autenticación
Encabezado estándarx-api-key. Se usan las mismas claves que para las sesiones y las entidades. Consulta Autenticación de la API.
Envío de una transacción
Un único endpoint:POST /v3/transactions/. Consulta envío de transacciones para ver el esquema completo.
Payload mínimo:
txnId, txnDate, type, info, applicant, props, travelRule, includeCryptoScreening): el formato de transmisión del SDK y el formato snake_case se procesan de la misma manera.
Modelado de las partes
Toda transacción tiene unsubject obligatorio (tu cliente, la parte que monitorizas) y una counterparty opcional (la otra parte). Cada una lleva su propio payment_method y, opcionalmente, el contexto device.
En la respuesta, ambas se devuelven en el array parties con los roles APPLICANT y COUNTERPARTY; una parte sin vendor_data se almacena como una instantánea externa (kind: EXTERNAL) sin ninguna entidad vinculada.
Consulta payload de transacciones para ver los campos de las partes.
Idempotencia
txn_id (el transaction_id que envías) es único por aplicación.
Volver a enviar un transaction_id que ya existe devuelve 400 con A transaction with this transaction_id already exists. en el campo transaction_id; cuando se envían dos solicitudes idénticas al mismo tiempo, la segunda recibe 409.
Ninguna de las dos respuestas devuelve la transacción existente.
Ante un 400 o un 409 por un transaction_id duplicado, busca la transacción existente en lugar de volver a enviarla: léela con GET /v3/transactions/{uuid}/ usando el uuid de la primera respuesta, o usa el transaction_id (el uuid de Didit) que el webhook transaction.created incluye junto a tu txn_id.
Genera siempre el txn_id de tu lado antes de enviar la transacción; no dependas de un ID generado por Didit para la idempotencia. Usa el ID de tu propia base de datos, un UUID o un hash de los campos de la transacción.
Tiempo real frente a lotes
- Tiempo real: recomendado para la mayoría de los casos de uso. Envía la transacción en el momento en que se produce en tu sistema. Las reglas se evalúan de forma síncrona y devuelven la decisión.
- Lotes / carga retroactiva: para la ingesta de datos históricos, pasa un
txn_datecon una fecha pasada. Las reglas se siguen ejecutando y pueden disparar webhooks. Para evitar que se disparen reglas durante la carga retroactiva, usa la importación CSV de la consola con la opción “dry ingest”.
Ingesta del historial
Cuando migras desde otro sistema de monitorización de transacciones:- Exporta tus transacciones históricas a un CSV.
- Usa Transactions → Import history en la consola (o envíalas por API en un bucle) con un
txn_dateen el pasado. - Activa las reglas solo cuando termine la ingesta, o usa “dry ingest” para omitir la evaluación de reglas.
Webhooks
Suscríbete a:transaction.created: cada transacción enviada.transaction.status.updated: cambios de estado (por ejemplo, un analista pasa la transacción deIN_REVIEWaAPPROVED, o una comprobación AML asíncrona actualiza la puntuación).
Gestión de estados
Consulta estados de TM.
Vinculación de transacciones con entidades
Incluyevendor_data para cada parte. Ventajas:
- Cada transacción se agrega al perfil del usuario o de la empresa.
- Las reglas de velocidad y de comportamiento disponen de todo el historial para evaluar.
- El bloqueo de una entidad se propaga automáticamente a las transacciones futuras.
vendor_data no es un error bloqueante (la transacción se almacena como una instantánea externa), pero pierdes la agregación a nivel de entidad.
Sesiones de remediación
Cuando la acción de una regla pasa una transacción aAWAITING_USER, Didit crea automáticamente una sesión de remediación: una sesión de verificación alojada estándar para el mismo vendor_data.
Las reglas personalizadas siempre indican el flujo de verificación (workflow) en la propia acción; en las reglas integradas de la biblioteca, el flujo se toma del flujo de remediación de la configuración de transacciones, después del flujo de Autenticación biométrica de tu aplicación (cuando el sujeto tiene un rostro de referencia almacenado) y, por último, del flujo predeterminado de tu aplicación.
Las transacciones de Travel Rule quedan excluidas de este mecanismo automático: su acción pendiente es la prueba de propiedad de la wallet.
La transacción (la respuesta, cada consulta posterior y cada webhook) la incluye en el bloque canónico action_required:
remediation se mantiene por compatibilidad con versiones anteriores; action_required es el bloque canónico (también incluye acciones wallet_ownership para las transferencias de Travel Rule).
Una acción wallet_ownership no cambia por sí sola el estado de la transacción: la transacción conserva el estado que le asignen tus reglas, a menudo APPROVED, así que comprueba action_required en cada respuesta, no solo en AWAITING_USER.
El usuario completa la verificación. En un flujo de Autenticación biométrica, se trata de una selfie con prueba de vida que se compara con el rostro capturado en su onboarding KYC original, el paso de verificación adicional más sólido para las transacciones de alto valor.
Cuando la sesión alcanza una decisión, la transacción adopta automáticamente esa decisión (APPROVED (decision_reason_code: user_action_approved), DECLINED (user_action_declined) o IN_REVIEW (user_action_in_review)) y se envía un webhook transaction.status.updated.
Se puede seleccionar cualquier tipo de flujo excepto KYB.
Los flujos de Autenticación biométrica (y los flujos en los que la coincidencia facial se ejecuta antes de la verificación de identidad) requieren que el sujeto ya tenga un rostro de referencia almacenado de una verificación aprobada; los usuarios que no lo tienen se envían en su lugar al flujo predeterminado de tu aplicación, y se añade una nota en la transacción que registra la sustitución.
Buenas prácticas
Límites de solicitudes
Consulta límites de solicitudes. La creación de transacciones es uno de los endpoints con mayor volumen; los límites habituales son de cientos de solicitudes por segundo. Gestiona las ráfagas con cuidado.Próximos pasos
Transacciones
Referencia completa del payload.
Reglas
Cómo se evalúan las reglas.
Webhooks
Catálogo de eventos.
Solución de problemas
Problemas de integración habituales.