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

# Esquema de respuesta KYT: payload de transacción

> Respuesta de transacción de Didit: puntuación, reglas, partes, IP, dispositivo, cripto y Travel Rule. 1,000 al mes incluidas, luego $0.001 cada una.

Esta página documenta el payload completo que devuelven `POST /v3/transactions/` y `GET /v3/transactions/{transaction_id}/`. Ambos endpoints devuelven el mismo objeto `TransactionDetail`; la [referencia de la API](https://docs.didit.me/es/management-api/transactions/get.md) contiene el esquema campo por campo y esta página lo recorre paso a paso.

## Estructura de nivel superior

```json theme={null}
{
  "uuid": "abcdef12-3456-4890-abcd-ef1234567890",
  "environment": "live",
  "transaction_number": 4123,
  "txn_id": "tx-0001",
  "txn_date": "2026-04-16T12:00:00Z",
  "zone_id": "Europe/Madrid",
  "transaction_type": "finance",
  "action_type": "withdrawal",
  "direction": "OUTBOUND",
  "status": "IN_REVIEW",
  "source": "LIVE",
  "amount": "12500",
  "currency": "EUR",
  "currency_type": "fiat",
  "amount_in_default_currency": null,
  "default_currency_code": null,
  "preferred_currency_amount": "13520.75",
  "preferred_currency_code": "USD",
  "payment_details": "Withdrawal to bank account",
  "payment_txn_id": null,
  "score": 65,
  "severity": "MEDIUM",
  "decision_reason_code": "rule_score_threshold",
  "decision_reason_label": "Score above review threshold",
  "vendor_data": "user-42",
  "metadata": { "subject": { ... }, "counterparty": { ... } },
  "props": { "order_id": "ORD-7891" },
  "tags": [ ... ],
  "parties": [ ... ],
  "payment_methods": [ ... ],
  "documents": [ ... ],
  "activities": [ ... ],
  "alerts": [],
  "rule_runs": [ ... ],
  "provider_results": [ ... ],
  "travel_rule": { ... } | null,
  "network_snapshot": { ... } | null,
  "remediation": { ... } | null,
  "action_required": { ... } | null,
  "cost_breakdown": { ... } | null
}
```

Dos identificadores describen la misma transacción. `uuid` es el identificador estable de Didit y es el que `GET /v3/transactions/{transaction_id}/` espera en su path; `txn_id` es el `transaction_id` que proporcionaste al crearla. `transaction_number` es el número secuencial, propio de cada aplicación, que muestra la consola.

El sujeto y la contraparte que enviaste no se devuelven como claves de nivel superior. Son las entradas del array `parties`, que se distinguen por su `role`, y `vendor_data` en el nivel superior es una copia de conveniencia del `vendor_data` del solicitante.

## Campos principales

### Campos financieros

* `amount` / `currency` — importe de la transacción tal como se envió. `amount` es una cadena decimal sin ceros finales (`"1500"`, `"0.5"`), con hasta 18 decimales.
* `currency_type` — `fiat` o `crypto`, tal como se envió en `currency_kind`; `null` si se omitió.
* `amount_in_default_currency` / `default_currency_code` — el importe ya convertido que indicaste en la solicitud, devuelto tal cual; `null` si no lo enviaste.
* `preferred_currency_amount` / `preferred_currency_code` — `amount` convertido a la moneda preferida de tu aplicación. `null` si no hay tipo de cambio disponible para `currency` y no indicaste `amount_in_default_currency`.
* `payment_details` / `payment_txn_id` — la referencia de pago en texto libre y la referencia de pago externa (por ejemplo, el hash de una transacción en blockchain) de la solicitud.

### Campos de estado

* `status` — `APPROVED`, `IN_REVIEW`, `DECLINED`, `AWAITING_USER`. Las transacciones se crean como `APPROVED`; las reglas pueden cambiarlo de forma síncrona.
* `score` — puntuación de riesgo entera acumulada por las reglas. Cuanto más alta, mayor es el riesgo.
* `severity` — `UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`, o `null` hasta que una regla o un proveedor la establece.
* `decision_reason_code` / `decision_reason_label` — motivo del estado actual, en forma estructurada y legible.
* `environment` - `live` o `sandbox`, según la aplicación a la que pertenece la transacción. Una transacción de `sandbox` se almacena pero nunca se evalúa, por lo que un `rule_runs` vacío significa "no evaluada" y no "no hubo coincidencias". Consulta [Monitorización de transacciones en sandbox](https://docs.didit.me/es/integration/sandbox-testing.md#monitorización-de-transacciones-en-sandbox).
* `source` - `LIVE` para transacciones enviadas mediante la API o el SDK, `IMPORTED` para transacciones cargadas mediante la importación CSV de la consola.

### Partes

Cada parte de la transacción es una entrada en `parties`. El endpoint de creación registra al sujeto como `APPLICANT` y a la contraparte opcional como `COUNTERPARTY`; el enum `role` también incluye `REMITTER` y `BENEFICIARY`. Todas las entradas comparten la misma estructura.

```json theme={null}
"parties": [
  {
    "uuid": "b1111111-2222-4333-8444-555555555555",
    "role": "APPLICANT",
    "entity_type": "individual",
    "kind": "USER",
    "vendor_data": "user-42",
    "full_name": "John Doe",
    "first_name": "John",
    "last_name": "Doe",
    "country_code": "USA",
    "dob": "1990-01-01",
    "address": { "line_1": "...", "city": "...", "country": "USA" },
    "institution_info": { "name": "...", "country_code": "..." },
    "device": {
      "fingerprint": "...",
      "persistent_device_id": "...",
      "user_agent": "...",
      "browser_family": "Chrome",
      "browser_version": "131.0",
      "platform": "web",
      "os_family": "Windows",
      "os_version": "10.0",
      "accept_language": "en-US,en;q=0.9",
      "session_id": "...",
      "session_age_ms": 84000,
      "metadata": {
        "accept_language": "en-US,en;q=0.9",
        "session_id": "...",
        "session_age_ms": 84000
      },
      "network_context": {
        "ip_address": "203.0.113.5",
        "ip_country": "United States",
        "ip_country_code": "US",
        "ip_state": "California",
        "ip_city": "San Francisco",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "isp": "Example ISP",
        "organization": "Example Org",
        "is_vpn_or_tor": false,
        "is_data_center": false,
        "time_zone": "America/Los_Angeles",
        "time_zone_offset": "-0700",
        "asn_number": 64496,
        "asn_organization": "Example ISP",
        "connection_type": "isp",
        "carrier": null,
        "proxy_type": null
      }
    },
    "external_party_snapshot": null
  },
  {
    "uuid": "c2222222-3333-4444-8555-666666666666",
    "role": "COUNTERPARTY",
    "entity_type": "company",
    "kind": "EXTERNAL",
    "vendor_data": null,
    "full_name": "Acme Supplier",
    "first_name": null,
    "last_name": null,
    "country_code": "GBR",
    "dob": null,
    "address": {},
    "institution_info": {},
    "device": {},
    "external_party_snapshot": { "full_name": "Acme Supplier", "country": "GBR", "...": "..." }
  }
]
```

* `role` — `APPLICANT`, `COUNTERPARTY`, `REMITTER`, `BENEFICIARY`. Filtra por este campo para encontrar al sujeto.
* `entity_type` — `individual`, `company`, `external`, `unhostedWallet`, tal como se envió.
* `kind` — `USER` o `BUSINESS` cuando la parte está vinculada a un usuario o una empresa de Didit mediante `vendor_data`; `EXTERNAL` en caso contrario.
* `country_code` / `dob` — a partir de los valores enviados en `address.country` y `date_of_birth`.
* `address` / `institution_info` — los objetos tal como se enviaron; `{}` si se omitieron.
* `external_party_snapshot` — copia inmutable de los datos de la parte para las partes `EXTERNAL`; `null` mientras la parte esté vinculada a un usuario o una empresa de Didit.

#### `device`

`device` es el `device_context` que enviaste para esa parte, normalizado a snake\_case, más el enriquecimiento de IP realizado en el servidor. Es `{}` cuando la solicitud no incluía contexto de dispositivo, así que trata siempre todas las claves como opcionales.

| Clave | Descripción |
| - | - |
| `fingerprint`, `persistent_device_id` | Identificadores del dispositivo tal como se enviaron. |
| `user_agent`, `browser_family`, `browser_version`, `platform`, `os_family`, `os_version` | Atributos del navegador y del sistema operativo tal como se enviaron. `browser_family` y `platform` nunca se derivan de `user_agent`. |
| `accept_language`, `session_id`, `session_age_ms` | Atributos de sesión tal como se enviaron. También se replican en `device.metadata` con los mismos nombres, donde el SDK los almacena. |
| `metadata` | Presente cuando la solicitud incluía un objeto `metadata` o alguno de los tres atributos de sesión. |
| `network_context` | Contexto de red, ver más abajo. Ausente cuando no se envió ninguna IP ni datos de red. |

No existe un objeto de enriquecimiento independiente. Cuando la parte incluía un `network_context.ip_address` público, Didit lo resuelve en línea y escribe los [campos enriquecidos](https://docs.didit.me/es/transaction-monitoring/ip-enrichment.md#campos-enriquecidos) en el mismo objeto `network_context`, rellenando solo las claves que no indicaste. Las claves que el resolvedor devolvió vacías se omiten, por lo que un `network_context` totalmente enriquecido contiene las cuatro claves enviadas (`ip_address`, `ip_country_code`, `latitude`, `longitude`) más las que se hayan resuelto de entre `ip_country`, `ip_state`, `ip_city`, `isp`, `organization`, `is_vpn_or_tor`, `is_data_center`, `time_zone`, `time_zone_offset`, `asn_number`, `asn_organization`, `connection_type`, `carrier` y `proxy_type`. `is_vpn_or_tor` y `is_data_center` están siempre presentes tras una resolución correcta.

El enriquecimiento se omite, y `network_context` se devuelve exactamente como se envió, cuando la IP falta o no es enrutable, cuando la aplicación está en sandbox o cuando la resolución falló. `ip_country_code` es un código ISO 3166-1 alfa-2 cuando Didit lo resolvió y, en caso contrario, el valor que hayas enviado; las condiciones de las reglas normalizan ambas formas antes de comparar.

### Métodos de pago

```json theme={null}
"payment_methods": [
  {
    "uuid": "...",
    "payment_method_type": "bank_account",
    "label": null,
    "fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
    "account_id": "DE89370400440532013000",
    "issuing_country": "DE",
    "owner_kind": "USER",
    "vendor_data": "user-42",
    "owner_name": "John Doe",
    "institution_info": {},
    "details": { "method_type": "bank_account", "account_id": "DE89370400440532013000", "issuing_country": "DE" },
    "external_owner_snapshot": null,
    "role": "SOURCE"
  }
]
```

* `role` — `SOURCE`, `DESTINATION`, `FUNDING`, `BENEFICIARY`. El endpoint de creación asigna `SOURCE` / `DESTINATION` a partir de `direction`: en una transacción saliente, el método del sujeto es el `SOURCE` y el de la contraparte, el `DESTINATION`; en una entrante es al revés.
* `payment_method_type` — `bank_card`, `bank_account`, `e_wallet`, `crypto_wallet`, `unhosted_wallet`, `other`.
* `fingerprint` — SHA-256 de `type:account_id:issuing_country`, estable entre transacciones para que puedas detectar la reutilización del mismo instrumento. `null` cuando no se envió ningún `account_id`.
* `owner_kind` / `vendor_data` / `owner_name` — quién es el titular del instrumento, con la misma convención `USER` / `BUSINESS` / `EXTERNAL` que las partes.
* `details` — el objeto `payment_method` sin procesar, tal como se envió.

### Ejecuciones de reglas

```json theme={null}
"rule_runs": [
  {
    "uuid": "...",
    "rule": "f6a7b8c9-0123-4def-b012-3456789abcde",
    "rule_title": "High-value outbound",
    "rule_description": null,
    "rule_category": "finance",
    "matched": true,
    "is_test": false,
    "mode": "ACTIVE",
    "severity": "MEDIUM",
    "score_delta": 30,
    "status_target": null,
    "action_summary": "score +30",
    "metadata": {
      "scope_match": true,
      "conditions": [
        {
          "field": "amount",
          "operator": "gt",
          "expected_value": "10000",
          "current_value": "12500",
          "matched": true,
          "group_index": null,
          "group_logic": "AND",
          "field_source": null
        }
      ],
      "aggregations": []
    },
    "created_at": "2026-04-16T12:00:01Z"
  },
  {
    "uuid": "...",
    "rule": "...",
    "rule_title": "High-risk jurisdiction counterparty",
    "rule_description": null,
    "rule_category": "finance",
    "matched": true,
    "is_test": false,
    "mode": "ACTIVE",
    "severity": "HIGH",
    "score_delta": 35,
    "status_target": "IN_REVIEW",
    "action_summary": "score +35; change_status:IN_REVIEW; add_tag:high_risk_country",
    "metadata": { "scope_match": true, "conditions": [ ... ], "aggregations": [] },
    "created_at": "2026-04-16T12:00:01Z"
  }
]
```

* `rule` — UUID de la regla que se ejecutó; `rule_title`, `rule_description` y `rule_category` se copian de ella.
* `matched` — una ejecución solo se registra cuando las condiciones de la regla coincidieron, por lo que las evaluaciones en producción siempre llevan `matched: true`. Las reglas que se evaluaron sin coincidir no dejan ninguna entrada. Los datos de demostración pueden incluir filas con `matched: false`.
* `is_test` / `mode` — `true` y `TEST` cuando la regla se ejecutó en modo de prueba; una ejecución de prueba se registra, pero no afecta a `status`, `score` ni `severity`.
* `score_delta` / `status_target` / `severity` — lo que aportó esta ejecución. `status_target` se establece cuando se ejecutó una acción `change_status` o cuando la puntuación añadida superó un [umbral](https://docs.didit.me/es/transaction-monitoring/risk-scoring.md).
* `action_summary` — un resumen en forma de cadena de las acciones que ejecutó la regla, unidas con `; ` (`score +30`, `change_status:IN_REVIEW`, `add_tag:<name>`, `add_note`, `add_to_list`, `open_case`); `null` cuando la regla no ejecutó ninguna acción.
* `metadata` — el detalle de la evaluación: `scope_match`, además de `conditions[]` y `aggregations[]`. Las dos listas usan claves de valor distintas:
  * `conditions[]` — una entrada por condición con `field`, `operator`, `expected_value`, el `current_value` que se leyó de la transacción, `matched`, `group_index` y `group_logic`. `field_source` es siempre `null` en las ejecuciones de reglas de transacciones; solo se clasifica para los [eventos de monitorización](https://docs.didit.me/es/transaction-monitoring/events.md).
  * `aggregations[]` — una entrada por agregación de velocidad, recuento o suma con `metric`, `field`, `operator`, `expected_value`, el `computed_value` resultante de la agregación, `window`, `filters`, `matched` y `sample_references`. Las agregaciones que solo pudieron calcularse de forma asíncrona llevan `computed_value: null` y `deferred: true`.

### Alertas

`alerts` siempre es un array vacío por ahora.
Una alerta abierta es una transacción retenida, así que consulta `status` (`IN_REVIEW` o `AWAITING_USER`). Consulta [Alertas](https://docs.didit.me/es/transaction-monitoring/alerts.md).

### Actividades

El registro de actividad de la transacción: creación, notas, revisiones manuales y cambios de estado.

```json theme={null}
"activities": [
  {
    "uuid": "...",
    "activity_type": "TRANSACTION_CREATED",
    "source": "TRANSACTION",
    "status": "APPROVED",
    "title": "withdrawal",
    "description": null,
    "metadata": { "action_type": "withdrawal", "direction": "OUTBOUND", "amount": "12500", "currency": "EUR" },
    "occurred_at": "2026-04-16T12:00:00Z"
  }
]
```

Las notas de los analistas aparecen aquí como entradas `TRANSACTION_NOTE_ADDED`; no existe un array `notes` independiente.

### Documentos

Archivos adjuntados a la transacción desde la consola. `[]` cuando no hay ninguno.

```json theme={null}
"documents": [
  {
    "uuid": "...",
    "label": "Invoice",
    "note": null,
    "uploaded_by": "...",
    "created_at": "2026-04-16T12:05:00Z",
    "files": [
      { "uuid": "...", "file_url": "https://...", "original_filename": "invoice.pdf", "file_size": 48213 }
    ]
  }
]
```

`file_url` es una URL firmada de corta duración; obtenla cuando la necesites en lugar de almacenarla.

### Resultados de proveedores

Resultados de proveedores externos (análisis de hash de transacción, análisis de wallets, monitorización fiat, análisis de sanciones).

```json theme={null}
"provider_results": [
  {
    "uuid": "...",
    "result_type": "TRANSACTION_SCREENING",
    "provider": "merklescience",
    "status": "SCREENED",
    "severity": "HIGH",
    "score": 82,
    "summary": "Merkle Science risk: High (4/5). Dominant risk: stolen_funds. Driven by: 50% direct incoming exposure to Theft / Hack (Stolen Funds)",
    "payload": {
      "provider": "merklescience",
      "screening_type": "TRANSACTION_SCREENING",
      "transaction_hash": "0x...",
      "wallet_address": null,
      "blockchain": "ETH",
      "block_timestamp": "2026-04-01T00:07:11Z",
      "total_value_usd": 2942.31,
      "fee_usd": 0.09,
      "transaction_flows": [
        {
          "flow_type": "token",
          "from_address": "0x...",
          "to_address": "0x...",
          "amount": 72.83039728,
          "amount_usd": 235.97,
          "currency": "UNI",
          "token_name": "Uniswap",
          "token_address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
          "transaction_hash": "0x...",
          "block_timestamp": "2026-04-01T00:07:11Z",
          "index": 460,
          "success": true,
          "metadata": {
            "provider": "blockscout",
            "token_type": "ERC-20",
            "token_icon_url": "https://...",
            "token_reputation": "ok",
            "token_holders_count": "410093",
            "from": {
              "label": "ravaga.eth",
              "tags": [{ "name": "Beacon Depositor", "type": "generic" }]
            },
            "to": {
              "label": "AirSwap: Spender",
              "is_contract": true,
              "is_verified": true
            }
          }
        }
      ],
      "source_of_funds": [
        {
          "category": "stolen_funds",
          "entity_name": "Stolen Funds",
          "entity_type": "Theft",
          "entity_subtype": "Hack",
          "exposure_direction": "incoming",
          "exposure_type": "direct",
          "is_direct": true,
          "amount_usd": 1471.16,
          "percentage": 50,
          "country": ""
        }
      ],
      "destination_of_funds": [],
      "counterparty_connections": [],
      "sanctions_hit": false,
      "risk_factors": [
        {
          "source": "exposure",
          "category": "stolen_funds",
          "label": "Theft / Hack",
          "entity_name": "Stolen Funds",
          "direction": "incoming",
          "exposure_type": "direct",
          "amount_usd": 1471.16,
          "percentage": 50,
          "is_high_risk": true,
          "description": "50% direct incoming exposure to Theft / Hack (Stolen Funds)"
        }
      ],
      "raw_response": { "...": "provider-specific details" }
    },
    "created_at": "2026-04-16T12:00:02Z"
  }
]
```

`result_type`: `FIAT_MONITORING`, `WALLET_SCREENING`, `TRANSACTION_SCREENING`, `TRAVEL_RULE`, `NETWORK_GRAPH`, `CUSTOM`.

`payload.risk_factors` es la explicación ordenada de `score`: qué produjo el veredicto, primero los factores de alto riesgo y después por valor movido. Un `score` alto sin ninguna entrada `is_high_risk` significa que el proveedor calificó la entidad con su propio modelo de exposición sin informar de una coincidencia con sanciones ni con una entidad atribuida; `summary` lo indica explícitamente. Referencia campo por campo: [Factores de riesgo](https://docs.didit.me/es/transaction-monitoring/wallet-screening.md#factores-de-riesgo). Los resultados analizados antes de que existiera este campo no incluyen la clave.

En el análisis de hash de transacciones cripto, `transaction_flows` se rellena cuando el enriquecimiento on-chain está disponible. Normaliza la actividad de la cadena para que la consola pueda mostrar tanto el resumen de la transacción como el grafo de visualización a partir del mismo payload de respuesta.

Fuentes de enriquecimiento compatibles:

* Las cadenas EVM usan Blockscout para normalizar la transacción principal, las llamadas internas y las transferencias de tokens.
* Bitcoin usa mempool.space para normalizar las entradas y salidas de la transacción.
* Solana usa Helius para normalizar las transferencias nativas de SOL, las transferencias de tokens SPL y el contexto de eventos NFT disponible.

Cada elemento de `transaction_flows[]` incluye campos normalizados estables (`flow_type`, `from_address`, `to_address`, `amount`, `amount_usd`, `currency`, `token_name`, `token_address`, `transaction_hash`, `block_timestamp`, `index`, `success`) además de `metadata` específico del proveedor.

Ejemplos habituales de `metadata`:

```json theme={null}
{
  "provider": "blockscout",
  "decoded_method_call": "swap(string aggregatorId, address tokenFrom, uint256 amount, bytes data)",
  "block_number": 23141214,
  "gas_used": "171843",
  "fee_native": 0.000342317619518133,
  "token_icon_url": "https://...",
  "token_reputation": "ok"
}
```

```json theme={null}
{
  "provider": "mempool",
  "role": "input",
  "previous_txid": "4c0c...",
  "previous_vout": 0,
  "scriptpubkey_type": "v0_p2wpkh",
  "fee_btc": 0.00000322,
  "block_height": 943130
}
```

```json theme={null}
{
  "provider": "helius",
  "source": "MAGIC_EDEN",
  "type": "NFT_BID",
  "description": "Wallet bid 2.5 SOL on an NFT.",
  "slot": 136658192,
  "fee_sol": 0.000005,
  "nft_event": {
    "type": "NFT_BID",
    "source": "MAGIC_EDEN",
    "nft_mints": ["3bUW..."]
  }
}
```

`metadata` es aditivo y específico de cada proveedor. No construyas integraciones críticas que requieran que todas las claves estén presentes en todas las cadenas.

### Travel Rule

`null` cuando la transacción no tiene ninguna transferencia ni comprobación de Travel Rule. Se rellena cuando envías `travel_rule_details`, y también cuando [Travel Rule](https://docs.didit.me/es/transaction-monitoring/travel-rule.md) está habilitada para la aplicación y la transacción se creó con `transaction_category: "travelRule"`: en ese caso, Didit inicia el intercambio por su cuenta, con o sin `travel_rule_details`, e informa aquí de su `status`. Consulta este campo en lugar de la solicitud que enviaste.
En una transferencia entrante, los `originator_data` y `beneficiary_data` de la contraparte permanecen enmascarados (`data_masked: true`) hasta que se confirma la propiedad de la wallet (consulta [Datos enmascarados de la contraparte](https://docs.didit.me/es/transaction-monitoring/travel-rule.md#datos-de-la-contraparte-enmascarados)).

```json theme={null}
"travel_rule": {
  "uuid": "...",
  "status": "COMPLETED",
  "required": true,
  "protocol": "TRP",
  "obligations_count": 2,
  "originator_data": { "name": "...", "wallet_address": "..." },
  "beneficiary_data": { "name": "...", "wallet_address": "..." },
  "metadata": {},
  "direction": "OUTBOUND",
  "rail": "TRP",
  "counterparty_vasp": null,
  "delivery": {
    "kind": "SEND",
    "status": "DELIVERED",
    "rail": "TRP",
    "attempts": 1,
    "last_error": "",
    "next_attempt_at": null,
    "delivered_at": "..."
  },
  "discovery": [ ... ],
  "reason": "",
  "next_actions": []
}
```

`direction`, `rail`, `counterparty_vasp`, `delivery`, `discovery`, `reason` y `next_actions` tienen la misma estructura que en el endpoint de transferencias.
`reason` y `next_actions` indican por qué una transferencia `COUNTERPARTY_VASP_NOT_FOUND` o `COUNTERPARTY_VASP_NOT_REACHABLE` está bloqueada y qué la hace avanzar, y son `""` y `[]` para cualquier otro estado: consulta [Por qué una transferencia está bloqueada](https://docs.didit.me/es/transaction-monitoring/travel-rule.md#por-qué-una-transferencia-está-bloqueada).
Cada fila de [`GET /v3/transactions/`](https://docs.didit.me/es/management-api/transactions/list) incluye el mismo bloque.

Consulta [Travel Rule](https://docs.didit.me/es/transaction-monitoring/travel-rule.md).

### Instantánea de red

El grafo almacenado en sí, no una referencia a él. Procede de cualquiera de estas fuentes:

* un `network_snapshot` que enviaste con la transacción, o
* el grafo que Didit construye cuando el [análisis AML de wallets](https://docs.didit.me/es/transaction-monitoring/aml-screening.md) se completa correctamente para una transacción cripto, aunque la solicitud no incluyera `network_snapshot`. Un grafo construido por el análisis sustituye al enviado, y un nuevo análisis asíncrono lo actualiza.

`null` cuando no existe ninguno de los dos:

```json theme={null}
"network_snapshot": {
  "uuid": "...",
  "nodes": [ ... ],
  "edges": [ ... ],
  "metrics": { }
}
```

La página de detalle de la transacción en la consola muestra el mismo grafo.

### Etiquetas, metadatos, props

* `tags[]`: etiquetas adjuntas (mediante una acción de regla o por un analista): `{ "uuid", "name", "color", "description", "source" }`, donde `source` es `didit` para una etiqueta predefinida y `custom` para una de las tuyas.
* `metadata`: una instantánea de los payloads `subject` y `counterparty` exactamente como los enviaste al crear la transacción, bajo esas dos claves.
* `props`: las `custom_properties` que proporcionaste al crear la transacción. Cada clave se puede referenciar en las condiciones de las reglas como `custom_values.<key>`.

### Remediación

Cuando una regla dispara `AWAITING_USER`, Didit crea la sesión de verificación vinculada y la devuelve en dos campos:

* `remediation`: la sesión vinculada: `{ "session_id", "session_token", "url", "status" }`. Permanece rellenado durante toda la vida de la transacción, para que siempre puedas ver cómo terminó la acción del usuario.
* `action_required`: la acción que el usuario debe realizar en este momento, o `null` cuando no queda nada pendiente: `{ "type": "verification_session", "url", "session_id", "session_token", "status" }`. Redirige al usuario a `url` o pasa `session_token` a un SDK de Didit. Las acciones de propiedad de wallet de Travel Rule usan `{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }` y tienen prioridad cuando ambas podrían aplicarse. Cuando hay una acción de propiedad de wallet pendiente y no se pudo encontrar la contraparte de la transferencia, el mismo bloque incluye también `reason` y `next_actions` (consulta [descubrimiento de la contraparte](https://docs.didit.me/es/transaction-monitoring/travel-rule.md#descubrimiento-de-la-contraparte)).

Los mismos dos campos viajan en los payloads de los webhooks `transaction.created` y `transaction.status.updated` (`action_required`); consulta [webhooks](https://docs.didit.me/es/transaction-monitoring/webhooks.md).

### Desglose de costos

`null` hasta que se ejecuta una función facturable para la transacción. En caso contrario, `{ "total_price", "items": [ { "usage_type", "price", "details" } ] }`, con un elemento por cada función medida (análisis, enriquecimiento, etc.).

## Conversión de divisas

`preferred_currency_amount` es `amount` convertido a la divisa preferida de tu aplicación según el tipo de cambio medio del mercado, salvo que hayas proporcionado `amount_in_default_currency`, en cuyo caso se usa tal cual ese valor ya convertido. Las condiciones de reglas sobre `amount` comparan el importe en su divisa original; usa `preferred_currency_amount` en las condiciones cuando necesites un único umbral para todas las divisas.

## Próximos pasos

> [card] [Enviar transacciones](https://docs.didit.me/es/transaction-monitoring/transactions.md)
>
> Esquema completo de la solicitud.

> [card] [Estados](https://docs.didit.me/es/transaction-monitoring/statuses.md)
>
> Qué significa cada estado.

> [card] [Puntuación de riesgo](https://docs.didit.me/es/transaction-monitoring/risk-scoring.md)
>
> Cómo se calcula la puntuación.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.