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>"
| field | type | notes |
|---|---|---|
| asset_type | text | 'stock' (crypto is tracked separately, client-side) |
| symbol | text | display ticker, e.g. 'AAPL' |
| name | text | company name |
| price | numeric | USD |
| change_24h | numeric | percent |
| source_name | text | 'binance' — these are Binance bStocks (tokenized certificates, not direct share ownership) |
| metadata | jsonb | {p7, p14, p30, volume24, binance_symbol} |
| last_updated | timestamptz | synced 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>"
| field | type | notes |
|---|---|---|
| symbol | text | 'BTC','ETH','BNB','SOL','XRP','PAXG' |
| price | numeric | USD, as of last sync |
| ma200 | numeric | real average of actual daily closes, not an estimate |
| mayer_multiple | numeric | price / ma200 |
| sample_size | integer | how many daily closes actually went into ma200 — true 200-day only when this = 200 |
| computed_at | timestamptz | synced 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>"
| field | type | notes |
|---|---|---|
| snap_date | date | the day this call was made |
| from_id / from_sym | text | the "rotate out of" coin (CoinGecko id / ticker) |
| from_price / from_score | numeric | price and composite score at call time |
| to_id / to_sym | text | the "rotate into" coin |
| to_price / to_score | numeric | price and composite score at call time |
| source | text | always '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>"
| field | type | notes |
|---|---|---|
| snap_date | date | |
| coin_id / coin_sym / coin_name | text | |
| signal_type | text | 'bullish' or 'lagging' |
| signal_label | text | display label at call time |
| score | numeric | composite score at call time |
| price / p24 / p7 / p30 | numeric | price and momentum at call time |
| mcap | numeric | used 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.