← Back to app
◆ PUBLIC API

Read-only. Free. No key required.

Every endpoint below is the exact same data Rotator's own frontend reads — nothing held back, nothing behind a paywall or signup. This page exists so both human developers and AI agents can query it directly instead of scraping the UI.

All endpoints are standard PostgREST — plain HTTPS GET requests, JSON responses, filterable and sortable via query params.

No API key No rate-limit tier Read-only (write attempts are rejected)
Authentication
Every request needs the public anon key below as both the apikey header and a Bearer token — this is the same key already embedded in Rotator's own frontend JavaScript (visible to anyone via browser devtools), not a secret. It grants read-only access; Row Level Security on every table below rejects any insert/update/delete attempt regardless of what key is used.
apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Ind5dnd5Y2F0Z2V4cGJ1Z3prZGZ3Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzU0ODcwNTAsImV4cCI6MjA5MTA2MzA1MH0.msUPOUjd1iZwuG6SxFlhr-0xYPt6fqTUy5iOYnf8Z20 Authorization: Bearer <same value as apikey>
Base URL: https://wyvwycatgexpbugzkdfw.supabase.co/rest/v1/
Endpoints
GET /unified_market_data
Live price + 24h change for every tracked bStock (tokenized equity). Crypto's live feed is client-cached rather than persisted here — see signal_snapshots below for crypto's daily historical record instead.
curl "https://wyvwycatgexpbugzkdfw.supabase.co/rest/v1/unified_market_data?asset_type=eq.stock&select=*" \ -H "apikey: <anon key above>"
fieldtypenotes
asset_typetext'stock' (crypto is tracked separately, client-side)
symboltextdisplay ticker, e.g. 'AAPL'
nametextcompany name
pricenumericUSD
change_24hnumericpercent
source_nametext'binance' — these are Binance bStocks (tokenized certificates, not direct share ownership)
metadatajsonb{p7, p14, p30, volume24, binance_symbol}
last_updatedtimestamptzsynced once daily
GET /market_cycle
Real 200-day moving average + Mayer Multiple (price ÷ MA200) for BTC, ETH, BNB, SOL, XRP, PAXG. Only BTC has calibrated stretched/oversold bands — the 2.4×/0.8× thresholds are specific to Bitcoin's own multi-year price history. Treat the other five as raw ratios, not verdicts.
curl "https://wyvwycatgexpbugzkdfw.supabase.co/rest/v1/market_cycle?select=*" \ -H "apikey: <anon key above>"
fieldtypenotes
symboltext'BTC','ETH','BNB','SOL','XRP','PAXG'
pricenumericUSD, as of last sync
ma200numericreal average of actual daily closes, not an estimate
mayer_multiplenumericprice / ma200
sample_sizeintegerhow many daily closes actually went into ma200 — true 200-day only when this = 200
computed_attimestamptzsynced once daily
GET /rotation_snapshots
Every "rotate strong asset → weak asset" call Rotator has published, one row per pair per day, computed server-side using the exact same scoring formula as the live dashboard (momentum rank + macro relative strength + tokenomics). A call needs 7+ days of age before it's meaningful to grade — compare from_price/to_price against current prices yourself, or see the searchable, pre-graded version at /track-record.html.
curl "https://wyvwycatgexpbugzkdfw.supabase.co/rest/v1/rotation_snapshots?order=snap_date.desc&limit=20" \ -H "apikey: <anon key above>"
fieldtypenotes
snap_datedatethe day this call was made
from_id / from_symtextthe "rotate out of" coin (CoinGecko id / ticker)
from_price / from_scorenumericprice and composite score at call time
to_id / to_symtextthe "rotate into" coin
to_price / to_scorenumericprice and composite score at call time
sourcetextalways 'sync-rotation-snapshot' — a server-side cron, immune to whether anyone visited the site that day
GET /signal_snapshots
Rotator's longest-running, most complete published record — daily bullish/lagging single-coin calls since 2026-04-18. This is the real historical dataset behind the "Signal Track Record" accuracy figure shown on the main site.
curl "https://wyvwycatgexpbugzkdfw.supabase.co/rest/v1/signal_snapshots?snap_date=gte.2026-08-01&order=snap_date.desc" \ -H "apikey: <anon key above>"
fieldtypenotes
snap_datedate
coin_id / coin_sym / coin_nametext
signal_typetext'bullish' or 'lagging'
signal_labeltextdisplay label at call time
scorenumericcomposite score at call time
price / p24 / p7 / p30numericprice and momentum at call time
mcapnumericused for market-cap-aware confirmation thresholds — see track-record.html methodology
Rate limits & fair use
No API key tiers, no published hard rate limit — this runs on Supabase's free-tier infrastructure alongside the live site, so be reasonable: cache responses client-side (all of this updates once daily at most), avoid polling faster than every few minutes, and avoid parallel bulk-scraping. If you're building something that needs a real SLA or higher volume, reach out before you build against this at scale.
Scope, stated plainly: nothing on this page or the underlying scoring is a security audit, a long-term valuation, a usage/TVL metric, or sentiment analysis. The composite scores measure 7–30 day price momentum, macro relative strength, and (for crypto) supply/unlock mechanics — nothing else. A high score means "strong recent relative momentum with reasonable tokenomics", not "guaranteed future profit". This is not financial advice; nothing here, machine-readable or not, should be the sole basis for deploying capital.