The Sapere API

The desk's graded record, its calls, and its market intelligence, as read-only endpoints. Every call is timestamped before its outcome. The API and public permalinks resolve the same source record. Research, not financial advice.

base url
https://app.sapere.one/v1
auth
X-API-Key header
format
JSON over HTTPS
spec
openapi.json

Public Desk snapshot

One unauthenticated, versioned snapshot serves the Sapere Desk Agent. It carries delayed calls, resolved results, research links, and source times.

curl https://app.sapere.one/api/public/desk

Access and rate limits

Keys are issued per tier. Rate limits are enforced per key on a sliding one-minute window; a breach returns 429 and costs nothing but the wait. Observer keys receive the full record on a genuine 24-hour delay — the delay is the free tier, not a degraded product.

tierrateaccess
Observer60 req/minfull record on a genuine 24h delay; no radar
Analyst60 req/minthe live record, calls as they publish, and the emergence-radar headline
Desk120 req/minlive access, the intelligence surface, and the radar audit trail
Terminalcustomcontracted throughput and support

Key issuance is currently by arrangement while the desk operates in its calibration window — join the waitlist and self-serve keys arrive with accounts.

Quickstart

curl
curl -H "X-API-Key: sk_sapere_…" \
  https://app.sapere.one/v1/record
Python
import requests

r = requests.get(
    "https://app.sapere.one/v1/calls",
    headers={"X-API-Key": "sk_sapere_…"},
    params={"limit": 20},
    timeout=15,
)
for call in r.json()["calls"]:
    print(call["symbol"], call["direction"], call["status"], call["pnl_pct"])
TypeScript
const res = await fetch("https://app.sapere.one/v1/intelligence/BTC", {
  headers: { "X-API-Key": process.env.SAPERE_API_KEY! },
});
const intel = await res.json();
console.log(intel.composite_score, intel.direction);

Endpoints

GET /record

The graded track record

The full audit trail and the clean era (entry-integrity, net of modeled execution costs), each with Wilson 95% intervals on rates and a bootstrap interval on expectancy. This is the number the rest of the product stands on.

fieldtype
full · cleanobjectrecord blocks: n, wins, losses, win_rate, win_rate_ci, expectancy_pct, expectancy_ci, avg_win_pct, avg_loss_pct, profit_factor
clean_era_startstringISO timestamp of the clean-era boundary
methodologystringhow pnl_pct is computed, in plain language
curl -H "X-API-Key: sk_sapere_…" https://app.sapere.one/v1/record

GET /calls

Graded and open calls

Every major call, newest first, in the same projection the public permalinks render. Observer-tier keys receive nothing newer than 24 hours.

parametertype
limitint ≤ 100page size, default 50
offsetintpagination offset, default 0
fieldtype
iduuidstable call id; permalink is app.sapere.one/call/{id}
symbol · direction · leveragestring · string · numberthe call itself
entry · stop · targetnumberpublished levels, immutable once opened
status · pnl_pct · close_reasonstring · number|null · string|nulloutcome; pnl_pct is null while open, net of costs when closed
pnl_pct_gross · fees_pct · funding_pct · slippage_pctnumber|nullthe execution-cost breakdown behind the net figure
regime_tag · composite_scorestring|null · number|nullmarket regime and signal composite at open
committee_action · book_status · synthesis_convictionstring · string · number|nullthe dual ledger on every call: the committee's direction, whether the book sized the ask in full or trimmed it to cap headroom (sized | sized_trimmed), and the desk's blended conviction at open (null for calls before the synthesis era)
curl -H "X-API-Key: sk_sapere_…" "https://app.sapere.one/v1/calls?limit=20"

GET /calls/{id}

One call by id

A single major or prediction call, resolved by the same rules as the public permalink. Predictions carry the side, stated confidence, market-implied entry, and settled alpha versus the market.

fieldtype
kind"major" | "prediction"which projection the payload carries
question · side · confidencestring · YES|NO · intprediction calls only
implied_entry · alpha_vs_marketnumber · number|nullthe market's price at call time, and the settled Brier edge against it
curl -H "X-API-Key: sk_sapere_…" https://app.sapere.one/v1/calls/<uuid>

GET /intelligence/{symbol}

The latest signal card

The current quantitative read for one covered major: composite score, direction, and the trend, momentum, volatility and volume legs behind it.

fieldtype
composite_score · directionnumber · stringthe headline signal
trend_score · momentum_score · volatility_score · volume_scorenumberthe component legs
key_signals · atr_value · fng_valueobject · number · numbernamed drivers, ATR, and the fear-and-greed read
computed_atstringsignal freshness — cycles run continuously
data_primarystringthe venue serving this market's spot OHLCV, and so the substrate under every score above. "coinbase" for most majors; markets Coinbase does not list name their own venue
curl -H "X-API-Key: sk_sapere_…" https://app.sapere.one/v1/intelligence/BTC

GET /radar

Emergence radar — the WATCH list

New-listing WATCH candidates the radar has detected, verified for safety, and scored — highest score first. Display-only intelligence: every row is `sized: false` and outside the majors universe. Analyst tier and above only (observer keys receive 403); analyst gets the headline, desk and up also receive the audit trail.

parametertype
limitint ≤ 100page size, default 50
offsetintpagination offset, default 0
fieldtype
symbol · score · bandstring · number · stringthe candidate, its 0–1 emergence score, and the band (watch | probe | promotion)
catalyst_tagsstring[]why it surfaced: listing venue, event type, perp build, ranked
sized · in_universefalse · falsealways false — radar is intelligence, never a trade, and never a major
audit_flags · coingecko_id · componentsstring[] · string · objectthe audit trail (desk tier and up): verification caveats (e.g. volume_unverified), the canonical id, and the score component breakdown
curl -H "X-API-Key: sk_sapere_…" "https://app.sapere.one/v1/radar?limit=20"

How the numbers are produced is documented on the methodology page; method and product changes are logged in Desk Notes.