Skip to main content
The Shumi API returns market data and verdicts as JSON over HTTPS. The CLI and the MCP server both call it.
Data routes live under /api/cli. GET /api/cli/manifest is public and lists the priced routes with their price and refresh interval.

Authenticate a request

Every data route needs a bearer token in the Authorization header.
Without a token the API answers 403 AUTH_REQUIRED. With a malformed, unknown, expired or revoked one it answers 401 AUTH_INVALID.

Read the response

Every data route except the plain-word question route returns the same envelope: schemaVersion, data and meta. This is GET /api/cli/signal/BTC with evidence cut to one line.
Check data_age_seconds before you act on a funding rate or a price. Prices are live, funding and signals refresh every hour and the screener every 4 hours. Coverage has the full table.

Handle an error

A failed call replaces data with error.
On upstream errors, error.details carries upstreamStatus and the upstream body.
POST /api/cli, the plain-word question route, returns { "text": "...", "steps": [...] } and a bare { "error": "..." } on failure. Every other route uses the envelope above.

Know what a call costs

On the Free plan, every call to a data route counts as one question: 10 to start, then 1 per day, resetting at 00:00 UTC. After that, a priced route answers 402 Payment Required with an x402 challenge: 0.005 USDC per data call, 0.05 USDC for a plain-word question, pairs or walkforward. Plus is $20 a month for 50 questions a day; Pro is $200 a month with no limit. To see which plan the API applies to your token:
GET /api/cli/billing/tier and GET /api/cli/manifest never count against your quota and never ask for payment. For a bot or dashboard on a timer, Run a bot or dashboard shows which calls to repeat and which to save for a change.

Stream live data

GET /api/cli/watch/{stream} keeps the connection open and sends one JSON object per line.
A Free account can stream while it has questions left. Once the quota is spent, a stream answers 429 RATE_LIMITED before the first line. Streams cannot be paid per call.