← Obol

Obol API reference

The public contract contains only verified, available routes.

GET /v1/base/address-snapshot

Paid: 0.001 USDC on Base through x402. Supply an EVM address in the address query parameter. Returns native ETH and canonical Base USDC balances at one observed block, plus two-provider agreement metadata.

curl 'https://obol.danieldutoit.net/v1/base/address-snapshot?address=0x4094383033C1861E2686eaC4d4BBae6F0031F5d2'

GET or POST /v1/base/network-status

Paid: 0.001 USDC on Base through x402. Use GET or POST with no query parameters. POST accepts either no body or the exact two-byte body {}. The {} form requires Content-Type: application/json, Content-Length: 2, and no Transfer-Encoding. All other request bodies are rejected. Both methods return the same bounded response after payment.

curl 'https://obol.danieldutoit.net/v1/base/network-status'
curl -X POST 'https://obol.danieldutoit.net/v1/base/network-status'

GET /v1/evm/address-snapshot

Paid: 0.001 USDC on Base through x402. Supply a supported EVM chain_id (default 8453) and an EVM address. After payment, the response is reconciled at a common block against two pre-probed distinct-operator endpoints. The runtime uses only the local probed registry and never fetches Chainlist or accepts an RPC URL.

curl 'https://obol.danieldutoit.net/v1/evm/address-snapshot?chain_id=10&address=0x4094383033C1861E2686eaC4d4BBae6F0031F5d2'

GET /v1/markets/kraken/candles

Paid: 0.001 USDC on Base through x402. Returns up to 100 newest historical Kraken OHLCV candles for an exact period in seconds, base, and quote. Results are newest first and informational only, not investment advice.

curl 'https://obol.danieldutoit.net/v1/markets/kraken/candles?period=60&base=BTC&quote=USD&limit=10'

GET /v1/markets/kraken/orderbook-top

Paid: 0.001 USDC on Base through x402. Returns the Kraken top-of-book best bid, best ask, and spread percentage for one exact historical Unix-seconds timestamp, base, and quote. Informational only; not investment advice.

curl 'https://obol.danieldutoit.net/v1/markets/kraken/orderbook-top?timestamp=1788962867&base=BTC&quote=USD'

GET /v1/markets/candles

Paid: 0.001 USDC on Base through x402. Multi-exchange candles return up to 100 newest historical OHLCV observations for an exact exchange, period, base, and quote. Results are newest first and informational only, not investment advice.

curl 'https://obol.danieldutoit.net/v1/markets/candles?exchange=KRAKEN&period=60&base=BTC&quote=USD&limit=10'

GET /v1/bitcoin/address-cluster

Paid: 0.003 USDC on Base through x402. Returns one exact-address Bitcoin cluster assignment with derivation block and heuristic reason. A cluster is not proof of common ownership or identity.

curl 'https://obol.danieldutoit.net/v1/bitcoin/address-cluster?address=1dice8EMZmqKvrGE4Qc9bUFf9PX3xaYDp'

GET /v1/bitcoin-cash/address-cluster

Paid: 0.003 USDC on Base through x402. Returns one exact-address Bitcoin Cash cluster assignment with derivation block and heuristic reason. A cluster is not proof of common ownership or identity.

curl 'https://obol.danieldutoit.net/v1/bitcoin-cash/address-cluster?address=1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu'

GET /v1/dogecoin/address-cluster

Paid: 0.003 USDC on Base through x402. Returns one exact-address Dogecoin cluster assignment with derivation block and heuristic reason. A cluster is not proof of common ownership or identity.

curl 'https://obol.danieldutoit.net/v1/dogecoin/address-cluster?address=D5EQRCnPMXmRvUoZwC7gu7fYspean3PQ9a'

GET /v1/litecoin/address-cluster

Paid: 0.003 USDC on Base through x402. Returns one exact-address Litecoin Base58Check cluster assignment with derivation block and heuristic reason. A cluster is not proof of common ownership or identity.

