photonichat · quote APIFastAPI

Live markets

Hyperliquid live WS + Sina · browser↔server WS …

warming up the live feed…

News

world · business · tech · crypto — merged & deduped, newest first

loading headlines…

Settings

global config — shared for everyone · password-gated

Homepage marketswhat the Markets page shows

Featured chartstop finviz-style charts · search Hyperliquid markets to add, × to remove
Live marketsHyperliquid tickers shown in the category grid
Sina / A-sharesA-shares & FX are searchable; other Sina codes (hk00700, gb_aapl, hf_GC) can be typed + Enter

Admin passwordchanging it logs out every remembered browser

Rate limitingper-window 429 throttle · applies to requests that reach Python

Live trafficclients hitting the API right now · counts are per limiter window

loading…
Blocked IPs / CIDRsbanned clients get 429 on every request · add an IP or CIDR, or use the Block button above

Sessionthis browser stays unlocked until the cookie expires or you log out

About

A tiny FastAPI quote-proxy for the photonichat ESP32 clock — global equities, FX, futures, metals, crypto and Hyperliquid live markets (crypto perps + tokenized equities, commodities, FX & indices), all in one JSON shape.

Sources: Hyperliquid · Sina Finance · CoinGecko · eToro · open-meteo. Interactive API docs at /docs · device integration guide for building a client.

Watchlist

shared lists · saved on the server · visible & editable by everyone · ☆ any market to add

eToro markets

browse 15,000+ instruments — stocks, crypto, ETFs, commodities, FX & indices

loading eToro markets…

Endpoints

Read-only HTTP GET, no auth, CORS-open, JSON (CSV/WS where noted).

MethodPathReturnsTry it
Unified API /api/v1 · just pass a name — we smart-route the feed
GET/api/v1/q/{name} One quote, any market. Pass a plain instrument name — we resolve it to its best live feed (Hyperliquid / Sina / eToro). One JSON shape for everything. usdjpy · btc · aapl · 600519 · gold
GET/api/v1/q?syms=A,B,C Batch — each name resolved independently (mix any markets) btc,usdjpy,aapl,600519,gold,sp500
WS/api/v1/ws Live stream — {"op":"subscribe","syms":["btc","usdjpy"]}; we push {"channel":"quotes","data":[…]} snapshots every ~3s WS client
Native per-feed routes (still available; the unified API wraps these)
GET/q/{symbol} Single-symbol JSON quote sh600519 · hk00700 · gb_aapl
GET/q?syms=A,B,C Batch JSON (one upstream request) /q?syms=…
GET/quote/{symbol} Full quote: name, price, change, change_pct, currency, exchange, ts /quote/sh600519
GET/metals Gold + silver USD/oz/metals
GET/crypto?ids=… CoinGecko USD prices + 24h change /crypto
GET/clock?stocks=…&coins=… One-shot bundle: stocks + metals + crypto /clock
GET/symbols · /symbols/search Curated catalog + full A-share universe search /symbols · search 茅台
Hyperliquid · live markets & WS hub
GET/hl/markets?q=&category=&dex= Browse/search every HL market (crypto, equities, commodities, FX, indices) with price + 24h change equities · commodities
GET/hl/search?q=… Substring search across HL markets (ranked by liquidity) nvda · gold
GET/hl/quotes?syms=… Enriched quotes + change% — friendly aliases (NVDAUSDTxyz:NVDA) BTC,ETH,NVDA,MU,GOLD,SP500
GET/hl/{coin} CSV COIN,price,ts (ESP32-friendly; equities work too) /hl/BTC · /hl/NVDA
GET/hl?syms=A,B,C Batch live mids from the WS hub BTC,ETH,SOL
WS/hl/ws Fan-out proxy for wss://api.hyperliquid.xyz/ws WS client
GET/hl/book/{coin} · /hl/trades/{coin} · /hl/candle/{coin}/{iv} L2 book · last trades · latest candle (from the WS hub) book · trades · candle
GET/hl/candles/{coin}?interval=&limit= OHLCV candle series (powers the homepage charts; builder-dex names auto-resolved) BTC 1h · GOLD 1d
GET/hl/stats Hub + markets-catalog diagnostics/hl/stats
eToro · ~15k markets (public market-data CDN)
GET/etoro/markets?q=&category=&page= Browse every eToro market (crypto, stocks, ETFs, commodities, FX, indices) with last close + weekly change crypto · stocks
GET/etoro/search?q=… Substring search across all eToro instruments apple · tesla
GET/etoro/quotes?syms=… Enriched quotes + daily change% — accepts ticker, instrument id, or name AAPL,BTC,GOLD,TSLA
GET/etoro/candles/{symbol}?interval=&limit= OHLC candle series (powers the eToro charts) AAPL 1d · BTC 1h
GET/etoro/stats eToro catalog diagnostics/etoro/stats
GET/news?sym=… · /news?syms=A,B per-instrument news (Google-News RSS, merged across syms) /news?sym=NVDA
GET/news/general?topic=&lang=&limit= merged world/business/tech headlines (multi-source, deduped, newest-first) /news/general?topic=business

