Skip to content

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.

KYW credit usage

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"
Always double-check you are using the correct environment when integrating. Using the wrong base URL or API key will result in authentication errors.

Path parameters:

ParameterTypeRequiredDescription
blockchainstringYesBlockchain name for the wallet address, for example Ethereum, Bitcoin, or another supported blockchain name.
addressstringYesWallet 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:

ParameterTypeRequiredDescription
heuristicOnlybooleanNoWhen 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:

  1. Completed self-hosted wallet verifications. A previous verified self-hosted wallet match is the strongest signal and classifies the wallet as NON_CUSTODIAL.
  2. Wallets registered by CryptoSwift platform tenants. A tenant wallet match can identify a custodial counterparty or another known platform entity.
  3. Partner-network attribution. When available, network data can connect a wallet to a known entity.
  4. Blockchain analytics. When enabled, analytics can identify entity names, entity types, risk scores, and wallet type signals.
  5. Known self-hosted wallet apps. Some resolved entities are wallet applications rather than custodians, so KYW classifies them as NON_CUSTODIAL.
  6. 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: true
  • confidenceScore: 100
  • confidence: "HIGH"
  • isVerified: true
  • attributionReasonCode: "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

FieldTypeDescription
idstringAML Check search history record ID.
addressstringWallet address that was classified.
blockchainstringBlockchain used for the classification.
walletTypestringCUSTODIAL, NON_CUSTODIAL, or UNKNOWN.
confidenceScorenumberNumeric confidence from 0 to 100.
confidencestringLOW, MEDIUM, or HIGH, derived from confidenceScore.
isVerifiedbooleanWhether the associated entity or wallet signal is verified.
attributionReasonstring or nullHuman-readable explanation for the classification.
attributionReasonCodestring or nullMachine-readable reason code.
riskScorenumber, object, or nullRisk score from the matched verification, directory entity, or analytics source when available.
auditLogIdstringAudit ledger ID. This is the same AML history record ID as id.
entityInfoobject or nullEntity details when KYW resolves the wallet to a known entity.
agenticBehaviourobjectIndependent agentic attribution result. It does not change walletType.

agenticBehaviour fields:

FieldTypeDescription
detectedbooleanWhether the available evidence crossed the agentic-detection threshold.
confidenceScorenumberAgentic confidence from 0 to 100. A score of 100 is reserved for deterministic attribution.
confidencestringLOW, MEDIUM, or HIGH.
isVerifiedbooleantrue only for deterministic attribution, currently an exact ERC-8004 match. Behavioral heuristics never set this to true.
attributionReasonstring or nullHuman-readable explanation of the agentic result.
attributionReasonCodestring or nullDETECTED_VIA_ERC8004, DETECTED_VIA_BEHAVIORAL_ANALYSIS, or null.

walletType values:

ValueMeaning
CUSTODIALThe wallet is likely controlled by a VASP, exchange, payment provider, bank, mining pool, ATM, or another custodial service.
NON_CUSTODIALThe wallet is likely controlled by an individual user, self-hosted wallet app, DeFi service, wallet verification record, or another non-custodial source.
UNKNOWNCryptoSwift 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:

ScoreConfidence
0-33LOW
34-66MEDIUM
67-100HIGH

Common attributionReasonCode values:

CodeMeaning
VERIFIED_SELF_HOSTED_WALLETThe wallet has a completed self-hosted wallet verification.
REGISTERED_PLATFORM_TENANT_WALLETThe wallet matches a wallet registered by a CryptoSwift platform tenant.
REGISTERED_PLATFORM_TENANT_WALLET_WITH_ASSET_HINTThe wallet matches a tenant wallet without blockchain metadata, and asset metadata suggests the requested blockchain.
DETECTED_VIA_PARTNER_NETWORKThe wallet owner was identified through partner-network data.
DETECTED_VIA_BLOCKCHAIN_ANALYTICSBlockchain analytics identified an owner or entity type.
KNOWN_SELF_HOSTED_WALLET_APPThe resolved entity is a known self-hosted wallet app.
HEURISTIC_WEB3_AND_GENESIS_SIGNATURESBehavioral heuristics indicate private-key ownership through Web3 activity or genesis funding patterns.
HEURISTIC_AUTOMATED_PATTERNSBehavioral heuristics indicate automated custodial wallet patterns.
INCONCLUSIVE_BEHAVIORAL_HEURISTICSBehavioral heuristics were inconclusive.

These codes describe the root wallet classification. The nested agenticBehaviour.attributionReasonCode uses a separate namespace:

CodeMeaning
DETECTED_VIA_ERC8004The wallet exactly matches an ERC-8004 registered agent on the requested network.
DETECTED_VIA_BEHAVIORAL_ANALYSISThe 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:

FieldDescription
entityIdPublic entity ID from the CryptoSwift entity directory.
name / legalNameEntity display name and legal name.
typeEntity type, such as exchange, wallet, bank, payment provider, DeFi service, or other directory type.
isVerifiedWhether CryptoSwift has verified the entity record.
inNetworkWhether the entity is in the CryptoSwift network.
isRiskAssessedWhether a risk assessment is available.
isMicaCompliantWhether the entity is marked as MiCA compliant.
belongsToWarningListWhether the entity belongs to a warning list.
countriesCountries associated with the entity.
riskAssessmentRisk assessment details when available.
url, email, logo, noticePublic 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:

  1. Collect the destination wallet address and blockchain.
  2. Call KYW before initiating the blockchain transfer.
  3. If KYW returns CUSTODIAL, continue with your Travel Rule counterparty identification and message flow.
  4. If KYW returns NON_CUSTODIAL, apply your self-hosted wallet policy. You may run Wallet Verification if proof of control is required.
  5. 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.
  6. Evaluate agenticBehaviour independently according to your automation or registered-agent policy.
  7. Store auditLogId, walletType, wallet attribution, and the complete agenticBehaviour object 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