> ## Documentation Index
> Fetch the complete documentation index at: https://developer.madhousewallet.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Compliance

> How wallet verification, wallet screening, and sanctions screening protect payouts.

The API applies three compliance checks across recipient management and transfers. Which checks apply depends on how your account is configured.

## KYC wallet verification

If your account requires KYC, the wallet you supply must be a KYC-verified address. Unverified wallets are rejected with `403`. Verify your wallet at [kyc.madhousewallet.com](https://kyc.madhousewallet.com).

The `wallet` field is conditionally required on these endpoints — provide it when KYC is enabled for your account, otherwise you may omit it:

* [`POST`](/api-reference/recipients/create-a-recipient) and [`PATCH`](/api-reference/recipients/update-a-recipient) `/api/payouts/recipients` — `wallet` in the body
* [`DELETE /api/payouts/recipients/{id}`](/api-reference/recipients/delete-a-recipient) — `wallet` as a query parameter
* [`POST /api/payouts/transfer`](/api-reference/payouts/create-a-transfer) and [`POST /api/payouts/transfer/v2`](/api-reference/payouts/create-a-v2-transfer) — `wallet_address` in the body

When provided, a wallet must be a valid EVM (`0x` + 40 hex) or SVM (base58, 32–44 chars) address.

## Wallet screening

Sender wallet addresses are screened against a third-party risk database before a transfer is processed. A wallet that fails screening is rejected with `403`, and no transfer is created.

* **v1 transfers** always screen the sender. Because the screener supports EVM addresses only, `wallet_address` on v1 must be an EVM address — Solana and Tron senders are not accepted.
* **v2 transfers** screen the sender when screening is enabled for your account (the default). When enabled, `wallet_address` is required and must be EVM. When disabled, Solana senders are accepted and the wallet stays KYC-conditional.

<Warning>
  If the screening or verification service is unavailable, requests fail closed with `503`. Retry after a short delay.
</Warning>

## Sanctions screening

When you create or rename a recipient, the `accountHolderName` is screened against a sanctions database. The screen matches on three signals:

* `accountHolderName` — case-folded and accent-stripped exact match
* `details.address.country` — ISO 3166-1 alpha-2 code
* `details.address` — street, city, and postal-code token overlap

A request is rejected with `403` only when all available signals match the same sanctioned entity. When either the sanctioned record or the recipient lacks a country or address, the check falls through to name-only matching so sparse data still catches matches. This keeps false positives low for common names while preserving coverage.