Unified API /api/v1 — one name in, best live quote out

Don't make the caller learn a different route per market. Pass a plain instrument name to /api/v1/q/{name} (or a list to /api/v1/q?syms=…, or subscribe over /api/v1/ws) and we resolve it to the best live feed we carry. Hyperliquid is live 24/7, Sina is live during market hours, eToro is the daily-close fallback. Every response is the same JSON shape regardless of upstream:

GET /api/v1/q/usdjpy
{
  "input": "usdjpy", "symbol": "FX_SUSDJPY", "name": "美元日元",
  "price": 157.23, "change": 0.41, "change_pct": 0.261, "change_basis": "1d",
  "currency": "", "category": "fx", "feed": "Sina", "live": true,
  "hours": "", "icon": null, "ts": 1749999999, "ts_utc": "2026-06-12T…Z"
}

Routing table (first match that returns a price wins):

If the name looks like…ExampleFeedLiveness
a 6-letter FX pairusdjpy, eurusdSina fx_s…live 24/5
an A-share code / Chinese name600519, sh600519, 茅台Sinalive (CN hours)
a Hong Kong codehk00700, 0700.HKSinalive (HK hours)
listed on Hyperliquidbtc, nvda, gold, sp500Hyperliquidlive 24/7
maps to a Sina codeaapl, gc, ^gspcSinalive
listed on eToro (anything else)~15k stocks / ETFs / fundseTorodaily close

Stream (/api/v1/ws). Subscribe by name and get pushed snapshots:

// client → server
{"op":"subscribe","syms":["btc","usdjpy","aapl","600519"]}
{"op":"unsubscribe","syms":["aapl"]}
{"op":"ping"}
// server → client
{"channel":"ack","op":"subscribe","syms":["600519","aapl","btc","usdjpy"]}
{"channel":"quotes","data":[ /* same objects as /api/v1/q */ ],"ts":…}
{"channel":"pong"}

Hyperliquid market search

The catalog polls the Hyperliquid info endpoint across the core perp dex and every HIP-3 builder dex, so you can discover and quote far more than crypto: tokenized equities (NVDA, MU, TSLA, AAPL, COIN, MSTR…), commodities (GOLD, SILVER, CL…), FX (EUR, JPY, DXY…) and indices (SP500, JP225, VIX…). Use the search box above or /hl/markets. Friendly aliases are accepted: NVDAUSDT, nvda and xyz:NVDA all resolve to the same market.

Symbol formats (Sina / CoinGecko)

Native hq.sinajs.cn codes work as-is; Yahoo-style aliases are auto-translated.