curl 'https://obol.danieldutoit.net/v1/litecoin/address-cluster?address=La11a9B6w6dykTnst5MZAy78DfiAmUVL8G'

GET /v1/cardano/transaction

Paid: 0.003 USDC on Base through x402. Supply exactly 64 hexadecimal characters in the hash query parameter. Returns at most one Cardano mainnet transaction with bounded scalar transaction and block fields.

curl 'https://obol.danieldutoit.net/v1/cardano/transaction?hash=a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0'

GET /v1/solana/transaction

Paid: 0.003 USDC on Base through x402. Supply a canonical base58 Solana signature decoding to exactly 64 bytes and its canonical nonnegative slot. Returns at most one exact match with bounded public-chain scalar fields; account keys are never returned.

curl 'https://obol.danieldutoit.net/v1/solana/transaction?signature=1111111111111111111111111111111111111111111111111111111111111111&slot=42'

GET /v1/xrp/transaction

Paid: 0.003 USDC on Base through x402. Supply an exact 64-character hexadecimal transaction_hash, canonical nonnegative block_number, and canonical nonnegative tx_index. Returns at most one bounded public-chain transaction; raw metadata is never returned.

curl 'https://obol.danieldutoit.net/v1/xrp/transaction?transaction_hash=a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0&block_number=103400001&tx_index=7'

GET /v1/ethereum/complex-flow

Ethereum complex flow. Paid: 0.003 USDC on Base through x402. Supply exact 20-byte hexadecimal from_address, to_address, and asset values plus canonical block_number_min and block_number_max values spanning at most 100,000 blocks. Returns at most 100 newest normalized public-chain aggregate rows.

curl 'https://obol.danieldutoit.net/v1/ethereum/complex-flow?from_address=0x0000000000000000000000000000000000000000&to_address=0x0000000000000000000000000000000000000000&asset=0x0030b738bc1de21c93ca066340f74a952881e0a4&block_number_min=17783798&block_number_max=17883798'

GET /v1/arbitrum/token-transfers

Paid: 0.003 USDC on Base through x402. Supply an exact Arbitrum token contract in asset and a canonical block range no wider than 100,000. The Arbitrum token transfers product returns up to 100 newest transfers.

curl 'https://obol.danieldutoit.net/v1/arbitrum/token-transfers?asset=0x0030b738bc1de21c93ca066340f74a952881e0a4&block_number_min=17783798&block_number_max=17883798'

GET /v1/address-labels

Hit-conditional: exact misses are free and return matched:false with charged:false. A known Ethereum, Bitcoin, or Tron label receives an x402 challenge for 0.01 USDC; the paid response returns the retained bounded label result.

curl 'https://obol.danieldutoit.net/v1/address-labels?chain=ethereum&address=0x1111111111111111111111111111111111111111'

GET /v1/sanctions/address-screening

Paid: 0.005 USDC on Base through x402. Checks one exact blockchain address against public-source EU, OFAC, and UK wallet observations. Returns match status, chain/token, source reference, observation dates, coverage limits, and no entity names. This is an informational screening aid, not legal advice.

curl 'https://obol.danieldutoit.net/v1/sanctions/address-screening?address=0x002471b8A185f9980708d0eAEC5B289714F56f8d'

An unpaid paid-resource request returns HTTP 402 with the x402 v2 requirements in the PAYMENT-REQUIRED header.

GET /health

Free service status.

GET /v1/cardano/stake-rewards

Cardano stake rewards are public chain data. Paid: 0.003 USDC on Base through x402. Supply an exact checksummed Cardano mainnet stake_address, one reward_type, and canonical earned_epoch_min and earned_epoch_max bounds spanning at most 1,000 epochs. Returns up to 100 newest rows containing only type, amount_lovelace, spendable_epoch, pool_id, and earned_epoch.

