Wallet
Wallet profile, state-machine position and balances on base — paid surfaces with honest unavailability.
Wallet intelligence on base (v1 chain). Unwired providers refuse honestly (PROVIDER_DOWN) —
a provider being down is never rendered as a decision.
GET /v1/wallet/{chain}/{address} (paid)
Wallet profile: state machine + sample adequacy. Bills wallet.profile.
curl -H "PAYMENT-SIGNATURE: <base64 payment payload>" \
https://api.tollbridge.app/v1/wallet/base/0x0000000000000000000000000000000000000000Response data: { wallet, chain, profile: { state, first_seen_at, last_active_at, net_flow_30d_usd, sample_adequacy } }.
GET /v1/wallet/{chain}/{address}/state (paid)
Wallet state position + evidence summary. Bills wallet.state.
curl -H "PAYMENT-SIGNATURE: <base64 payment payload>" \
https://api.tollbridge.app/v1/wallet/base/0x0000000000000000000000000000000000000000/stateResponse data: { wallet, chain, state, since, sample_adequacy } — the wallet state machine
position (WATCHING → ACCUMULATING → HIGH_CONVICTION → DISTRIBUTING → EXITING).
GET /v1/wallet/{chain}/{address}/positions (paid)
Wallet balances surface. Bills wallet.state.
curl -H "PAYMENT-SIGNATURE: <base64 payment payload>" \
https://api.tollbridge.app/v1/wallet/base/0x0000000000000000000000000000000000000000/positionsResponse data: { wallet, chain, balances, provenance }.
TypeScript
import { Tollbridge } from '@tollbridge/sdk-typescript';
import { account } from './wallet';
const paying = new Tollbridge({ baseUrl: 'https://api.tollbridge.app', x402: { signer: account } });
const address = '0x0000000000000000000000000000000000000000';
const wallet = await paying.wallet({ chain: 'base', address }); // profile
const state = await paying.walletState({ chain: 'base', address }); // state machine position
const positions = await paying.walletPositions({ chain: 'base', address }); // balances
state.data.sample_adequacy; // stated honestly — never hiddenPython
import httpx
# Reference snippets — official Python SDK in progress.
base = "https://api.tollbridge.app"
addr = "0x0000000000000000000000000000000000000000"
H = {"PAYMENT-SIGNATURE": payment_payload_b64} # signed x402 payload
profile = httpx.get(f"{base}/v1/wallet/base/{addr}", headers=H).json()["data"]
state = httpx.get(f"{base}/v1/wallet/base/{addr}/state", headers=H).json()["data"]
positions = httpx.get(f"{base}/v1/wallet/base/{addr}/positions", headers=H).json()["data"]MCP
The profile is proxied 1:1 as tollbridge_wallet_intelligence; the state/positions surfaces are
REST-only in v1 (stated honestly — the tool catalog has no composite proxies):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tollbridge_wallet_intelligence",
"arguments": { "chain": "base", "address": "0x0000000000000000000000000000000000000000" }
}
}GET /v1/wallet/{chain}/{address}/events (paid · wallet.events)
Paginated wallet transfer events from the live Base indexer surface — the raw feed the
profile/state aggregates build on. Unvalued transfers are an explicit legal state in the
response, never a silent undercount. Query params: window (default 24h), cursor.
curl -H "PAYMENT-SIGNATURE: <signed x402 payload>" \
"https://api.tollbridge.app/v1/wallet/base/0x0000000000000000000000000000000000000000/events?window=24h"import httpx
base = "https://api.tollbridge.app"
addr = "0x0000000000000000000000000000000000000000"
H = {"PAYMENT-SIGNATURE": payment_payload_b64} # signed x402 payload
events = httpx.get(f"{base}/v1/wallet/base/{addr}/events", headers=H, params={"window": "24h"}).json()["data"]The events surface is REST-only in v1 (the MCP wallet tools proxy profile and state 1:1 — stated honestly).