sumsub/agent-skills

sumsub-manage-wallet-address-book

Register the crypto wallet addresses an organisation controls, so Sumsub can resolve address ownership without a human.

소스 보기

사용 방법

  1. 설치 명령을 복사하고 자신의 에이전트 환경에 설치하기 전에 소스 패키지를 확인하세요.
  2. 필요한 도구, 인증 정보, 지원 환경은 원본 문서에서 확인하세요.
  3. 입력과 원하는 산출물을 설명하고 출처와 결과를 대조하세요.
npx skills add https://github.com/sumsub/agent-skills --skill sumsub-manage-wallet-address-book

시작 전 확인

  • 설치에는 모델 구독, API 한도, 파일 접근 권한이 포함되지 않습니다.
  • 별점 수와 설치 수는 활동 지표이며 독립적인 품질·보안 검증이 아닙니다.
원본 Skill 문서

원본 저장소의 제목, 예시, 코드, 표, 링크, 이미지를 유지해 표시합니다.

Sumsub — Wallet Address Book

Tells Sumsub which crypto addresses belong to your organisation, and which of your users each one belongs to. This is the data that turns Travel Rule answering from a manual queue into an automatic one.

Why this matters more than it looks

When another VASP starts a Travel Rule exchange that involves one of your users, Sumsub asks you two questions: is this wallet yours? and whose is it? Both can be answered from stored data instead of by a person — but only if the address is already registered.

What you registerWhat it pre-answers
Address in the Wallet Address Book"Is this wallet ours?"
Address as an applicant payment methodBoth questions

Anything not registered falls to manual handling, and manual handling does not survive volume — counterparties can set the confirmation window to seconds. The mechanics of how a pre-answered request arrives, and which flags to read, belong to `sumsub-integrate-travel-rule`; this skill is only about getting the data in.

🚧 The most common mistake is uploading only deposit addresses. Exchanges created after settlement ask about the address the funds were sent from — i.e. an address your users withdraw from. If the book holds only addresses you receive on, that whole class of request silently falls to manual review. Ask the user explicitly whether their export covers both directions.

Endpoints

VerbPathPurpose
POST/resources/kyt/walletAddress/importBulk-register addresses your organisation controls. Body is a JSON array of wallet entries. Max 10 000 per call.
POST/resources/api/applicants/{applicantId}/paymentsRegister one address against a specific applicant, as a cryptoWallet payment method.

There is no public list, update or delete endpoint for the Wallet Address Book. To review or remove entries, send the user to the dashboard (Transactions and travel rule → Wallet address book).

Two preconditions that produce confusing errors

  • The organisation must be linked to a VASP. The import resolves your VASP

from the token's client id and fails with Your organization is not yet linked to a VASP. Please contact your Customer Success Manager (HTTP 404) if there is none. This is not a permissions problem and retrying will not help — relay the message and stop.

  • Travel Rule entitlement is required on the tenant. Check with

`sumsub-check-permissions` before building a payload and report the gap rather than letting the call 403.

  • The import endpoint additionally requires the admin role on the token

subject. A scoped agent token may not have it — if you get a 403 while the entitlement check passed, this is why; the user has to run the import from a token with admin rights or from the dashboard.

Auth — App Token + secret (sandbox only)

This skill talks to the public Sumsub API and signs each request per the authentication reference. The full how-it-works writeup lives in the `sumsub-api-auth` skill — read it if you hit 401 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 with sbx: unless SUMSUB_ALLOW_PROD=1 is set.
VarExample
SUMSUB_APP_TOKENsbx:... — sandbox App Token from the dashboard.
SUMSUB_SECRET_KEYThe paired secret shown once at token creation.
SUMSUB_BASEOptional. Defaults to https://api.sumsub.com.

If the user has already supplied credentials in conversation, reuse them; otherwise ask once before running. Never echo the secret back.

Procedure

  1. Establish which addresses the user is registering and, critically, in

which direction they are used. If they say "our wallets" without qualification, ask whether the list includes withdrawal addresses.

  1. Decide which endpoint fits.
  • Many addresses, ownership at organisation level → import.
  • One address that belongs to a known applicant → payment method. Prefer

this whenever the applicant is known; it pre-answers both questions instead of one.

  1. Check entitlements with sumsub-check-permissions (looking for

TRAVEL_RULE).

  1. Build the import body with ${CLAUDE_SKILL_DIR}/scripts/build_wallet_import.py

