Wallet Intelligence (KYW)
Classify wallets and independently detect registered or behaviorally automated agents before a transaction.
Wallet Intelligence, also called KYW or Know Your Wallet, is a built-in AML Check endpoint for classifying a wallet address before you decide how to handle a transaction. It returns whether CryptoSwift identifies the wallet as CUSTODIAL, NON_CUSTODIAL, or UNKNOWN, together with confidence, attribution, audit, risk, and entity data when available. It also returns an independent agenticBehaviour result that checks for deterministic ERC-8004 attribution and meaningful behavioral automation.
KYW is optional in the main VASP flow. You can determine wallet type with your own customer information, tools, and procedures. Use KYW when its classification would help decide whether an incoming or outgoing transaction follows Travel Rule messaging, your self-hosted wallet verification policy, or an unknown-wallet review path. KYW does not itself prove customer control of a self-hosted wallet.
KYW does not require an external KYT provider to be activated. It will still use our built-in blockchain analytics tools as an additional source of signal.
Each KYW request consumes one CryptoSwift credit. See Credit usage for the current usage rates across CryptoSwift features.
Use KYW when you need to:
- decide whether a counterparty wallet is likely custodial or self-hosted
- choose the right Travel Rule or self-hosted wallet workflow before funds move
- store an auditable wallet classification result with your transaction decision
- explain why a wallet was classified in a particular way
- identify verified ERC-8004 agents or wallets showing strong automation patterns
Relevant API reference: Get Wallet Intelligence.
Endpoint
GET {{apiBaseUrl}}/kyw/{blockchain}/{address}
curl --location 'https://api-dev.cryptoswift.eu/kyw/Ethereum/0x742d35cc6634c0532925a3b844bc454e4438f44e' \ --header "x-api-key: $API_KEY"
Path parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
blockchain | string | Yes | Blockchain name for the wallet address, for example Ethereum, Bitcoin, or another supported blockchain name. |
address | string | Yes | Wallet address to classify before initiating or reviewing a transaction. |
Use the Blockchains API (GET /blockchains) to fetch the current list of blockchain names known to the CryptoSwift platform. Use the returned name value as the blockchain path parameter in the KYW URL.
KYW accepts all blockchains returned by the platform. Coverage depth can vary by blockchain: widely used networks are more likely to have full blockchain analytics and behavioral heuristic support, while less common networks may return a more limited classification based on the signals available to CryptoSwift.
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
heuristicOnly | boolean | No | When true, skips verified-wallet, platform-wallet, partner-network, analytics entity lookup, and ERC-8004 registry lookup stages and runs only behavioral heuristics. |
CryptoSwift validates that the address matches the provided blockchain. Invalid address/blockchain combinations return a validation error. Unknown wallet classifications are returned with HTTP 200 and walletType: "UNKNOWN".
How Classification Works
KYW evaluates the wallet through several signal layers:
- Completed self-hosted wallet verifications. A previous verified self-hosted wallet match is the strongest signal and classifies the wallet as
NON_CUSTODIAL. - Wallets registered by CryptoSwift platform tenants. A tenant wallet match can identify a custodial counterparty or another known platform entity.
- Partner-network attribution. When available, network data can connect a wallet to a known entity.
- Blockchain analytics. When enabled, analytics can identify entity names, entity types, risk scores, and wallet type signals.
- Known self-hosted wallet apps. Some resolved entities are wallet applications rather than custodians, so KYW classifies them as
NON_CUSTODIAL. - Behavioral heuristics. If no owner or entity is resolved, KYW analyzes wallet behavior and returns the best available classification with a confidence score.
Every response is persisted as an AML Check history record. The id and auditLogId refer to that stored record.
How Agentic Detection Works
Agentic detection is returned independently from wallet classification. walletType describes custody, while agenticBehaviour describes deterministic agent attribution or observed automation. Some transaction patterns can contribute evidence to both analyses, but the scores and attribution fields remain separate. For example, a wallet can be NON_CUSTODIAL and agentic, or CUSTODIAL with no agentic behaviour detected.
ERC-8004 registry lookup
For supported networks, KYW checks ERC-8004 registries for an exact match between the requested wallet address and network. A related owner or controller address does not verify the requested wallet as an agent; the wallet itself must be registered.
An exact match returns:
detected: trueconfidenceScore: 100confidence: "HIGH"isVerified: trueattributionReasonCode: "DETECTED_VIA_ERC8004"
ERC-8004 attribution takes precedence if both registry attribution and behavioral analysis detect the wallet. When there is no verified registry attribution, agenticBehaviour reflects the available behavioral analysis.
Supported networks: Ethereum, Base, Arbitrum, Polygon, Optimism, BNB Smart Chain, Avalanche, Linea, Scroll, Celo, Gnosis, Mantle, Soneium, XLayer, Abstract, MegaETH, Monad, GOAT Network, Metis, SKALE, and Taiko.
Behavioral automation analysis
When transaction-history coverage is available, KYW evaluates a combination of automation signals:
- high transaction frequency
- activity distributed across most hours of the day
- repetitive destination or contract-interaction patterns
- rapid outgoing transactions after incoming transfers
- repeated sweeping to a dominant destination
- highly regular transaction timing
Behavioral signals are additive. A meaningful combined score is required before detected becomes true. Behavioral attribution is capped below 100 and always returns isVerified: false, because automation can represent VASP infrastructure, trading bots, treasury or payment automation, AI agents, or other software-controlled wallets.
Behavioral transaction analysis currently has coverage for Bitcoin, Ethereum, Polygon, BNB Smart Chain, Avalanche, Arbitrum, Base, Optimism, and Solana. If transaction data is unavailable or the evidence is below the detection threshold, KYW returns the explicit no-detection object shown below rather than treating the wallet as a verified non-agent.
{
"detected": false,
"confidenceScore": 0,
"confidence": "LOW",
"isVerified": false,
"attributionReason": null,
"attributionReasonCode": null
}
Response Model
| Field | Type | Description |
|---|---|---|
id | string | AML Check search history record ID. |
address | string | Wallet address that was classified. |
blockchain | string | Blockchain used for the classification. |
walletType | string | CUSTODIAL, NON_CUSTODIAL, or UNKNOWN. |
confidenceScore | number | Numeric confidence from 0 to 100. |
confidence | string | LOW, MEDIUM, or HIGH, derived from confidenceScore. |
isVerified | boolean | Whether the associated entity or wallet signal is verified. |
attributionReason | string or null | Human-readable explanation for the classification. |
attributionReasonCode | string or null | Machine-readable reason code. |
riskScore | number, object, or null | Risk score from the matched verification, directory entity, or analytics source when available. |
auditLogId | string | Audit ledger ID. This is the same AML history record ID as id. |
entityInfo | object or null | Entity details when KYW resolves the wallet to a known entity. |
agenticBehaviour | object | Independent agentic attribution result. It does not change walletType. |
agenticBehaviour fields:
| Field | Type | Description |
|---|---|---|
detected | boolean | Whether the available evidence crossed the agentic-detection threshold. |
confidenceScore | number | Agentic confidence from 0 to 100. A score of 100 is reserved for deterministic attribution. |
confidence | string | LOW, MEDIUM, or HIGH. |
isVerified | boolean | true only for deterministic attribution, currently an exact ERC-8004 match. Behavioral heuristics never set this to true. |
attributionReason | string or null | Human-readable explanation of the agentic result. |
attributionReasonCode | string or null | DETECTED_VIA_ERC8004, DETECTED_VIA_BEHAVIORAL_ANALYSIS, or null. |
walletType values:
| Value | Meaning |
|---|---|
CUSTODIAL | The wallet is likely controlled by a VASP, exchange, payment provider, bank, mining pool, ATM, or another custodial service. |
NON_CUSTODIAL | The wallet is likely controlled by an individual user, self-hosted wallet app, DeFi service, wallet verification record, or another non-custodial source. |
UNKNOWN | CryptoSwift could not classify the wallet with enough signal. Use your internal policy to decide whether to ask for more information, run wallet verification, or escalate. |
confidenceScore maps to confidence as follows:
| Score | Confidence |
|---|---|
0-33 | LOW |
34-66 | MEDIUM |
67-100 | HIGH |
Common attributionReasonCode values:
| Code | Meaning |
|---|---|
VERIFIED_SELF_HOSTED_WALLET | The wallet has a completed self-hosted wallet verification. |
REGISTERED_PLATFORM_TENANT_WALLET | The wallet matches a wallet registered by a CryptoSwift platform tenant. |
REGISTERED_PLATFORM_TENANT_WALLET_WITH_ASSET_HINT | The wallet matches a tenant wallet without blockchain metadata, and asset metadata suggests the requested blockchain. |
DETECTED_VIA_PARTNER_NETWORK | The wallet owner was identified through partner-network data. |
DETECTED_VIA_BLOCKCHAIN_ANALYTICS | Blockchain analytics identified an owner or entity type. |
KNOWN_SELF_HOSTED_WALLET_APP | The resolved entity is a known self-hosted wallet app. |
HEURISTIC_WEB3_AND_GENESIS_SIGNATURES | Behavioral heuristics indicate private-key ownership through Web3 activity or genesis funding patterns. |
HEURISTIC_AUTOMATED_PATTERNS | Behavioral heuristics indicate automated custodial wallet patterns. |
INCONCLUSIVE_BEHAVIORAL_HEURISTICS | Behavioral heuristics were inconclusive. |
These codes describe the root wallet classification. The nested agenticBehaviour.attributionReasonCode uses a separate namespace:
| Code | Meaning |
|---|---|
DETECTED_VIA_ERC8004 | The wallet exactly matches an ERC-8004 registered agent on the requested network. |
DETECTED_VIA_BEHAVIORAL_ANALYSIS | The wallet crossed the behavioral automation threshold. This result is not verified agent ownership. |
Entity Info
When KYW resolves the wallet to a known entity, entityInfo can include:
| Field | Description |
|---|---|
entityId | Public entity ID from the CryptoSwift entity directory. |
name / legalName | Entity display name and legal name. |
type | Entity type, such as exchange, wallet, bank, payment provider, DeFi service, or other directory type. |
isVerified | Whether CryptoSwift has verified the entity record. |
inNetwork | Whether the entity is in the CryptoSwift network. |
isRiskAssessed | Whether a risk assessment is available. |
isMicaCompliant | Whether the entity is marked as MiCA compliant. |
belongsToWarningList | Whether the entity belongs to a warning list. |
countries | Countries associated with the entity. |
riskAssessment | Risk assessment details when available. |
url, email, logo, notice | Public entity profile information when available. |
Example: Custodial Wallet
{
"id": "0f59b0db-3c42-4f2f-9a1f-35c6ccbc4f46",
"address": "0x742d35cc6634c0532925a3b844bc454e4438f44e",
"blockchain": "Ethereum",
"walletType": "CUSTODIAL",
"confidenceScore": 75,
"confidence": "HIGH",
"isVerified": true,
"attributionReason": "Blockchain analytics identified the wallet owner as Example Exchange.",
"attributionReasonCode": "DETECTED_VIA_BLOCKCHAIN_ANALYTICS",
"agenticBehaviour": {
"detected": true,
"confidenceScore": 35,
"confidence": "MEDIUM",
"isVerified": false,
"attributionReason": "Wallet shows automated behaviour including high transaction frequency.",
"attributionReasonCode": "DETECTED_VIA_BEHAVIORAL_ANALYSIS"
},
"riskScore": 18,
"auditLogId": "0f59b0db-3c42-4f2f-9a1f-35c6ccbc4f46",
"entityInfo": {
"entityId": "14f4fb9d-4c69-5843-8b18-dbb77540182b",
"name": "Example Exchange",
"legalName": "Example Exchange OÜ",
"type": "exchange",
"isVerified": true,
"inNetwork": true,
"updatedAt": "2026-06-01T10:00:00.000Z",
"isRiskAssessed": true,
"description": "Example custodial virtual asset service provider.",
"isMicaCompliant": true,
"belongsToWarningList": false,
"countries": ["Estonia"],
"url": "https://example.com",
"riskAssessment": {
"riskScore": "LOW"
}
}
}
Example: Verified Self-Hosted Wallet
{
"id": "b2ff7a37-42d8-4b2c-9a36-3caa7d8d63d0",
"address": "0x32Be343B94f860124dC4fEe278FDCBD38C102D88",
"blockchain": "Ethereum",
"walletType": "NON_CUSTODIAL",
"confidenceScore": 90,
"confidence": "HIGH",
"isVerified": true,
"attributionReason": "The wallet has a completed self-hosted wallet verification.",
"attributionReasonCode": "VERIFIED_SELF_HOSTED_WALLET",
"agenticBehaviour": {
"detected": false,
"confidenceScore": 0,
"confidence": "LOW",
"isVerified": false,
"attributionReason": null,
"attributionReasonCode": null
},
"riskScore": null,
"auditLogId": "b2ff7a37-42d8-4b2c-9a36-3caa7d8d63d0",
"entityInfo": null
}
Example: Unknown Wallet
{
"id": "7b181f74-6c8f-4c62-8e87-67a8d0797dd3",
"address": "bc1qexampleaddress000000000000000000000000",
"blockchain": "Bitcoin",
"walletType": "UNKNOWN",
"confidenceScore": 20,
"confidence": "LOW",
"isVerified": false,
"attributionReason": "Behavioral heuristics were inconclusive.",
"attributionReasonCode": "INCONCLUSIVE_BEHAVIORAL_HEURISTICS",
"agenticBehaviour": {
"detected": false,
"confidenceScore": 0,
"confidence": "LOW",
"isVerified": false,
"attributionReason": null,
"attributionReasonCode": null
},
"riskScore": null,
"auditLogId": "7b181f74-6c8f-4c62-8e87-67a8d0797dd3",
"entityInfo": null
}
Example: ERC-8004 Registered Agent
The wallet classification and agentic attribution remain independent. This example has insufficient evidence for a custody classification but is deterministically identified as an ERC-8004 agent.
{
"id": "4d6ac747-12d7-4a91-a48b-9df0d55cf671",
"address": "0x1111111111111111111111111111111111111111",
"blockchain": "Ethereum",
"walletType": "UNKNOWN",
"confidenceScore": 20,
"confidence": "LOW",
"isVerified": false,
"attributionReason": "Behavioral heuristics were inconclusive.",
"attributionReasonCode": "INCONCLUSIVE_BEHAVIORAL_HEURISTICS",
"agenticBehaviour": {
"detected": true,
"confidenceScore": 100,
"confidence": "HIGH",
"isVerified": true,
"attributionReason": "Wallet is registered as an ERC-8004 agent.",
"attributionReasonCode": "DETECTED_VIA_ERC8004"
},
"riskScore": null,
"auditLogId": "4d6ac747-12d7-4a91-a48b-9df0d55cf671",
"entityInfo": null
}
Recommended Integration Pattern
For outgoing withdrawals:
- Collect the destination wallet address and blockchain.
- Call KYW before initiating the blockchain transfer.
- If KYW returns
CUSTODIAL, continue with your Travel Rule counterparty identification and message flow. - If KYW returns
NON_CUSTODIAL, apply your self-hosted wallet policy. You may run Wallet Verification if proof of control is required. - If KYW returns
UNKNOWN, follow your escalation policy. Common options include asking the user to identify the wallet type, running wallet verification, or manual compliance review. - Evaluate
agenticBehaviourindependently according to your automation or registered-agent policy. - Store
auditLogId,walletType, wallet attribution, and the completeagenticBehaviourobject with your transaction decision.
For incoming deposits, use KYW as one signal when deciding whether the origin wallet looks custodial, self-hosted, or unknown. Combine it with Travel Rule message status, transaction risk, customer statements, and your internal AML policy.
See Also
- Wallet Intelligence in Compliance Workflows
- Wallet Verification
- Travel Rule Message Flows
- Get Wallet Intelligence API reference