Saltar al contenido principal
Envía transacciones a Didit mediante la API Create Transaction. Cada transacción incluye datos estructurados de las partes, del pago y del contexto, que el motor de reglas evalúa en tiempo real.
Cuando la transacción se origina en el dispositivo de un usuario final (un retiro de criptoactivos, un pago dentro de la app), considera el envío de transacciones desde el SDK: un token con alcance limitado sustituye a la clave de API, la información del dispositivo se recopila automáticamente y las acciones requeridas del usuario (prueba de propiedad de la wallet, verificación reforzada) se inician de inmediato.

Categorías de transacciones

Cada transacción tiene un transaction_category que determina cómo la tratan las reglas y la analítica:

Detalles de la transacción

El objeto transaction_details contiene los datos financieros:

Sujeto y contraparte

Cada transacción tiene un sujeto (obligatorio) y una contraparte opcional. Ambos usan el mismo modelo de parte: Didit deriva el country_code de la parte a partir de address.country cuando address es un objeto. Cuando address es un string, country_code se devuelve como null en esa parte. Cuando vendor_data coincide con un usuario o una empresa existentes, Didit vincula automáticamente la transacción al perfil de esa entidad, lo que permite evaluar reglas entre sesiones y realizar comprobaciones de frecuencia. En la respuesta, ambas partes se devuelven en el array parties con los roles APPLICANT y COUNTERPARTY.

Métodos de pago

Adjunta un payment_method a cada parte para describir el instrumento de ese lado: En las transacciones travelRule, un método de pago de la contraparte con method_type: "unhosted_wallet" (alias type) declara la wallet de la contraparte como wallet sin custodia. Cuando la Travel Rule está activada y el importe, en la divisa predeterminada de tu aplicación, no es inferior a threshold_amount, la transferencia pasa directamente a UNCONFIRMED_OWNERSHIP y al flujo de prueba de propiedad; consulta Wallets sin custodia declaradas. En las transacciones cripto, incluye las direcciones de wallet en account_id y establece currency_kind en crypto para que el análisis en la blockchain se ejecute automáticamente. El sentido de la transacción determina qué wallet se analiza: el análisis entrante previo a la transferencia usa la wallet del remitente en counterparty.payment_method.account_id; el análisis saliente usa la wallet de destino en counterparty.payment_method.account_id. Si envías un hash de la blockchain en transaction_details.payment_reference_id, el análisis de transacciones entrantes requiere la dirección de depósito de tu servicio en subject.payment_method.account_id, mientras que el análisis de transacciones salientes requiere la wallet de destino en counterparty.payment_method.account_id.

Sobrescribir el análisis cripto

Usa include_crypto_screening en el nivel superior de la solicitud para sobrescribir el valor predeterminado configurado en Transactions > Settings en la Console:

Contexto del dispositivo

Incluye información del dispositivo del sujeto (y, opcionalmente, de la contraparte) para activar las reglas de inteligencia de dispositivos. El campo de la solicitud es device_context en cada parte; también se acepta el alias en camelCase device, que es el que usa el formato de transmisión del SDK. La respuesta lo devuelve como device en cada parte del array parties.
browser_family y platform no se derivan de user_agent. Deben enviarse como claves explícitas de primer nivel dentro de device_context para que se activen las reglas de inteligencia de dispositivos. Si usas el SDK de Didit, estos campos se recopilan automáticamente.
Se aceptan alias en camelCase para todos los campos: userAgent, browserFamily, browserVersion, osFamily, osVersion, acceptLang, sessionId, sessionAgeMs. El subobjeto network_context acepta los alias ip / countryCode3 / lat / lon, y un bloque ipInfo de primer nivel también se incorpora a network_context. El contexto del dispositivo permite reglas como la detección de multicuenta (la misma huella digital en sujetos distintos), la detección de la combinación de navegador nuevo e IP nueva, las transferencias de alto valor con una sesión de poca antigüedad y la puntuación de riesgo basada en la ubicación.

Propiedades personalizadas

Añade cualquier par clave-valor adicional en el objeto custom_properties. Las reglas pueden hacer referencia a estos campos en sus condiciones, lo que resulta útil para pasar contexto específico de tu negocio, como la categoría de producto, el ID del comercio o el canal.
En las condiciones de las reglas, haz referencia a cada clave con la ruta de campo custom_values.<key>: por ejemplo, el payload anterior coincide con custom_values.product_category eq "electronics". En el editor de reglas de la consola, las claves detectadas en las transacciones ingeridas recientemente aparecen en el selector de campos de la condición, en Custom Properties, y la opción Enter custom property del mismo grupo te permite escribir cualquier clave manualmente (distingue entre mayúsculas y minúsculas). Consulta Reglas y puntuación para más detalles.

Ejemplo de solicitud

Respuesta

La API devuelve la transacción creada con los resultados de su evaluación inicial: Consulta la referencia de la API para ver el esquema completo de la solicitud y la respuesta, y la referencia del esquema de respuesta para una guía comentada del payload.

Asignar una transacción a un revisor

Asigna una transacción retenida a un miembro de tu aplicación, o retira la asignación, con una clave de API que tenga el privilegio write:transactions. Cada cambio queda registrado en la línea de tiempo de la transacción como TRANSACTION_ASSIGNED. Ambas llamadas reciben assignee_email, el correo electrónico de un miembro de la aplicación que haya iniciado sesión en Didit. Envía null o una cadena vacía para retirar la asignación. La llamada masiva también recibe transaction_ids, una lista de entre 1 y 500 UUID de transacciones.
La llamada individual devuelve uuid, transaction_number, assignee y changed (false cuando la transacción ya tenía ese responsable asignado), o 404 cuando la transacción no existe en la aplicación. La llamada masiva devuelve transactions (una entrada como la anterior por transacción), updated_count y not_found_transaction_ids. Filtra la lista de transacciones con assignee, una lista separada por comas en la que basta con que coincida cualquier valor: me, unassigned, rules (transacciones decididas solo por las reglas, sin intervención de un revisor) o el correo electrónico de un miembro.

Idempotencia

txn_id (el transaction_id que envías) es único por aplicación. Si vuelves a enviar un transaction_id que ya existe, recibes un 400 con A transaction with this transaction_id already exists. en el campo transaction_id, y si dos solicitudes idénticas compiten entre sí, la segunda recibe un 409. Ninguna de las dos respuestas devuelve la transacción existente. Para reintentar de forma segura, trata un 400 o un 409 por un transaction_id duplicado como una indicación de que la transacción ya se creó y consulta 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 en tu sistema (por ejemplo, el ID de la transacción en tu propia base de datos, un UUID o un hash determinista).

Carga de datos históricos

Envía un txn_date con una fecha pasada para ingerir transacciones históricas. Las reglas se siguen evaluando de forma predeterminada; usa la importación CSV de la consola con el modo de ingesta de prueba (dry-ingest) si quieres omitir la evaluación de reglas durante cargas masivas de datos históricos. Consulta la guía de integración.

Próximos pasos

Reglas y puntuación

Cómo se evalúan las transacciones enviadas en función de las reglas.

Esquema de respuesta

Payload de respuesta completo y comentado.

Análisis cripto

Análisis automático de wallets y transacciones de criptomonedas.

Travel Rule

Adjunta datos de cumplimiento de la Travel Rule a las transferencias de activos virtuales.

Enriquecimiento de IP

Contexto derivado de la IP disponible para las reglas.

Referencia de la API

Esquema completo de la solicitud para el endpoint Create Transaction.
Última modificación el 1 de noviembre de 2026