MarketNative codeAlias accepted
Shanghai A-sharesh600519600519.SS
Shenzhen A-sharesz000001000001.SZ
Hong Konghk007000700.HK
US stockgb_aaplAAPL
Index (intl)int_sp500, int_nasdaq^GSPC, ^IXIC
Forexfx_susdcnyUSDCNY=X
NYMEX futurehf_GC, hf_CLGC=F, CL=F
Spot metalhf_XAU, hf_XAGXAUUSD, XAGUSD

Full A-share universe

loading universe…

browse SH · browse SZ · browse BJ · browse all — or use the search box at the top (Chinese names work, e.g. 茅台). Cached to disk for 7 days; refresh via /symbols/reload.

Curated catalog

Hand-picked highlights across markets. Full list as JSON: /symbols.

A-shares (Shanghai) · 8 symbols
SymbolName
sh600000Pudong Development Bank
sh600036China Merchants Bank
sh600519Kweichow Moutai
sh600490Penghui Energy
sh601318Ping An Insurance
sh601398ICBC
sh601857PetroChina
sh688981SMIC (STAR Market)
A-shares (Shenzhen) · 8 symbols
SymbolName
sz000001Ping An Bank
sz000002Vanke
sz000333Midea Group
sz000651Gree Electric
sz000725BOE Technology
sz000858Wuliangye
sz300750CATL
sz300760Mindray Medical
Hong Kong · 9 symbols
SymbolName
hk00700Tencent
hk00939CCB
hk00941China Mobile
hk01024Kuaishou
hk01299AIA
hk01810Xiaomi
hk03690Meituan
hk09988Alibaba
hk09618JD.com
US stocks (gb_) · 12 symbols
SymbolName
gb_aaplApple
gb_msftMicrosoft
gb_googlAlphabet
gb_amznAmazon
gb_nvdaNVIDIA
gb_tslaTesla
gb_metaMeta
gb_nflxNetflix
gb_amdAMD
gb_babaAlibaba ADR
gb_pddPDD Holdings
gb_nioNIO
Indices · 10 symbols
SymbolName
sh000001Shanghai Composite
sz399001Shenzhen Component
sz399006ChiNext
sh000300CSI 300
int_sp500S&P 500
int_nasdaqNasdaq Composite
int_djiDow Jones
int_hangsengHang Seng
int_nikkeiNikkei 225
int_ftseFTSE 100
Forex (fx_) · 8 symbols
SymbolName
fx_susdcnyUSD/CNY
fx_susdhkdUSD/HKD
fx_susdjpyUSD/JPY
fx_seurusdEUR/USD
fx_sgbpusdGBP/USD
fx_saudusdAUD/USD
fx_susdsgdUSD/SGD
fx_susdkrwUSD/KRW
Commodity futures (NYMEX, hf_) · 9 symbols
SymbolName
hf_GCGold (NY)
hf_SISilver (NY)
hf_CLWTI Crude Oil
hf_NGNatural Gas
hf_HGCopper
hf_PLPlatinum
hf_PAPalladium
hf_XAUSpot Gold (XAUUSD)
hf_XAGSpot Silver (XAGUSD)
Crypto (CoinGecko ids) · 7 symbols
SymbolName
bitcoinBTC
ethereumETH
solanaSOL
binancecoinBNB
rippleXRP
cardanoADA
dogecoinDOGE

Agent / ESP32 integration

Everything is read-only GET, no auth, CORS-open, JSON. Rules for an AI or embedded client:

# every quote object shares one shape:
GET /quote/gb_nvda
GET /q?syms=sh600519,hk00700,gb_aapl,int_sp500
GET /clock?stocks=gb_aapl,gb_tsla&coins=bitcoin,ethereum
GET /hl/quotes?syms=BTC,ETH,NVDA,MU,GOLD       # Hyperliquid, with change%
GET /hl/NVDA                                    # -> NVDA,228.85,1780396053  (CSV)
GET /symbols/search?q=茅台