(compact spec on stdin → JSON array on stdout). It validates the address / hash rules below and refuses batches over 10 000.

  1. Send it.
  • ${CLAUDE_SKILL_DIR}/scripts/import_wallet_addresses.sh <payload.json>
  • ${CLAUDE_SKILL_DIR}/scripts/add_payment_method.sh <applicantId> <payload.json>
  1. Report the result honestly. The import returns

{successCount, errorCount, errors[]} and is partially successful by design — a non-zero errorCount does not fail the HTTP call. Always surface errorCount and the first few errors[] entries; never report "imported" on the strength of a 200.

Compact spec — import

yaml
# 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"
FieldRequiredNotes
walletAddressone of the twoThe plain address.
walletAddressHashone of the twoUse when you do not want to send the address itself.
assetnoCurrency code, e.g. BTC, ETH, USDT.
chainnoNetwork, e.g. BTC, ETH, TRX.

📘 Either `walletAddress` or `walletAddressHash` must be present. If you send both, the server recomputes the hash from the address and rejects the entry when they disagree — so only send both if you are deliberately verifying your own hashing. When in doubt, send just walletAddress.

📘 The source field on the entry is ignored — the server stamps imported addresses as api regardless. That matters: only addresses whose source is api, dashboard, a previously confirmed exchange, or a registered payment method are trusted for automatic ownership confirmation. Addresses Sumsub merely inferred (from attribution or from your transaction data) are not.

Compact spec — payment method

yaml
externalId: "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.type is required and must be one of the enum values above; for Travel Rule purposes it is always cryptoWallet. accountIdentifierHash may be sent instead of accountIdentifier on the same terms as the import.

The applicantId goes in the path, not the body — it is Sumsub's internal applicant id, not your externalUserId. If the user only has an externalUserId, resolve it first via GET /resources/applicants/-;externalUserId={externalUserId}/one.

Outputs

  • import — successCount, errorCount, and errors[] where each entry

carries the failing address (or hash) and a reason. Report the counts and the distinct reasons, not a raw dump of 10 000 rows.

  • payment method — the persisted payment-method instance, including its

server-assigned id.

Worked examples

See also

관련 작업

같은 저장소의 Skills

더 많은 Skills

모든 Skills
sumsub
커뮤니티

sumsub-integrate-travel-rule

End-to-end recipe for integrating Sumsub Travel Rule — deciding which of the three exchange flows applies, identifying the counterparty VASP, submitting the transfer, reading the exchange status, finalising or cancelling it, answering requests other VASPs send you, handling the unhosted-wallet path when no VASP is attributed, and finding existing transactions (deduplication before after-settlement exchanges). TRIGGER when the user asks to "integrate / add / implement Travel Rule", "send Travel R

설치 수
1
GitHub Stars
7
업데이트
10월 2일
sumsub
커뮤니티

sumsub-manage-webhooks

Manage Sumsub clientWebhooks (event subscriptions for applicantReviewed / applicantPending / kytTxn / etc.) — reads via /resources/api/clientWebhooks, writes via /resources/api/agent/clientWebhooks. Sandbox only — production webhooks must be created by a human directly in the Sumsub dashboard. TRIGGER when the user asks to "list / retrieve / show webhooks", "create / add / register a webhook", or "update / edit / change a webhook target / event list / secret / signature algorithm" against their

설치 수
1
GitHub Stars
7
업데이트
10월 2일
sumsub
커뮤니티

sumsub-analyze-regulation

Analyze a regulation document (PDF or text) and produce a Sumsub configuration plan — mapping regulatory requirements to Sumsub entities (levels, questionnaires, PoA presets, TM rules, workflows, AML resolution rules). TRIGGER when the user provides a regulation PDF, legal act, or compliance requirement document and wants to know what to configure in Sumsub. Acts as the entry point before invoking sumsub-create-level, sumsub-create-questionnaire, sumsub-create-poa-preset, sumsub-create-workflow,

설치 수
2
GitHub Stars
7
업데이트
10월 2일
sumsub
커뮤니티

sumsub-api-auth

Authenticate to the Sumsub API with an App Token + secret key (HMAC-SHA256 request signing). TRIGGER when the user asks to "call / sign / authenticate Sumsub API requests", debugs 401 Unauthorized / signature errors against api.sumsub.com, or needs a working request example with X-App-Token / X-App-Access-Sig / X-App-Access-Ts headers. SKIP only when a more specific skill in this repo (questionnaire/level/workflow/POA-preset/generic) already covers the user's actual task — those skills sign requ

설치 수
2
GitHub Stars
7
업데이트
10월 2일