{"authentication":{"schemes":[{"description":"Public read-only telemetry; no authentication required.","scheme":"none"}]},"capabilities":{"extensions":[{"description":"Every card skill is also callable as its own JSON-RPC method on the same endpoint (method = skill id, params = the skill's inputSchema object). Calling such a method implies activation; no A2A-Version header required on these.","required":false,"uri":"https://stablescan.achivx.com/a2a-ext/skill-methods/v1"},{"description":"Machine-readable map of the ACHIVX ecosystem: the sibling surfaces, their manuals and agent cards, and the shared identity layer. Data-only — it adds card information and changes nothing in the request flow.","params":{"identityBridge":"a wallet is an address: the same EIP-191 wallet that is an identity on the forum is a vettable address on the Stablecoin Scanner","surfaces":[{"agentCard":"https://stablescan.achivx.com/.well-known/agent-card.json","job":"vet an address, check a freeze, read settlement","manual":"https://stablescan.achivx.com/agents.md","name":"Stablecoin Scanner"},{"agentCard":"https://x402scan.achivx.com/.well-known/agent-card.json","job":"find an x402 service to pay, vet it, verify a payment","manual":"https://x402scan.achivx.com/agents.md","name":"x402scan"},{"agentCard":"https://forum.achivx.com/.well-known/agent-card.json","job":"ask, answer (register to write)","manual":"https://forum.achivx.com/agents.md","name":"ACHIVX Forum"},{"job":"the shared layer: one EIP-191 wallet across surfaces, forum trust levels TL0-TL5","manual":"https://api.achivx.com/agents.md","name":"Reputation \u0026 identity"}]},"required":false,"uri":"https://stablescan.achivx.com/a2a-ext/ecosystem/v1"}],"pushNotifications":false,"streaming":false},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json"],"description":"Stablecoin Scanner — onchain dollar observability. Web UI for people, agent-ready API (MCP/A2A) for machines. Per-address compliance facts (issuer freeze/seize, OFAC), taint/exposure and unified risk verdicts, open-allowance risk, recent transfers, sanctions coverage, and indexer freshness. Read-only, free, no auth. Deterministic message-only agent: it never creates tasks and does not interpret free text — invoke a skill via a SendMessage data part {\"skill\": \"\u003cid\u003e\", \"params\": {...}} (a text message answers with the machine-readable how-to).","documentationUrl":"https://stablescan.achivx.com/agents.md","endpoint":"https://stablescan.achivx.com/a2a","methods":["get-address-approvals","get-address-risk","get-address-exposure","get-address-compliance","get-sync-status","get-recent-transactions","get-sanctions-status","get-wallet-graph-walk"],"name":"Stablecoin Scanner","networks":[{"caip2":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","name":"solana","slug":"solana"},{"caip2":"eip155:1","name":"ethereum","slug":"ethereum"},{"caip2":"eip155:10","name":"optimism","slug":"optimism"},{"caip2":"eip155:56","name":"bnb chain","slug":"bnb-chain"},{"caip2":"eip155:8453","name":"base","slug":"base"},{"caip2":"eip155:42161","name":"arbitrum one","slug":"arbitrum"},{"caip2":"eip155:728126428","name":"tron","slug":"tron"}],"pages":[{"markdown":"https://stablescan.achivx.com/index.md","name":"Stablecoin Scanner — market dashboard across every network","url":"https://stablescan.achivx.com/"},{"markdown":"https://stablescan.achivx.com/stablecoin.md","name":"Stablecoins on the scanner — every stablecoin, every network","url":"https://stablescan.achivx.com/stablecoin"},{"asset":"DAI","markdown":"https://stablescan.achivx.com/dai-explorer.md","name":"DAI Explorer — the asset across every network this scanner indexes it on","networks":["ethereum","optimism","base","arbitrum"],"url":"https://stablescan.achivx.com/dai-explorer"},{"asset":"PYUSD","markdown":"https://stablescan.achivx.com/pyusd-explorer.md","name":"PYUSD Explorer — the asset across every network this scanner indexes it on","networks":["solana","ethereum","arbitrum"],"url":"https://stablescan.achivx.com/pyusd-explorer"},{"asset":"USD1","markdown":"https://stablescan.achivx.com/usd1-explorer.md","name":"USD1 Explorer — the asset across every network this scanner indexes it on","networks":["ethereum","bnb-chain","tron"],"url":"https://stablescan.achivx.com/usd1-explorer"},{"asset":"USDC","markdown":"https://stablescan.achivx.com/usdc-explorer.md","name":"USDC Explorer — the asset across every network this scanner indexes it on","networks":["solana","ethereum","optimism","bnb-chain","base","arbitrum"],"url":"https://stablescan.achivx.com/usdc-explorer"},{"asset":"USDe","markdown":"https://stablescan.achivx.com/usde-explorer.md","name":"USDe Explorer — the asset across every network this scanner indexes it on","networks":["solana","ethereum","optimism","base","arbitrum"],"url":"https://stablescan.achivx.com/usde-explorer"},{"asset":"USDS","markdown":"https://stablescan.achivx.com/usds-explorer.md","name":"USDS Explorer — the asset across every network this scanner indexes it on","networks":["solana","ethereum","base","arbitrum"],"url":"https://stablescan.achivx.com/usds-explorer"},{"asset":"USDT","markdown":"https://stablescan.achivx.com/usdt-explorer.md","name":"USDT Explorer — the asset across every network this scanner indexes it on","networks":["solana","ethereum","optimism","bnb-chain","base","tron"],"url":"https://stablescan.achivx.com/usdt-explorer"},{"markdown":"https://stablescan.achivx.com/entities.md","name":"Exchanges and bridges as a whole — each one across every network this scanner indexes","url":"https://stablescan.achivx.com/entities"},{"markdown":"https://stablescan.achivx.com/entity/binance.md","name":"Binance — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/binance"},{"markdown":"https://stablescan.achivx.com/entity/okx.md","name":"OKX — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/okx"},{"markdown":"https://stablescan.achivx.com/entity/bitfinex.md","name":"Bitfinex — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron"],"url":"https://stablescan.achivx.com/entity/bitfinex"},{"markdown":"https://stablescan.achivx.com/entity/bybit.md","name":"Bybit — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/bybit"},{"markdown":"https://stablescan.achivx.com/entity/kucoin.md","name":"KuCoin — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/kucoin"},{"markdown":"https://stablescan.achivx.com/entity/mexc.md","name":"MEXC — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/mexc"},{"markdown":"https://stablescan.achivx.com/entity/debridge.md","name":"deBridge — the bridge's contracts and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/debridge"},{"markdown":"https://stablescan.achivx.com/entity/gate.md","name":"Gate — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","bnb-chain","base","arbitrum"],"url":"https://stablescan.achivx.com/entity/gate"},{"markdown":"https://stablescan.achivx.com/entity/across.md","name":"Across — the bridge's contracts and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/across"},{"markdown":"https://stablescan.achivx.com/entity/mayan.md","name":"Mayan — the bridge's contracts and stablecoin flows across every network this scanner indexes","networks":["ethereum","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/mayan"},{"markdown":"https://stablescan.achivx.com/entity/stargate.md","name":"Stargate — the bridge's contracts and stablecoin flows across every network this scanner indexes","networks":["ethereum","bnb-chain","base","optimism","arbitrum"],"url":"https://stablescan.achivx.com/entity/stargate"},{"markdown":"https://stablescan.achivx.com/entity/coinex.md","name":"CoinEx — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron","bnb-chain","base","arbitrum"],"url":"https://stablescan.achivx.com/entity/coinex"},{"markdown":"https://stablescan.achivx.com/entity/htx.md","name":"HTX — the exchange's addresses and stablecoin flows across every network this scanner indexes","networks":["ethereum","tron"],"url":"https://stablescan.achivx.com/entity/htx"}],"protocol":"a2a","protocolVersion":"1.0.0","rateLimits":{"publicPerMinute":1200,"window":"1m"},"skills":[{"description":"Open ERC-20/Permit2 allowances (Class-F) with a shadow approval-risk band: unlimited to a flagged/unknown spender is the #1 drain vector; a DEX router is normal; expired Permit2 is 'expired'.","examples":["Which spenders can still move stablecoins out of 0x…?"],"id":"get-address-approvals","inputSchema":{"properties":{"address":{"description":"The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account.","type":"string"},"chain":{"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Without chain, the address's spelling picks it: 0x… → 8453 Base, T… → Tron, base58 → Solana. The answer states the chain it is about (chain_id) and how it was chosen (chain_source: explicit|default|address_form), and lists where else this address has data (chains_with_data) — read that map before concluding; there is no auto-switch, ask again with chain set.","type":["integer","string","null"]}},"required":["address"],"type":"object"},"name":"Open allowances + approval-risk","tags":["allowances","approvals","erc20","permit2","risk"]},{"description":"§8 bounded backward BFS to the nearest OFAC/hack/drainer/mixer root: class + nearest-hop + a value-proportional haircut. 'unknown' never a false 'none'; incomplete_reasons names why: OFAC list unloaded, walk cut (time_budget, frontier_cap), Solana coverage pending or partial, short history, or no hack/drainer/mixer label loaded for this chain.","examples":["How close is 0x… to a sanctioned or hacked source?"],"id":"get-address-exposure","inputSchema":{"properties":{"address":{"description":"The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account.","type":"string"},"chain":{"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Without chain, the address's spelling picks it: 0x… → 8453 Base, T… → Tron, base58 → Solana. The answer states the chain it is about (chain_id) and how it was chosen (chain_source: explicit|default|address_form), and lists where else this address has data (chains_with_data) — read that map before concluding; there is no auto-switch, ask again with chain set.","type":["integer","string","null"]}},"required":["address"],"type":"object"},"name":"Taint/exposure verdict","tags":["taint","exposure","sanctions","aml","risk"]},{"description":"One tier (unknown|none|low|medium|high|severe) for one chain, aggregating facts (OFAC, this chain's issuer freeze/seize status, exposure) + attributed labels (capped at medium, ≥2 sources for a tier). 'unknown' = could not assess, not 'clean'; it names its cause in evidence and incomplete_reasons (e.g. time_budget: the exposure walk was cut). An 'unknown' freeze status or a pair whose freeze history is not backfilled turns a would-be 'none' into 'unknown', so a Solana tier is never 'none'. Not scored: frozen_elsewhere, issuer freeze proposals, frozen balances and the issuer's act on its own token contract - read get-address-compliance.","examples":["Is 0x… risky to interact with?","{\"skill\":\"get-address-risk\",\"params\":{\"chain\":1,\"address\":\"0x5754284f345afc66a98fbb0a0afe71e0f007b949\"}}"],"id":"get-address-risk","inputSchema":{"properties":{"address":{"description":"The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account.","type":"string"},"chain":{"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Without chain, the address's spelling picks it: 0x… → 8453 Base, T… → Tron, base58 → Solana. The answer states the chain it is about (chain_id) and how it was chosen (chain_source: explicit|default|address_form), and lists where else this address has data (chains_with_data) — read that map before concluding; there is no auto-switch, ask again with chain set.","type":["integer","string","null"]}},"required":["address"],"type":"object"},"name":"Unified risk verdict","tags":["risk","verdict","screening","compliance"]},{"description":"Compliance facts for one address on one chain + the OFAC SDN flag. freeze[]: issuer freeze/seize status per enabled freeze-capable stablecoin (frozen|seized|clear|unknown - unknown = no act found and the pair's freeze history is not fully swept, never 'not frozen'). not_freezable[]: enabled stablecoins the issuer cannot freeze on this chain - token = symbol and token_address = contract, as in freeze[]; reason no_freeze_function (the contract has no freeze function) or no_freeze_authority (a Solana mint without a freeze authority) - e.g. the Binance-Peg USDT/USDC on BNB Chain, where enforcement is off-chain. frozen_elsewhere[]: the same address under a standing act on another indexed chain - the cross-chain signal, not scored by get-address-risk. freeze_proposals[]: executed issuer multisig proposals naming the address (pending ones only where the operator publishes them in full; elsewhere a pending proposal's address is shown once it executes). Class-F decoded facts, no heuristics.","examples":["Is 0x… frozen by a stablecoin issuer or OFAC-listed?"],"id":"get-address-compliance","inputSchema":{"properties":{"address":{"description":"The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account.","type":"string"},"chain":{"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Without chain, the address's spelling picks it: 0x… → 8453 Base, T… → Tron, base58 → Solana. The answer states the chain it is about (chain_id) and how it was chosen (chain_source: explicit|default|address_form), and lists where else this address has data (chains_with_data) — read that map before concluding; there is no auto-switch, ask again with chain set.","type":["integer","string","null"]}},"required":["address"],"type":"object"},"name":"Address compliance facts","tags":["compliance","freeze","seize","ofac","sanctions"]},{"description":"Indexer head/safe/finalized block, lag_blocks (head_block - last_indexed_block) and freshness_seconds (the age of the newest indexed transfer, the freshness measure on every chain) so the agent knows data recency. On Solana (chain -1) safe_block is the finalized slot, and lag_blocks is near 0 by construction and never negative, so it is not a freshness signal there: read freshness_seconds. On the EVM chains and Tron a negative lag_blocks means the node's head went back.","examples":["How fresh is the Base data right now?"],"id":"get-sync-status","inputSchema":{"properties":{"chain":{"default":8453,"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Default 8453 (Base); on get-recent-transactions a T… or base58 payer/recipient filter selects Tron or Solana instead. The answer is about that one chain.","type":["integer","string","null"]}},"type":"object"},"name":"Data freshness","tags":["freshness","sync","status"]},{"description":"Newest stablecoin transfers on ONE chain, filterable by recipient/payer, cursor-paginated (next_cursor). Answer: items[], each row tx_hash, log_index, block_number, block_time (RFC 3339), payer, recipient, amount {amount (minor units, string), decimals, token (symbol)}, token (the contract address), finality, and usd_amount where priced. The chain is the one asked for — rows do not repeat it. Generic on-chain Transfer facts.","examples":["Latest stablecoin transfers received by 0x…"],"id":"get-recent-transactions","inputSchema":{"properties":{"chain":{"default":8453,"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Default 8453 (Base); on get-recent-transactions a T… or base58 payer/recipient filter selects Tron or Solana instead. The answer is about that one chain.","type":["integer","string","null"]},"cursor":{"type":"string"},"limit":{"default":25,"description":"Max rows, 1..200. A value outside the range is refused with -32602, as REST refuses it.","maximum":200,"minimum":1,"type":"integer"},"payer":{"type":"string"},"recipient":{"type":"string"}},"type":"object"},"name":"Recent transactions","tags":["transfers","transactions","feed","stablecoin"]},{"description":"OFAC SDN sanction-list coverage: how many EVM + Solana + Tron addresses are ingested (free public 0xB10C list, US-Gov public-domain data) and when it was last refreshed. Heuristic exposure signal — not legal advice; verify against the official SDN list. No params.","examples":["When was the OFAC dataset last refreshed?"],"id":"get-sanctions-status","inputSchema":{"properties":{},"type":"object"},"name":"OFAC sanctions coverage","tags":["sanctions","ofac","dataset","coverage"]},{"description":"Bounded walk over the indexed stablecoin settlement flow graph from a wallet: payer\u003c-\u003erecipient hops, value-weighted score, entity-aware keys, attributed-node stop option, and sanctioned-node markers. Explainability primitive only — NOT a detector verdict, identity/control assertion, AML decision, or legal advice. window_from present means the answer was built from that date, the edge-grain horizon, not from the start of the requested window; the default window all, 90d and 1y included (/v1/methodology edge_grain_horizon). When window_from is present, read the graph as covering that span only — do not treat the absence of a counterparty, a path or a sanctioned node as evidence about anything before that date. volume on nodes is the token's raw minor units (divide by 10^decimals); volume_usd6 is the same amount in USD with 6 decimals at peg 1. On Solana (chain -1) the answer carries coverage_status for the subject address only, never for its counterparties: pending — its history is still being filled, so an empty or small answer is not final; partial — filled to a documented bound. The walk shows a finished fill after the next Solana rollup pass (about 10 minutes), and never shows history older than window_from. This read never starts a fill, so pending can also mean none was asked for yet: one compliance read of the address asks for it. A Solana answer without coverage_status could not read it in time — treat it as pending. On Solana (chain -1) the edge grain of 2026-07-20..2026-09-14 is incomplete: those days hold part of their transfers or none, because their raw rows were offloaded before a fix reached production on 2026-09-17; they are not restored, and answers do not mark them (decision of 2026-09-17). Solana's grain is never trimmed, so there the horizon that window_from reports is not where retained data ends: once window_from is later than 2026-09-14 the answer holds none of those days. An answer that reaches them — window_from on or before 2026-09-14, or no window_from over a window that includes them — counts them as floors: at least this much, never the whole, and a counterparty, path or sanctioned node missing from those days is not evidence that there was none.","examples":["Where did funds from 0x… flow, two hops out?"],"id":"get-wallet-graph-walk","inputSchema":{"properties":{"address":{"description":"The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account.","type":"string"},"chain":{"description":"Chain, in any of four spellings: the id (8453 Base, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (networks[].slug: base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (networks[].caip2: eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused with -32602, and so is a network this scanner knows but does not index (absent from networks[]) — by name, never with an empty clean verdict. Without chain, the address's spelling picks it: 0x… → 8453 Base, T… → Tron, base58 → Solana. The answer states the chain it is about (chain_id) and how it was chosen (chain_source: explicit|default|address_form), and lists where else this address has data (chains_with_data) — read that map before concluding; there is no auto-switch, ask again with chain set.","type":["integer","string","null"]},"frontier_cap":{"type":"integer"},"hops":{"type":"integer"},"stop_at_attributed":{"default":true,"type":"boolean"},"stop_on_sanctioned":{"default":false,"type":"boolean"},"token":{"description":"Token symbol, e.g. USDT. REQUIRED: the server does not guess it. Each asset hub page (pages[].asset) names its own token, and the walk answers about THAT token only.","type":"string"},"window":{"default":"all","description":"Time window","enum":["1h","24h","7d","30d","90d","1y","all"],"type":"string"}},"required":["address","token"],"type":"object"},"name":"Wallet graph walk","tags":["graph","flow","walk","tracing","explainability"]}],"supportedInterfaces":[{"protocolBinding":"JSONRPC","protocolVersion":"1.0","url":"https://stablescan.achivx.com/a2a"}],"url":"https://stablescan.achivx.com","version":"1.4.0","x-mcp":{"connect":"claude mcp add stablescan --transport http https://stablescan.achivx.com/mcp","description":"Same telemetry over Model Context Protocol (for MCP clients).","endpoint":"https://stablescan.achivx.com/mcp","transport":"http"}}
