Tollbridge Docs
API

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/0x0000000000000000000000000000000000000000

Response 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/state

Response 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/positions

Response 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 hidden

Python

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).

  • The state machine and sample adequacy: Decisions.
  • S11 risk over wallet subjects: Risk.

On this page