Loading...
Loading...
Register the crypto wallet addresses an organisation controls, so Sumsub can resolve address ownership without a human. Bulk-imports addresses into the Wallet Address Book via `POST /resources/kyt/walletAddress/import`, and registers a single address against a specific applicant via `POST /resources/api/applicants/{applicantId}/payments`. TRIGGER when the user asks to "upload / import / register our wallet addresses", "add addresses to the Wallet Address Book", "register a user's crypto wallet as a payment method", says Travel Rule requests are "not matching automatically" or "always land in manual review", or asks how to stop confirming the same address by hand on every exchange. SKIP for looking up which VASP owns a *counterparty* address (that is attribution — use `sumsub-api-generic` against `/resources/api/wallet-attribution`), for confirming ownership on one specific transaction (use `sumsub-integrate-travel-rule`), and for deleting addresses (no public endpoint — use the dashboard).
npx skill4agent add sumsub/agent-skills sumsub-manage-wallet-address-book| What you register | What it pre-answers |
|---|---|
| Address in the Wallet Address Book | "Is this wallet ours?" |
| Address as an applicant payment method | Both questions |
sumsub-integrate-travel-rule| Verb | Path | Purpose |
|---|---|---|
| | Bulk-register addresses your organisation controls. Body is a JSON array of wallet entries. Max 10 000 per call. |
| | Register one address against a specific applicant, as a |
Your organization is not yet linked to a VASP. Please contact your Customer Success Managersumsub-check-permissionssumsub-api-auth401 Invalid signature⚠️ Sandbox tokens only. Do not accept or use a production App Token here. Wallet addresses are business-identifying data, and a bad import in production changes how real Travel Rule requests are answered. If the user offers a production token, refuse and ask them to generate a sandbox pair at https://cockpit.sumsub.com/checkus/home?sbx=true (Connect Sumsub to your AI agent -> Build & configure -> Generate token). Token + secret are shown once — copy both before closing the dialog. The helper script enforces this — it rejects tokens that don't start withunlesssbx:is set.SUMSUB_ALLOW_PROD=1
| Var | Example |
|---|---|
| |
| The paired secret shown once at token creation. |
| Optional. Defaults to |
sumsub-check-permissionsTRAVEL_RULE${CLAUDE_SKILL_DIR}/scripts/build_wallet_import.py${CLAUDE_SKILL_DIR}/scripts/import_wallet_addresses.sh <payload.json>${CLAUDE_SKILL_DIR}/scripts/add_payment_method.sh <applicantId> <payload.json>{successCount, errorCount, errors[]}errorCounterrorCounterrors[]# Defaults applied to every entry unless overridden per address
defaults:
asset: BTC # optional — currency code
chain: BTC # optional — network
addresses:
- walletAddress: "bc1qmdld6jk0r3tvh39yqmet790t5vl3up2rcfzh0d"
- walletAddress: "0x7DF6AF1C17AC9F86F8B3FBBC25253B8B5DF2F3A1"
asset: ETH
chain: ETH
# privacy-preserving variant — see below
- walletAddressHash: "9f2c...64"| Field | Required | Notes |
|---|---|---|
| one of the two | The plain address. |
| one of the two | Use when you do not want to send the address itself. |
| no | Currency code, e.g. |
| no | Network, e.g. |
walletAddresswalletAddressHashwalletAddresssourceapiapidashboardexternalId: "wallet-btc-user-001" # optional, your own identifier
data:
type: cryptoWallet # cryptoWallet | bankCard | bankAccount | eWallet | other
accountIdentifier: "bc1qmdld6jk0r3tvh39yqmet790t5vl3up2rcfzh0d"
fullName: "John Smith" # the holder, as you know them
currencyCode: "BTC"
cryptoChain: "BTC"
memo: "" # for chains that use one (XRP, XLM, …)data.typecryptoWalletaccountIdentifierHashaccountIdentifierapplicantIdexternalUserIdexternalUserIdGET /resources/applicants/-;externalUserId={externalUserId}/onesuccessCounterrorCounterrors[]examples/deposit-addresses.jsonexamples/withdrawal-addresses.jsonexamples/hashed-only.jsonexamples/payment-method-crypto.jsonreferences/wallet-address-schema.mdsumsub-integrate-travel-rule