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

# API de análisis de wallets bajo demanda: sin transacción

> Didit analiza el riesgo AML de una wallet cripto sin crear una transacción: origen de los fondos, exposición a sanciones y puntuación de riesgo.

A veces necesitas comprobar el riesgo AML de una wallet de criptomonedas **antes** de que exista una transacción que registrar, por ejemplo, cuando un cliente añade una dirección de retiro o cuando tu equipo de cumplimiento quiere revisar una dirección de forma puntual. El endpoint de análisis de wallets bajo demanda analiza una sola dirección y devuelve el resultado de riesgo completo sin crear una transacción.

Es la versión independiente del [análisis automático de criptomonedas](https://docs.didit.me/es/transaction-monitoring/aml-screening.md) que se ejecuta durante el [envío de transacciones](https://docs.didit.me/es/transaction-monitoring/transactions.md). Ambos usan los mismos proveedores de análisis de blockchain y la misma estructura del resultado.

## Cuándo usarlo

| Caso de uso | Endpoint |
| - | - |
| Comprobar previamente una dirección sin transacción que registrar | **Wallet screening**: `POST /v3/wallet-screening/` |
| Analizar una wallet como parte de un depósito o retiro registrado | [Crear transacción](https://docs.didit.me/es/transaction-monitoring/transactions.md) con `currency_kind: "crypto"` |

El análisis de wallets no escribe nada en la tabla de transacciones. Si necesitas que el análisis quede asociado a una transacción monitorizada (con reglas, alertas y webhooks), envía una transacción.

## Requisitos previos

La monitorización de transacciones debe estar configurada para la aplicación con un proveedor gestionado o con una [clave de proveedor existente](https://docs.didit.me/es/transaction-monitoring/aml-screening.md#proveedores-compatibles). Configúrala en **Transacciones** > **Configuración** > **Provider Preferences** en la [Business Console](https://business.didit.me). Si no hay ningún proveedor configurado, el endpoint devuelve `409 Conflict`.

## Solicitud

`POST https://verification.didit.me/v3/wallet-screening/`

Autentícate con el encabezado `x-api-key`.

| Campo | Tipo | Obligatorio | Descripción |
| - | - | - | - |
| `wallet_address` | string | Sí | La dirección o el identificador de red que se va a analizar. Debe corresponder a la red elegida, por ejemplo `0x` + 40 caracteres hexadecimales para cadenas EVM o un identificador de Lightning que acepte tu proveedor. Alias: `address`. |
| `blockchain` | string | No | Identificador del activo o de la red. Si se omite, Didit deduce la red a partir del formato de la dirección: las direcciones `bc1`, `1` y `3` son de Bitcoin (`BTC`), las direcciones `T` son de Tron (`TRX`) y las claves públicas en base58 son de Solana (`SOL`). Una dirección `0x` es válida en todas las redes EVM, así que responde `422` con `candidate_chains` y no se analiza ni se cobra nada; vuelve a enviarla indicando la red. Cualquier otro formato responde `400`. Valores aceptados: `BTC`, `LIGHTNING`, `ETH`, `LTC`, `XRP`, `BCH`, `DOGE`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM`, `HBAR`, `CELO`, `MODE`, `PLUME`, `USDT`, `USDC`. También se aceptan los nombres de red habituales, por ejemplo `POLYGON` o `POL` para `MATIC`, `BSC` para `BNB` y `TRON` para `TRX`. Alias: `currency`. |
| `direction` | string | No | `inbound`, `outbound`, `deposit` o `withdrawal`. Contexto opcional para el proveedor; omítelo para un análisis neutro previo a la transferencia. No cambia el `risk_score`, la `severity` ni los desgloses del flujo de fondos que se devuelven (consulta la nota en [Respuesta](#respuesta)). |

### Cobertura de cadenas

El análisis gestionado admite Base (`BASE`), Optimism (`OP`) y Arbitrum One (`ARB`) tanto para el análisis de wallets como para el de hashes de transacción.
Los proveedores conectados pueden tener una cobertura distinta; además, la cadena debe ser compatible con el proveedor y la cuenta que hayas seleccionado.
Celo (`CELO`), Mode (`MODE`) y Plume (`PLUME`) se analizan a través de una cuenta de TRM Labs conectada (Marketplace, con tu propia clave); el análisis gestionado no las cubre y responde `400`.
No envíes `ETH` para otra red EVM: la misma dirección puede tener actividad y riesgo distintos en cada cadena.

Con el análisis gestionado, `USDT` y `USDC` son alias heredados de Ethereum, no una búsqueda en todas las redes donde existen esos tokens.
Usa el identificador de red (`ETH`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM`, `HBAR` o, con TRM Labs, `CELO`, `MODE` o `PLUME`) correspondiente a la cadena real de la wallet.
Para los tokens de transacciones registradas, mantén el token en `transaction_details.currency` e indica la red por separado en `transaction_details.crypto_params.crypto_chain`.
Consulta [selección de activo y red](https://docs.didit.me/es/transaction-monitoring/aml-screening.md#selección-del-activo-y-la-red).

> [!WARNING]
>
> `LIGHTNING` solo está disponible cuando la aplicación tiene conectado un proveedor BYOK de Elliptic o Chainalysis en el **Marketplace** de la consola.
> No está disponible con Merkle Science gestionado ni con Crystal o TRM Labs.
> Las solicitudes sin un proveedor conectado compatible devuelven `400` y no se analizan ni se cobran.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/wallet-screening/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
    "blockchain": "ETH"
  }'
```

## Respuesta

La respuesta es el resultado de análisis estandarizado, con la misma estructura que el resultado del proveedor `WALLET_SCREENING` que devuelve el análisis de transacciones.

| Campo | Tipo | Descripción |
| - | - | - |
| `provider` | string | Proveedor que analizó la dirección (`merklescience`, `crystal`, `chainalysis`, `elliptic`, `trmlabs`). |
| `screening_type` | string | Siempre `WALLET_SCREENING`. |
| `risk_score` | integer | Puntuación de riesgo normalizada de 0 a 100. Merkle Science califica una dirección de `0-5`, que se convierte en `0`, `15`, `35`, `55`, `75` o `95`. |
| `severity` | string | Franja de riesgo derivada de `risk_score` (consulta la nota más abajo): `UNKNOWN`, `LOW`, `MEDIUM`, `HIGH` o `CRITICAL`. |
| `status` | string | `SCREENED`, `PENDING` o `ERROR`. |
| `summary` | string | Resumen legible para personas. |
| `wallet_address` | string | La dirección analizada. |
| `blockchain` | string | La cadena analizada. |
| `sanctions_hit` | boolean | `true` cuando la wallet analizada está sancionada, o cuando los fondos de alguna de sus contrapartes provienen de entidades sancionadas (exposición). No distingue entre ambos casos. |
| `pep_counterparty` | boolean \| null | Exposición a personas expuestas políticamente. `null` cuando no hay ningún hallazgo PEP disponible, lo que ocurre hoy en todos los resultados porque ningún proveedor lo informa; `false` solo ante un resultado de análisis negativo explícito. No interpretes `null` como una comprobación PEP completada. |
| `dominant_risk_category` | string \| null | Categoría de alto riesgo con mayor peso, o `null`. |
| `risk_factors` | array | Explicación ordenada de `risk_score`: qué produjo este veredicto. Consulta [Factores de riesgo](#factores-de-riesgo). |
| `source_of_funds` | array | De dónde se recibieron los fondos, por entidad. Consulta [Desglose de la exposición](#desglose-de-la-exposición). |
| `destination_of_funds` | array | A dónde se enviaron los fondos, por entidad. La misma estructura que `source_of_funds`. |
| `counterparty_connections` | array | Entidades a las que el proveedor atribuye la dirección. Consulta [Conexiones con contrapartes](#conexiones-con-contrapartes). |
| `network_nodes`, `network_edges` | array | Grafo de la exposición para el análisis de transacciones. Vacío en un resultado de análisis de wallets. |
| `transaction_hash`, `block_timestamp`, `total_value_usd`, `fee_usd`, `transaction_flows_status`, `transaction_flows_error` | null | Campos del análisis de transacciones, compartidos con la estructura del resultado. Siempre `null` en un resultado de análisis de wallets. |
| `sender_rows`, `receiver_rows`, `transaction_flows` | array | Campos del análisis de transacciones. Siempre vacíos en un resultado de análisis de wallets. |
| `raw_response` | object | El payload propio del proveedor. Su estructura depende de cada proveedor y puede cambiar sin previo aviso: lee los campos normalizados anteriores en lugar de procesarlo. |
| `report_signature` | string | Firma opaca sobre este resultado, vinculada a tu aplicación. Vuelve a enviar la respuesta sin modificar, incluido este campo, para [generarla como PDF](#informe-pdf). |

> [!NOTE]
>
> **Cómo se establece `severity`.** `severity` es la franja de la `risk_score` normalizada: `0-9` → `UNKNOWN`, `10-39` → `LOW`, `40-69` → `MEDIUM`, `70-89` → `HIGH`, `90-100` → `CRITICAL`. `UNKNOWN` es la franja más baja, no un estado aparte de "sin datos": `risk_score: 0` (el caso habitual de una dirección limpia) significa que el proveedor no devolvió ninguna evaluación adversa, mientras que una puntuación distinta de cero en el rango `1-9` es una señal real pero inferior a `LOW`, así que lee la propia `risk_score` y no solo la franja. En cualquier caso, no muestres `UNKNOWN` como un resultado afirmativo de "limpio" ni como aprobado.
>
> **`direction` no cambia el modelo de riesgo.** El campo opcional `direction` se envía al proveedor solo como contexto. No afecta a `risk_score`, a `severity` ni a qué listas de desglose se devuelven: tanto `source_of_funds` como `destination_of_funds` se devuelven siempre. Por lo tanto, cambiar u omitir `direction` no obliga a volver a analizar una dirección ya analizada.

### Factores de riesgo

`risk_factors` es la respuesta ordenada a "por qué esta dirección tiene esta puntuación". Los proveedores califican una dirección con su propio modelo y devuelven solo un veredicto (Merkle Science devuelve un entero de `0-5`), así que `risk_score` por sí sola no permite actuar. Cada entrada nombra un factor determinante. Se ordenan primero por riesgo alto y luego por el valor que circuló a través de cada uno.

| Campo | Tipo | Descripción |
| - | - | - |
| `source` | string | `attribution` (lo que el proveedor dice que *es* la dirección: su propia etiqueta o clúster) o `exposure` (por dónde circularon realmente sus fondos). |
| `category` | string | Categoría de riesgo normalizada, con el mismo vocabulario que el desglose de la exposición. |
| `label` | string | La redacción propia del proveedor, p. ej., `Gambling / Crypto only`. Úsala en una interfaz: coincide con lo que verías en la consola del proveedor. |
| `entity_name` | string \| null | Entidad atribuida, por ejemplo un sitio de apuestas o un exchange. Los ejemplos de esta página usan marcadores de posición como `Example Gambling`. |
| `direction` | string | `incoming`, `outgoing`, `connected`, `attribution` (la propia etiqueta de la dirección) o `unknown` cuando el proveedor no informó de una dirección de flujo. |
| `exposure_type` | string | `direct` (1 salto), `indirect` (varios saltos), `attribution` (la propia etiqueta de la dirección) o `unknown` cuando el proveedor no indicó a cuántos saltos está la contraparte. Trata `unknown` como no clasificado, nunca como `direct`. |
| `amount_usd` | number \| null | Valor en USD atribuido a este factor. |
| `percentage` | number | Proporción del volumen analizado **total** de la dirección, sumando ambas direcciones, a diferencia de `percentage` dentro de `source_of_funds` / `destination_of_funds`, que se normaliza por dirección. Es comparable y sumable en toda la lista. |
| `is_high_risk` | boolean | Si la categoría es una de las que Didit considera de alto riesgo (`sanctioned`, `mixer`, `stolen_funds`, `ransomware`, `scam`, `darknet_market`, `terrorist_financing`, `child_exploitation`, `hacked_exchange`, `high_risk_exchange`, `seized_funds`). |
| `description` | string | Descripción en una línea del factor, p. ej., `9.01% indirect outgoing exposure to Gambling / Crypto only (Example Gambling)`. |

> [!NOTE]
>
> **Una puntuación alta sin ningún factor `is_high_risk` es un resultado real y significativo.** Significa que el proveedor calificó la dirección con su propio modelo de exposición sin informar de una coincidencia con sanciones, PEP o una entidad atribuida: los factores que *sí* aparecen son los flujos de fondos que explican la calificación. `summary` lo indica explícitamente, así que trata estas direcciones como "revisar los flujos", no como una coincidencia confirmada. `risk_factors` se limita a los cinco factores determinantes más fuertes; `source_of_funds` y `destination_of_funds` siempre contienen el desglose completo.
>
> **`risk_factors` es un campo de nivel superior, no un campo anidado.** Los resultados analizados antes de que existiera omiten la clave por completo: interprétala como una lista vacía en lugar de suponer que la explicación está vacía.

### Desglose de la exposición

Cada entrada de `source_of_funds` / `destination_of_funds` describe una entidad con la que la dirección intercambió fondos:

| Campo | Tipo | Descripción |
| - | - | - |
| `category` | string | Categoría de riesgo normalizada (`exchange_licensed`, `dex`, `defi`, `mixer`, `sanctioned`, `darknet_market`, `stolen_funds`, …). |
| `entity_name` | string \| null | Entidad atribuida, por ejemplo un exchange, un mixer o un grupo sancionado. Los ejemplos de esta página usan valores de ejemplo. |
| `entity_type` | string \| null | Tipo de entidad del proveedor (`Exchange`, `DeFi`, `Sanctions`). |
| `entity_subtype` | string \| null | Subtipo detallado (`Mandatory KYC and AML`, `OFAC`). |
| `description` | string \| null | `entity_type / entity_subtype`, tal como el proveedor etiqueta la entidad. |
| `exposure_direction` | string | `incoming`, `outgoing` o `connected`. |
| `exposure_type` | string | `direct` (1 salto) o `indirect` (varios saltos). |
| `is_direct` | boolean | `true` cuando `exposure_type` es `direct`. |
| `amount_usd` | number \| null | Valor en USD atribuido a la entidad. |
| `percentage` | number | Proporción de la exposición total en esa dirección (0–100). |
| `hops` | integer \| null | Número de saltos hasta la entidad (`1` para una contraparte directa), cuando el proveedor lo informa. Siempre es `null` con Merkle Science, que solo informa si la exposición es directa o indirecta: usa `exposure_type`. |
| `country` | string \| null | País principal de la entidad en formato ISO 3166-1 alfa-2. Vacío o `null` cuando el proveedor no lo conoce. |
| `provider_entity_id`, `provider_entity_type_id`, `provider_entity_subtype_id` | string \| null | Identificadores propios del proveedor para la entidad y su tipo. |
| `raw_amount`, `raw_currency` | number \| null, string \| null | Importe en la unidad propia del activo, cuando el proveedor lo informa. |

### Conexiones con contrapartes

`counterparty_connections` enumera las entidades a las que el proveedor atribuye la dirección analizada. Con Merkle Science, provienen de las etiquetas de propietario y de usuario de la propia dirección, por lo que la misma entidad puede aparecer dos veces, y no incluyen flujos de fondos: `received_usd`, `sent_usd`, `received_hops` y `sent_hops` son `null`, y `percentage` es `0.0`. Consulta los flujos de fondos en `source_of_funds` y `destination_of_funds`.

| Campo | Tipo | Descripción |
| - | - | - |
| `entity_name` | string \| null | Entidad atribuida. |
| `entity_type` | string \| null | Tipo de entidad del proveedor. |
| `entity_subtype` | string \| null | Subtipo detallado. |
| `categories` | array | Categorías de riesgo normalizadas de la entidad. |
| `risk_level` | string | En minúsculas, depende del proveedor. Con Merkle Science es la calificación de riesgo de 0 a 5 de la propia dirección (`no_risk`, `low`, `medium_low`, `medium`, `high`, `critical`), elevada a `high` cuando la categoría de la entidad es de alto riesgo; no es una calificación independiente de la entidad. |
| `is_direct` | boolean | Siempre `true` con Merkle Science, cuyas conexiones son atribuciones y no contrapartes. |
| `received_usd`, `sent_usd` | number \| null | USD recibidos de la entidad y enviados a ella, cuando el proveedor lo informa. |
| `received_hops`, `sent_hops` | integer \| null | Saltos hasta la entidad en cada sentido, cuando el proveedor los informa. |
| `percentage` | number | Proporción de la exposición de la dirección, cuando el proveedor la informa; de lo contrario, `0.0`. |
| `country` | string \| null | País de la entidad, cuando se conoce. |
| `provider_entity_id` | string \| null | Identificador propio del proveedor para la entidad. |

> [!WARNING]
>
> No tomes decisiones de enrutamiento basándote en `counterparty_connections[].risk_level` ni en `counterparty_connections[].is_direct`: con Merkle Science, el primero repite la calificación de la propia dirección (consulta `risk_score`) y el segundo siempre es `true`. Usa `sanctions_hit`, `dominant_risk_category` y `risk_factors[].is_high_risk` para el veredicto, y `exposure_type` en `source_of_funds` / `destination_of_funds` para saber si la exposición es directa.

### Ejemplo

Una respuesta real para una dirección incluida en la lista de sanciones de la OFAC, analizada con Merkle Science. Solo se ha acortado `raw_response` y se ha sustituido `report_signature`:

```json theme={null}
{
  "provider": "merklescience",
  "screening_type": "WALLET_SCREENING",
  "risk_score": 95,
  "severity": "CRITICAL",
  "status": "SCREENED",
  "summary": "Merkle Science risk: Critical (5/5). SANCTIONS HIT. Dominant risk: sanctioned. Driven by: the address is attributed to Sanctions / OFAC (Example Sanctions)",
  "wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
  "transaction_hash": null,
  "blockchain": "ETH",
  "block_timestamp": null,
  "total_value_usd": null,
  "fee_usd": null,
  "sender_rows": [],
  "receiver_rows": [],
  "transaction_flows": [],
  "transaction_flows_status": null,
  "transaction_flows_error": null,
  "source_of_funds": [
    {
      "category": "sanctioned",
      "percentage": 100.0,
      "amount_usd": 9813695.0,
      "entity_name": "Example Sanctions",
      "entity_type": "Sanctions",
      "entity_subtype": "OFAC",
      "hops": null,
      "description": "Sanctions / OFAC",
      "is_direct": true,
      "exposure_direction": "incoming",
      "exposure_type": "direct",
      "provider_entity_id": "118885",
      "provider_entity_type_id": "30",
      "provider_entity_subtype_id": "125",
      "country": "",
      "raw_amount": null,
      "raw_currency": null
    }
  ],
  "destination_of_funds": [
    {
      "category": "defi",
      "percentage": 84.824453,
      "amount_usd": 7783414.38,
      "entity_name": "Example DeFi 7",
      "entity_type": "DeFi",
      "entity_subtype": "Bridges",
      "hops": null,
      "description": "DeFi / Bridges",
      "is_direct": false,
      "exposure_direction": "outgoing",
      "exposure_type": "indirect",
      "provider_entity_id": "118459",
      "provider_entity_type_id": "33",
      "provider_entity_subtype_id": "143",
      "country": "",
      "raw_amount": null,
      "raw_currency": null
    },
    {
      "category": "defi",
      "percentage": 15.175547,
      "amount_usd": 1392494.37,
      "entity_name": "Example DeFi 2",
      "entity_type": "DeFi",
      "entity_subtype": "Yield Aggregator",
      "hops": null,
      "description": "DeFi / Yield Aggregator",
      "is_direct": false,
      "exposure_direction": "outgoing",
      "exposure_type": "indirect",
      "provider_entity_id": "90192",
      "provider_entity_type_id": "33",
      "provider_entity_subtype_id": "142",
      "country": "",
      "raw_amount": null,
      "raw_currency": null
    }
  ],
  "counterparty_connections": [
    {
      "entity_name": "Example Sanctions",
      "entity_type": "Sanctions",
      "entity_subtype": "OFAC",
      "risk_level": "critical",
      "categories": [
        "sanctioned"
      ],
      "received_usd": null,
      "sent_usd": null,
      "received_hops": null,
      "sent_hops": null,
      "percentage": 0.0,
      "is_direct": true,
      "country": null,
      "provider_entity_id": null
    },
    {
      "entity_name": "Example Sanctions",
      "entity_type": "Sanctions",
      "entity_subtype": "OFAC",
      "risk_level": "critical",
      "categories": [
        "sanctioned"
      ],
      "received_usd": null,
      "sent_usd": null,
      "received_hops": null,
      "sent_hops": null,
      "percentage": 0.0,
      "is_direct": true,
      "country": null,
      "provider_entity_id": null
    }
  ],
  "network_nodes": [],
  "network_edges": [],
  "sanctions_hit": true,
  "pep_counterparty": null,
  "dominant_risk_category": "sanctioned",
  "risk_factors": [
    {
      "source": "attribution",
      "category": "sanctioned",
      "label": "Sanctions / OFAC",
      "entity_name": "Example Sanctions",
      "direction": "attribution",
      "exposure_type": "attribution",
      "amount_usd": null,
      "percentage": 0.0,
      "is_high_risk": true,
      "description": "the address is attributed to Sanctions / OFAC (Example Sanctions)"
    },
    {
      "source": "exposure",
      "category": "sanctioned",
      "label": "Sanctions / OFAC",
      "entity_name": "Example Sanctions",
      "direction": "incoming",
      "exposure_type": "direct",
      "amount_usd": 9813695.0,
      "percentage": 51.679304,
      "is_high_risk": true,
      "description": "51.6793% direct incoming exposure to Sanctions / OFAC (Example Sanctions)"
    },
    {
      "source": "exposure",
      "category": "defi",
      "label": "DeFi / Bridges",
      "entity_name": "Example DeFi 7",
      "direction": "outgoing",
      "exposure_type": "indirect",
      "amount_usd": 7783414.38,
      "percentage": 40.987766,
      "is_high_risk": false,
      "description": "40.9878% indirect outgoing exposure to DeFi / Bridges (Example DeFi 7)"
    },
    {
      "source": "exposure",
      "category": "defi",
      "label": "DeFi / Yield Aggregator",
      "entity_name": "Example DeFi 2",
      "direction": "outgoing",
      "exposure_type": "indirect",
      "amount_usd": 1392494.37,
      "percentage": 7.33293,
      "is_high_risk": false,
      "description": "7.33293% indirect outgoing exposure to DeFi / Yield Aggregator (Example DeFi 2)"
    }
  ],
  "raw_response": {
    "...": "provider-specific details"
  },
  "report_signature": "<hmac-sha256 over the result, scoped to your application>"
}
```

Los ejemplos ilustran la estructura de la respuesta, no un veredicto garantizado para una dirección real.
Las puntuaciones de riesgo y la exposición a sanciones dependen de la red seleccionada, de la información de inteligencia vigente y de la política de riesgo configurada.
Que una dirección se atribuya a un exchange no implica una puntuación de riesgo de cero: una wallet de un exchange puede tener exposición a sanciones a través de sus flujos de fondos.
`sanctions_hit: true` puede indicar que la propia wallet está sancionada o solo que sus fondos tienen exposición a sanciones, por lo que, por sí solo, no significa que el titular de la wallet analizada esté sancionado.
Cuando el mismo análisis se ejecuta sobre una transacción registrada, las reglas también pueden leer `custom_values.wallet_sanctioned`, que es `true` solo cuando el proveedor atribuye la propia wallet a una entidad sancionada, y `custom_values.aml_sanctions_exposure_pct`.
Consulta [Campos de análisis para reglas](https://docs.didit.me/es/transaction-monitoring/aml-screening.md#campos-del-análisis-para-reglas).
Lee `risk_factors`, `source_of_funds` y `destination_of_funds` para distinguir la atribución de la exposición.
Consulta [Análisis de criptomonedas y wallets](https://docs.didit.me/es/transaction-monitoring/aml-screening.md#resultados-del-análisis) para ver un recorrido paso a paso.

## Informe PDF

Para obtener un PDF con la marca de Didit de un resultado de análisis, vuelve a enviar el cuerpo exacto de la respuesta (incluido `report_signature`) a `POST /v3/wallet-screening/pdf/`. Es una operación sin estado: no se llama al proveedor, no se factura nada adicional y no se guarda nada. Si modificas cualquier campo firmado (`risk_score`, `severity`, `sanctions_hit`, …) antes de volver a enviarlo, la solicitud falla con `400`.

```bash theme={null}
RESULT=$(curl -s -X POST https://verification.didit.me/v3/wallet-screening/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a", "blockchain": "ETH"}')

curl -X POST https://verification.didit.me/v3/wallet-screening/pdf/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$RESULT" \
  -o wallet_screening_report.pdf
```

Consulta [PDF del análisis de wallets](https://docs.didit.me/es/management-api/transactions/screen-wallet-pdf.md) para ver el esquema completo de la solicitud y la respuesta, y la estructura de los errores.

## Facturación

Cada análisis completado con éxito se factura como un uso de monitorización AML, a la misma tarifa que el análisis cripto vinculado a transacciones. Consulta los [precios](https://docs.didit.me/es/transaction-monitoring/aml-screening.md#proveedores-compatibles) para ver las tarifas gestionadas y las de clave conectada. Las aplicaciones de sandbox no se facturan. Los errores de validación (`400`) y los errores por proveedor no configurado (`409`) nunca se facturan.

## Errores

| Estado | Significado |
| - | - |
| `400` | Dirección mal formada, falta `wallet_address` o `blockchain` no es compatible. |
| `401` | Falta `x-api-key` o no es válida. |
| `409` | La aplicación no tiene ningún proveedor AML configurado: configura primero la monitorización de transacciones. |
| `409` | El proveedor rechazó la clave de API que conectaste (`wallet_screening_provider_credentials_rejected`): actualiza la clave en la conexión de Marketplace o en la configuración de monitorización de transacciones, si la clave se configuró allí. Reintentar con la misma clave no sirve. |
| `409` | El proveedor AML configurado todavía no admite el análisis de wallets (`wallet_screening_provider_unavailable`). |
| `422` | Se envió una dirección `0x` sin `blockchain` (`wallet_screening_chain_undetermined`). El cuerpo incluye `candidate_chains`; vuelve a enviar la solicitud con una de ellas. No se analiza ni se factura nada. |
| `502` | El proveedor no pudo completar el análisis; reinténtalo más tarde. |

## Próximos pasos

> [card] [Referencia de la API](https://docs.didit.me/es/management-api/transactions/screen-wallet.md)
>
> Esquema completo de la solicitud y la respuesta del endpoint Screen Wallet.

> [card] [PDF de Screen Wallet](https://docs.didit.me/es/management-api/transactions/screen-wallet-pdf.md)
>
> Genera un PDF con la marca de Didit a partir del resultado de un análisis.

> [card] [Análisis de criptomonedas y wallets](https://docs.didit.me/es/transaction-monitoring/aml-screening.md)
>
> Análisis automático al crear transacciones y modelo de resultados.


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