Tollbridge Docs
API

Market signals

Paid S01 regime decisions, and the S02 liquidation-risk route that honestly refuses — jevChoice distributions with honest refusals.

The S01 regime route is paid per the signals.evaluate PRICING key and returns an engine decision computed over the append-only decision ledger. The S02 route is wired the same way but not sold on this deployment: the market-wide liquidation tape is written from a named market-data provider and has not held 24 hourly observations for every market yet, so it honestly refuses and refunds. Availability is per market — GET /v1/liq/hours?asset=<symbol> reports that market's N/24 figure and GET /v1/signals reports it in sample_hours_by_asset; one market's hours never light another market's question. The live available set is derived from GET /v1/signals — see v1.

GET /v1/market/{asset}/regime (paid) — S01

The S01 market-regime decision: a jevChoice distribution over regime classes with the policy verdict.

curl -H "PAYMENT-SIGNATURE: <base64 payment payload>" \
  https://api.tollbridge.app/v1/market/BTC/regime

Response data: { question_id: "S01_market_regime", event, horizon: "60m", conditions, probability, confidence, decision, action, input_hash, state_hash, policy_version, choice: { choice_id, distribution } }. meta.probabilities mirrors the full regime distribution.

GET /v1/market/{asset}/risk (paid) — S02 — not sold on this deployment

Same shape as the regime route. The v1 venues expose no REST liquidations feed, so S02 honestly resolves to decision: "suppress" until that surface exists — never a fabricated cascade probability (see Refusals). It is not sold: the market-wide liquidation tape is not on record yet, so the ask gate is closed and the page lists it as not sold. The route stays readable so the refusal is inspectable.

curl -H "PAYMENT-SIGNATURE: <base64 payment payload>" \
  https://api.tollbridge.app/v1/market/ETH/risk

TypeScript

import { Tollbridge } from '@tollbridge/sdk-typescript';
import { account } from './wallet';

const paying = new Tollbridge({ baseUrl: 'https://api.tollbridge.app', x402: { signer: account } });

const regime = await paying.marketRegime('BTC'); // S01 market-regime signal
regime.meta.confidence;        // { value, basis: 'jev' } | null
regime.meta.horizon;           // decision horizon
regime.meta.pricing?.endpoint; // 'signals.evaluate'
regime.payment;                // typed PAYMENT-RESPONSE settlement receipt

const risk = await paying.marketRisk('ETH'); // S02 — honestly "suppress" in v1
risk.data.decision;

Python

import httpx

# Reference snippet — official Python SDK in progress.
# 1) unpaid call returns 402 with the base64 PAYMENT-REQUIRED challenge
r = httpx.get("https://api.tollbridge.app/v1/market/BTC/regime")
if r.status_code == 402:
    challenge = base64.b64decode(r.headers["PAYMENT-REQUIRED"])
    # sign the EIP-3009 authorization (USDC on Base) with your x402 client,
    # then retry with the PAYMENT-SIGNATURE header — any x402 SDK automates this.

MCP

GET /v1/market/{asset}/risk is proxied 1:1 by tollbridge_liquidation_risk. The S01 regime decision has no dedicated tool — run it through the deep-decision tool (tollbridge_decision, question_id: "S01_market_regime"):

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tollbridge_decision",
    "arguments": { "asset": "BTC", "chain": "base", "question_id": "S01_market_regime" }
  }
}

An unpaid call returns a structured payment_required challenge — never fabricated data.

On this page