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/regimeResponse 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/riskTypeScript
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.