Unary market-data calls are public. Realtime is always included; the legacy realtime Cargo
feature is a no-op compatibility flag. Subscribe helpers usually need hydrated catalogs for symbol
resolution. There is no client.candles alias, use client.market_data.
use polyester::{Client, Config};
let client = Client::new(Config { hydrate_catalogs: true, ..Default::default() })?;
client.wait_for_catalogs().await?;Typed streams use recv().await. Managed order-book / overview books use updates().recv().await.
Symbols
Prefer "BTC-USDT". Call wait_for_catalogs().await? before symbol-string subscribe helpers.
Market overview
use polyester::services::{ListMarketOverviewOptions, MarketOverviewCreateSubscriptionOptions};
let overview = client.market_overview.list(Some(50)).await?;
println!("{} markets", overview.markets.len());
let mut sub = client
.market_overview
.create_subscription(MarketOverviewCreateSubscriptionOptions {
limit: Some(50),
..Default::default()
})
.await?;
while let Some(rows) = sub.updates().recv().await { let _ = rows; break; }Candles
let result = client.market_data.get_candles("BTC-USDT", "1h", Some(200)).await?;
let mut live = client.market_data.subscribe_candles("BTC-USDT", "1m").await?;
while let Some(c) = live.recv_result().await? { println!("{}", c.close); break; }Row candle results are newest-first, with an included open candle prepended; use .first() for
latest and reverse/sort by ts_sec for indicators. Candle columns are oldest-first.
Order book
use polyester::services::CreateSubscriptionOptions;
let book = client.orderbook.get("BTC-USDT", Some(20)).await?;
let mut sub = client
.orderbook
.create_subscription(CreateSubscriptionOptions {
symbol: "BTC-USDT".into(),
depth: Some(50),
..Default::default()
})
.await?;
while let Some(b) = sub.updates().recv().await { println!("{}", b.book_seq); break; }Public trades
let tape = client.market_data.get_trades("BTC-USDT", Some(20)).await?;
let mut sub = client.market_data.subscribe_trades("BTC-USDT").await?;
while let Some(t) = sub.recv_result().await? { println!("{:?}", t.price); break; }Private fills are client.trades, not the public tape.
Heatmap & chain analytics
client.heatmap and client.chain_analytics for L2 heatmap and chain analytics reads.