curl 'https://obol.danieldutoit.net/v1/cardano/stake-rewards?stake_address=stake1uyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqg6jacpu&reward_type=member&earned_epoch_min=1000&earned_epoch_max=2000'

GET /v1/markets/btc-usd/latest-candle

Latest Kraken BTC/USD candle. Paid: 0.001 USDC on Base through x402. This parameterless route returns the newest Kraken 60-second BTC/USD OHLCV candle. Informational only; not investment advice.

curl 'https://obol.danieldutoit.net/v1/markets/btc-usd/latest-candle'

GET /v1/markets/eth-usd/latest-candle

Latest Kraken ETH/USD candle. Paid: 0.001 USDC on Base through x402. This parameterless route returns the newest Kraken 60-second ETH/USD OHLCV candle. Informational only; not investment advice.

curl 'https://obol.danieldutoit.net/v1/markets/eth-usd/latest-candle'

GET /v1/markets/orderbook-top

Multi-exchange top-of-book exact snapshot. Paid: 0.001 USDC on Base through x402. Supply exactly exchange, timestamp, base, and quote. Supported exchanges: BINANCEUS, COINBASE, CRYPTOCOM, GEMINI, KRAKEN, and OKX. Returns one normalized best bid, best ask, and spread percentage snapshot or an exact miss. Informational only; not investment advice.

curl 'https://obol.danieldutoit.net/v1/markets/orderbook-top?exchange=COINBASE&timestamp=1788962867&base=BTC&quote=USD'

GET /v1/ethereum/address-cluster

Ethereum address cluster. Paid: 0.003 USDC on Base through x402. Supply exactly one Ethereum address. Returns up to 10 newest heuristic public-chain cluster assignments for the exact address. Heuristic clustering is not proof of ownership or identity.

curl 'https://obol.danieldutoit.net/v1/ethereum/address-cluster?address=0x00000000000062c6e2195ae26dff3b084c5c3938'

Preview label payment terms without spending

Use ordinary curl in a disposable directory: these commands overwrite preview.headers and preview.body. No wallet, credentials, signing or payment is needed. Use public addresses only, never private cases or customer records.

curl -sS --max-time 15 -D preview.headers -o preview.body \
  'https://obol.danieldutoit.net/v1/address-labels?chain=ethereum&address=0x00087a3b7b923dd2e1077c53bfa7d6aab3470848'

curl may exit successfully on HTTP 402. Inspect the status and PAYMENT-REQUIRED header; the body may be empty. Decode the saved header offline:

python3 -c 'import base64,json,pathlib; lines=pathlib.Path("preview.headers").read_text().splitlines(); values=[line.split(":",1)[1].strip() for line in lines if line.lower().startswith("payment-required:")]; assert len(values)==1,"expected one PAYMENT-REQUIRED header"; challenge=json.loads(base64.b64decode(values[0],validate=True)); print(json.dumps(challenge,indent=2))'

Check x402Version 2, exact payment, network eip155:8453, canonical Base USDC asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, amount and payTo against your approved terms and the exact requested resource. Current label price: 10000 base units (0.01 USDC); expected destination: 0x4094383033C1861E2686eaC4d4BBae6F0031F5d2. Use live terms, not an old example.

200 with matched:false and charged:false is a free exact miss, not proof of safety. 402 indicates a known hit requiring payment, not a returned label or settlement. 400 is invalid input; 429 is rate limiting; 503 is unavailability. A timeout is not a miss. No example is guaranteed to remain a hit or miss. Organization assertions do not prove identity, control, custody, deposit role or historical validity; do not use them to route transactions or terminate tracing.

Only proceed after explicit approval with a separately reviewed x402 v2 buyer client enforcing a per-call and total cap, bounded retries and exact terms. Stop on unexpected terms and do not blindly retry an uncertain paid outcome. See the official buyer-client guide. These preview commands never pay.