> ## 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 без транзакции

> Проверьте адрес криптокошелька на AML-риски без создания транзакции в Didit. Источник средств, санкционный риск и оценка риска по запросу.

## Когда использовать

Иногда нужно проверить AML-риск криптокошелька **до** того, как появится транзакция для записи. Например, когда клиент добавляет адрес для вывода или когда ваша комплаенс-команда хочет разово проверить адрес. Эндпоинт скрининга кошельков по запросу выполняет скрининг одного адреса и возвращает полный результат оценки риска, не создавая транзакцию.

Это самостоятельный аналог [автоматического криптоскрининга](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md), который выполняется при [отправке транзакции](https://docs.didit.me/ru/transaction-monitoring/transactions.md). Оба варианта используют одних и тех же провайдеров аналитики блокчейна и один и тот же формат результата.

| Сценарий использования | Эндпоинт |
| - | - |
| Предварительная проверка адреса без транзакции для записи | **Скрининг кошельков**: `POST /v3/wallet-screening/` |
| Скрининг кошельков как часть записанного депозита или вывода | [Создание транзакции](https://docs.didit.me/ru/transaction-monitoring/transactions.md) с `currency_kind: "crypto"` |

Скрининг кошельков ничего не записывает в таблицу транзакций. Если результат проверки нужно привязать к отслеживаемой транзакции (с правилами, оповещениями и webhook), отправьте транзакцию.

## Предварительные требования

Мониторинг транзакций должен быть настроен для приложения: либо с управляемым провайдером, либо с [существующим ключом провайдера](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md#поддерживаемые-провайдеры). Настройте его в разделе **Транзакции** > **Настройки** > **Настройки провайдера** в [Business Console](https://business.didit.me). Если провайдер не настроен, эндпоинт возвращает `409 Conflict`.

## Запрос

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

Аутентификация выполняется через заголовок `x-api-key`.

| Поле | Тип | Обязательное | Описание |
| - | - | - | - |
| `wallet_address` | строка | Да | Адрес или идентификатор сети для проверки. Должен соответствовать выбранной сети, например `0x` и 40 шестнадцатеричных символов для сетей EVM, либо идентификатор Lightning, который принимает ваш провайдер. Псевдоним: `address`. |
| `blockchain` | строка | Нет | Идентификатор актива или сети. Если параметр не указан, Didit определяет сеть по формату адреса: адреса `bc1`, `1` и `3` относятся к Bitcoin (`BTC`), адреса с префиксом `T` относятся к Tron (`TRX`), а публичные ключи в формате base58 относятся к Solana (`SOL`). Адрес `0x` допустим в каждой сети EVM, поэтому на него возвращается `422` с `candidate_chains`, проверка не выполняется и не тарифицируется. Повторите запрос, указав сеть. Любой другой формат возвращает `400`. Допустимые значения: `BTC`, `LIGHTNING`, `ETH`, `LTC`, `XRP`, `BCH`, `DOGE`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM`, `HBAR`, `CELO`, `MODE`, `PLUME`, `USDT`, `USDC`. Распространённые названия сетей тоже принимаются, например `POLYGON` или `POL` для `MATIC`, `BSC` для `BNB` и `TRON` для `TRX`. Псевдоним: `currency`. |
| `direction` | строка | Нет | `inbound`, `outbound`, `deposit` или `withdrawal`. Необязательный контекст для провайдера. Для нейтральной проверки до перевода опустите параметр. Он не меняет возвращаемые `risk_score`, `severity` и разбивку по потокам средств (см. примечание в разделе [Ответ](#ответ)). |

### Покрытие сетей

Управляемая проверка поддерживает Base (`BASE`), Optimism (`OP`) и Arbitrum One (`ARB`) как для проверки кошельков, так и для проверки хешей транзакций.
Подключённые провайдеры могут иметь другое покрытие. Сеть также должна поддерживаться выбранным провайдером и вашим аккаунтом.
Celo (`CELO`), Mode (`MODE`) и Plume (`PLUME`) проверяются через подключённый аккаунт TRM Labs (Marketplace, со своим ключом). Управляемая проверка их не охватывает и возвращает `400`.
Не отправляйте `ETH` для другой сети EVM: один и тот же адрес может иметь разную активность и разный риск в каждой сети.

При управляемой проверке `USDT` и `USDC` являются устаревшими псевдонимами для Ethereum, а не поиском во всех сетях, где существуют эти токены.
Для фактической сети кошелька используйте идентификатор сети (`ETH`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM`, `HBAR`, а с TRM Labs также `CELO`, `MODE` или `PLUME`).
Для токенов в записанных транзакциях сохраняйте токен в `transaction_details.currency`, а сеть указывайте отдельно в `transaction_details.crypto_params.crypto_chain`.
См. [выбор актива и сети](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md#выбор-актива-и-сети).

> [!WARNING]
>
> `LIGHTNING` доступен только тогда, когда в консоли, в разделе **Marketplace**, для приложения подключён провайдер BYOK Elliptic или Chainalysis.
> Он недоступен с управляемым провайдером Merkle Science, а также с Crystal или TRM Labs.
> Запросы без поддерживаемого подключённого провайдера возвращают `400` и не проверяются и не тарифицируются.

```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"
  }'
```

## Ответ

Ответ содержит стандартизированный результат скрининга. По структуре он совпадает с результатом провайдера `WALLET_SCREENING`, возвращаемым при скрининге транзакций.

| Поле | Тип | Описание |
| - | - | - |
| `provider` | строка | Провайдер, который проверил адрес (`merklescience`, `crystal`, `chainalysis`, `elliptic`, `trmlabs`). |
| `screening_type` | строка | Всегда `WALLET_SCREENING`. |
| `risk_score` | целое число | Нормализованная оценка риска от 0 до 100. Merkle Science присваивает адресу оценку `0-5`, которая соответствует значениям `0`, `15`, `35`, `55`, `75` или `95`. |
| `severity` | строка | Уровень риска, определяемый по `risk_score` (см. примечание ниже): `UNKNOWN`, `LOW`, `MEDIUM`, `HIGH` или `CRITICAL`. |
| `status` | строка | `SCREENED`, `PENDING` или `ERROR`. |
| `summary` | строка | Краткое описание результата, понятное человеку. |
| `wallet_address` | строка | Проверяемый адрес. |
| `blockchain` | строка | Проверяемый блокчейн. |
| `sanctions_hit` | логическое значение | `true`, если проверенный кошелёк находится под санкциями или если средства кого-либо из его контрагентов поступили от санкционированных сущностей (экспозиция). Поле не различает эти два случая. |
| `pep_counterparty` | логическое значение \| null | Экспозиция PEP, то есть политически значимого лица. Значение `null`, если результат PEP-проверки недоступен. Сейчас это значение возвращается во всех результатах, поскольку ни один провайдер не сообщает данные о PEP. `false` возвращается только при явном отрицательном результате скрининга. Не считайте `null` завершённой проверкой PEP. |
| `dominant_risk_category` | строка \| null | Категория высокого риска с наибольшим весом или `null`. |
| `risk_factors` | массив | Ранжированное объяснение `risk_score`: что привело к этому вердикту. См. [Факторы риска](#факторы-риска). |
| `source_of_funds` | массив | Откуда были получены средства, с разбивкой по сущностям. См. [Разбивка экспозиции](#разбивка-по-экспозиции). |
| `destination_of_funds` | массив | Куда были отправлены средства, по сущностям. Структура записей такая же, как у `source_of_funds`. |
| `counterparty_connections` | массив | Сущности, которым провайдер атрибутирует адрес. См. [Связи с контрагентами](#связи-с-контрагентами). |
| `network_nodes`, `network_edges` | массив | Граф экспозиции для скрининга транзакций. Для результата скрининга кошелька эти поля пустые. |
| `transaction_hash`, `block_timestamp`, `total_value_usd`, `fee_usd`, `transaction_flows_status`, `transaction_flows_error` | null | Поля скрининга транзакций, общие со структурой результата. Для результата скрининга кошелька эти поля всегда `null`. |
| `sender_rows`, `receiver_rows`, `transaction_flows` | массив | Поля скрининга транзакций. Для результата скрининга кошелька эти поля всегда пустые. |
| `raw_response` | объект | Собственный payload провайдера. Его структура зависит от провайдера и может измениться без предупреждения, поэтому используйте нормализованные поля выше и не разбирайте этот ответ самостоятельно. |
| `report_signature` | строка | Непрозрачная подпись результата, действующая в рамках вашего приложения. Чтобы [сформировать PDF](#pdf-отчёт), передайте ответ повторно без изменений, включая это поле. |

> [!NOTE]
>
> **Как задаётся `severity`.** `severity` соответствует диапазону, в который попадает нормализованный `risk_score`: `0-9` → `UNKNOWN`, `10-39` → `LOW`, `40-69` → `MEDIUM`, `70-89` → `HIGH`, `90-100` → `CRITICAL`. `UNKNOWN` — самый низкий диапазон, а не отдельное состояние «нет данных». Значение `risk_score: 0` (типичный случай чистого адреса) означает, что провайдер не вернул негативной оценки. Ненулевой балл в диапазоне `1-9` — реальный сигнал, но ниже уровня `LOW`. Поэтому оценивайте сам `risk_score`, а не только уровень. В любом случае не отображайте `UNKNOWN` как подтверждение отсутствия рисков или как успешное прохождение проверки.
>
> **`direction` не меняет модель риска.** Необязательное поле `direction` передаётся провайдеру только как контекст. Оно не влияет на `risk_score`, `severity` и на то, какие списки разбивки возвращаются: `source_of_funds` и `destination_of_funds` возвращаются всегда. Поэтому изменение или отсутствие `direction` не требует повторного скрининга уже проверенного адреса.

### Факторы риска

`risk_factors` отвечает на вопрос «почему адресу присвоена такая оценка». Провайдеры оценивают адрес по собственной модели и возвращают только вердикт. Merkle Science, например, возвращает целое число `0-5`, поэтому одного `risk_score` недостаточно для принятия решений. Каждая запись называет один фактор. Записи упорядочены: сначала факторы высокого риска, затем по сумме, которая через них прошла.

| Поле | Тип | Описание |
| - | - | - |
| `source` | строка | `attribution` (что провайдер утверждает о самом адресе: его собственная метка или кластер) или `exposure` (откуда и куда фактически перемещались средства). |
| `category` | строка | Нормализованная категория риска, из того же набора, что и в разбивке экспозиции. |
| `label` | строка | Формулировка самого провайдера, например `Gambling / Crypto only`. Используйте её в интерфейсе: она совпадает с тем, что видно в консоли провайдера. |
| `entity_name` | строка \| null | Сущность, которой атрибутирован фактор, например игорный сайт или биржа. В примерах этой страницы используются заглушки, например `Example Gambling`. |
| `direction` | строка | `incoming`, `outgoing`, `connected`, `attribution` (собственная метка адреса) или `unknown`, если провайдер не указал направление. |
| `exposure_type` | строка | `direct` (1 переход), `indirect` (многоступенчатая связь), `attribution` (собственная метка адреса) или `unknown`, если провайдер не указал, сколько переходов отделяет контрагента. Значение `unknown` означает неклассифицированный фактор, его никогда не следует считать `direct`. |
| `amount_usd` | число \| null | Сумма в USD, отнесённая к этому фактору. |
| `percentage` | число | Доля от **всего** проверенного объёма адреса с учётом обоих направлений. В отличие от `percentage` в `source_of_funds` и `destination_of_funds`, которые нормализованы по каждому направлению, это значение можно сравнивать и суммировать по всему списку. |
| `is_high_risk` | логическое значение | Относит ли Didit категорию к высокому риску (`sanctioned`, `mixer`, `stolen_funds`, `ransomware`, `scam`, `darknet_market`, `terrorist_financing`, `child_exploitation`, `hacked_exchange`, `high_risk_exchange`, `seized_funds`). |
| `description` | строка | Краткое однострочное описание фактора, например `9.01% indirect outgoing exposure to Gambling / Crypto only (Example Gambling)`. |

> [!NOTE]
>
> **Высокая оценка без фактора с `is_high_risk` — реальный и значимый результат.** Это означает, что провайдер оценил адрес по собственной модели экспозиции и не зафиксировал совпадений по санкционным спискам, с PEP или с атрибутированными сущностями. Перечисленные факторы — это потоки средств, на которых основана оценка. В `summary` это указано явно. Такие адреса стоит рассматривать как «проверить потоки средств», а не как подтверждённое совпадение. `risk_factors` ограничен пятью наиболее значимыми факторами. `source_of_funds` и `destination_of_funds` всегда содержат полную разбивку.
>
> **`risk_factors` — это поле верхнего уровня, а не вложенное.** Результаты, полученные до появления этого поля, не содержат ключ вовсе: читайте его как пустой список, а не предполагайте пустое объяснение.

### Разбивка по экспозиции

Каждая запись в `source_of_funds` / `destination_of_funds` описывает одну сущность, с которой адрес обменивался средствами:

| Поле | Тип | Описание |
| - | - | - |
| `category` | string | Нормализованная категория риска (`exchange_licensed`, `dex`, `defi`, `mixer`, `sanctioned`, `darknet_market`, `stolen_funds`, …). |
| `entity_name` | string \| null | Атрибутированная сущность, например биржа, миксер или санкционная группа. Примеры на этой странице используют заполнители. |
| `entity_type` | string \| null | Тип сущности у провайдера (`Exchange`, `DeFi`, `Sanctions`). |
| `entity_subtype` | string \| null | Детальный подтип (`Mandatory KYC and AML`, `OFAC`). |
| `description` | string \| null | `entity_type / entity_subtype`, как провайдер называет сущность. |
| `exposure_direction` | string | `incoming`, `outgoing` или `connected`. |
| `exposure_type` | string | `direct` (1 переход) или `indirect` (несколько переходов). |
| `is_direct` | boolean | `true`, если `exposure_type` равен `direct`. |
| `amount_usd` | number \| null | Сумма в USD, отнесённая к сущности. |
| `percentage` | number | Доля от общей экспозиции по этому направлению (0–100). |
| `hops` | integer \| null | Количество переходов до сущности (`1` для прямого контрагента), если провайдер его сообщает. Всегда `null` для Merkle Science, который сообщает только, является ли экспозиция прямой или непрямой: используйте `exposure_type`. |
| `country` | string \| null | Основная страна сущности по ISO 3166-1 alpha-2. Пусто или `null`, если провайдер её не знает. |
| `provider_entity_id`, `provider_entity_type_id`, `provider_entity_subtype_id` | string \| null | Собственные идентификаторы провайдера для сущности и её типа. |
| `raw_amount`, `raw_currency` | number \| null, string \| null | Сумма в собственной единице актива, если провайдер её сообщает. |

### Связи с контрагентами

`counterparty_connections` перечисляет сущности, которые провайдер связывает с проверяемым адресом. Для Merkle Science они берутся из собственных меток владельца и пользователя адреса, поэтому одна и та же сущность может встречаться дважды, и они не содержат потоков средств: `received_usd`, `sent_usd`, `received_hops` и `sent_hops` равны `null`, а `percentage` равен `0.0`. Потоки средств читайте в `source_of_funds` и `destination_of_funds`.

| Поле | Тип | Описание |
| - | - | - |
| `entity_name` | string \| null | Атрибутированная сущность. |
| `entity_type` | string \| null | Тип сущности у провайдера. |
| `entity_subtype` | string \| null | Детальный подтип. |
| `categories` | array | Нормализованные категории риска сущности. |
| `risk_level` | string | В нижнем регистре, зависит от провайдера. Для Merkle Science это собственная оценка риска адреса по шкале 0–5 (`no_risk`, `low`, `medium_low`, `medium`, `high`, `critical`), повышенная до `high`, если категория сущности относится к высокому риску; это не отдельная оценка самой сущности. |
| `is_direct` | boolean | Всегда `true` для Merkle Science, где связи являются атрибуциями, а не контрагентами. |
| `received_usd`, `sent_usd` | number \| null | Сумма в USD, полученная от сущности и отправленная ей, если провайдер её сообщает. |
| `received_hops`, `sent_hops` | integer \| null | Количество переходов до сущности в каждом направлении, если провайдер их сообщает. |
| `percentage` | number | Доля экспозиции адреса, если провайдер её сообщает; иначе `0.0`. |
| `country` | string \| null | Страна сущности, если она известна. |
| `provider_entity_id` | string \| null | Собственный идентификатор сущности у провайдера. |

> [!WARNING]
>
> Не опирайтесь в правилах на `counterparty_connections[].risk_level` или `counterparty_connections[].is_direct`: для Merkle Science первое повторяет собственную оценку адреса (смотрите `risk_score`), а второе всегда `true`. Для вердикта используйте `sanctions_hit`, `dominant_risk_category` и `risk_factors[].is_high_risk`, а для прямоты связи используйте `exposure_type` в `source_of_funds` / `destination_of_funds`.

### Пример

Реальный ответ для адреса из санкционного списка OFAC, проверенного через Merkle Science. Сокращён только `raw_response`, а `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>"
}
```

Примеры иллюстрируют структуру ответа, а не гарантированный вердикт для реального адреса.
Оценки риска и санкционная экспозиция зависят от выбранной сети, актуальных данных и настроенной политики риска.
Отнесение к бирже не означает нулевую оценку риска: кошелёк биржи может иметь санкционную экспозицию через свои потоки средств.
`sanctions_hit: true` может означать, что сам кошелёк находится под санкциями, или только то, что его средства имеют санкционную экспозицию, поэтому само по себе это не означает, что владелец проверяемого кошелька находится под санкциями.
Когда тот же скрининг выполняется для зарегистрированной транзакции, правила также могут читать `custom_values.wallet_sanctioned`, которое равно `true` только в том случае, если провайдер связывает сам кошелёк с сущностью, находящейся под санкциями, и `custom_values.aml_sanctions_exposure_pct`.
См. [Поля скрининга для правил](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md#поля-скрининга-для-правил).
Чтобы отличить атрибуцию от экспозиции, читайте `risk_factors`, `source_of_funds` и `destination_of_funds`.
Пошаговое руководство см. в разделе [Скрининг криптовалют и кошельков](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md#результаты-скрининга).

## PDF-отчёт

Чтобы получить PDF-отчёт с брендингом Didit по результату скрининга, повторно отправьте точное тело ответа, включая `report_signature`, на `POST /v3/wallet-screening/pdf/`. Это запрос без сохранения состояния: вызова провайдера нет, дополнительная оплата не взимается, ничего не сохраняется. Изменение любого подписанного поля (`risk_score`, `severity`, `sanctions_hit`, …) перед повторной отправкой приводит к ошибке `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
```

Полную схему запроса и ответа, а также форматы ошибок см. в разделе [PDF-отчёт по скринингу кошелька](https://docs.didit.me/ru/management-api/transactions/screen-wallet-pdf.md).

## Биллинг

За каждый успешный скрининг AML-мониторинга тарифицируется одна операция, по той же ставке, что и скрининг криптовалют, связанный с транзакцией. Подробнее о ставках для управляемых ключей и подключённых ключей см. в разделе [цены](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md#поддерживаемые-провайдеры). Приложения в песочнице не тарифицируются. Ошибки валидации (`400`) и ошибки ненастроенного провайдера (`409`) никогда не тарифицируются.

## Ошибки

| Статус | Значение |
| - | - |
| `400` | Некорректный адрес кошелька, отсутствующее поле `wallet_address` или неподдерживаемый `blockchain`. |
| `401` | Отсутствующий или недействительный `x-api-key`. |
| `409` | Для приложения не настроен AML-провайдер. Сначала настройте мониторинг транзакций. |
| `409` | Провайдер отклонил подключённый вами API-ключ (`wallet_screening_provider_credentials_rejected`). Обновите ключ в подключении Marketplace или в настройках мониторинга транзакций, если ключ настроен там. Повторная попытка с тем же ключом не поможет. |
| `409` | Настроенный AML-провайдер пока не поддерживает скрининг кошельков (`wallet_screening_provider_unavailable`). |
| `422` | Отправлен адрес, начинающийся с `0x`, без параметра `blockchain` (`wallet_screening_chain_undetermined`). В теле ответа есть `candidate_chains`. Отправьте запрос повторно с одним из них. Скрининг не выполняется и не тарифицируется. |
| `502` | Провайдер не смог выполнить скрининг. Повторите попытку позже. |

## Следующие шаги

> [card] [Справочник API](https://docs.didit.me/ru/management-api/transactions/screen-wallet.md)
>
> Полная схема запроса и ответа для endpoint Screen Wallet.

> [card] [PDF-отчёт Screen Wallet](https://docs.didit.me/ru/management-api/transactions/screen-wallet-pdf.md)
>
> Визуализация результата скрининга в виде PDF с брендингом Didit.

> [card] [Скрининг криптовалют и кошельков](https://docs.didit.me/ru/transaction-monitoring/aml-screening.md)
>
> Автоматический скрининг при создании транзакции и модель результата.


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