Python SDK for the Polaris market data API
Project description
polaris-py
Python SDK for the Polaris API, optimized for notebook workflows and trading scripts. Documentation can be found at https://polaris.supply/docs
Install
Install the published SDK from PyPI:
pip install polaris-data
If you use uv, install it into a project with:
uv add polaris-data
Or install it into the active environment with:
uv pip install polaris-data
Quickstart
from polaris_data import PolarisClient
with PolarisClient(api_key="polaris_key_your_key") as client:
row_count = sum(
1
for _ in client.replay(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-01T01:00:00Z",
)
)
print(f"Replayed {row_count} rows")
If api_key is omitted, the client reads POLARIS_API_KEY from the environment.
PolarisClient API
PolarisClient is the main sync client for the SDK:
PolarisClient(
api_key=None,
base_url="https://api.polaris.supply",
timeout=30.0,
dataset_root=None,
)
Use it to inspect available data and query historical market data.
Discovery
health(): Check API availability.catalog(exchange=None, asset=None): Browse supported exchanges and assets.list_snapshots(exchange=..., asset=..., from_=..., to=..., limit=1000): List available snapshot files for a time range.
Historical data
replay(exchange=..., asset=..., from_=..., to=..., standard=True, parallel=False): Stream historical events for backfills, notebooks, or replay-style processing.events(exchange=..., asset=..., from_=..., to=..., limit=1000): Return standardized historical events as a list.trades(exchange=..., asset=..., from_=..., to=..., limit=1000): Return standardized trade events as a list.raw(exchange=..., asset=..., from_=..., to=..., limit=1000): Return raw exchange payloads as a list.ohlcv(exchange=..., asset=..., from_=..., to=..., interval=..., format=None): Aggregate OHLCV bars from standardized trade data.
For historical event queries, standard=True is the default. Pass standard=False when you explicitly want raw schema payloads through replay(...). Methods that take from_ and to accept ISO 8601 strings, datetime, date, or Unix epoch microseconds.
Example:
from polaris_data import PolarisClient
with PolarisClient(api_key="polaris_key_your_key") as client:
catalog = client.catalog()
print(catalog)
rows = client.events(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-01T01:00:00Z",
)
print(len(rows))
Example response shape:
{
"exchanges": [
{"id": "binance", "assets": ["BTC-USDT"]},
{"id": "hyperliquid", "assets": ["BTC", "ETH"]},
]
}
Local dataset storage
Standardized snapshots and local day files are stored under the shared Polaris app-data root so the Python SDK and CLI can reuse the same files.
Default roots:
- macOS:
~/Library/Application Support/polaris - Linux:
$XDG_DATA_HOME/polarisor~/.local/share/polaris - Windows:
%APPDATA%\\polaris
Within that root, the SDK uses the same layout as the CLI:
<root>/
data/
daily/
tmp/
cache/
locks/
Pass dataset_root=... to PolarisClient(...) to override the root explicitly.
POLARIS_ROOT overrides the shared root globally.
POLARIS_DATASET_DOWNLOAD_DIR is still accepted as a deprecated compatibility override.
Snapshot-first replay
For standardized historical data, replay(...), events(...), trades(...), and default/tradingview ohlcv(...) now prefer /snapshots + /snapshots/download and read from local day files when they already exist:
from polaris_data import PolarisClient
with PolarisClient(api_key="polaris_key_your_key") as client:
for row in client.replay(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-01T01:00:00Z",
):
print(row)
If the requested standardized range cannot be satisfied from daily snapshots, the SDK falls back to the legacy /events?format=file flow for standardized replay, event, trade, and local OHLCV derivation.
Error handling
from polaris_data import PolarisClient, RateLimitedError, UnauthorizedError
client = PolarisClient()
try:
client.replay(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-01T01:00:00Z",
)
except UnauthorizedError:
print("API key is required")
except RateLimitedError as err:
print(f"Rate limited. Reset at: {err.reset_at}")
Tests
uv run pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file polaris_data-0.6.0.tar.gz.
File metadata
- Download URL: polaris_data-0.6.0.tar.gz
- Upload date:
- Size: 56.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f8f4c93a7a3447660f3c628ca6665e677c39da31367ac691b28c4b54a2fcfb2
|
|
| MD5 |
1f021b768d63a41012b0c8d2f503c1e8
|
|
| BLAKE2b-256 |
c9887cf389f742c01432ec27c1dc7485225214cb9ee1476fb7ab4a7425832030
|
File details
Details for the file polaris_data-0.6.0-py3-none-any.whl.
File metadata
- Download URL: polaris_data-0.6.0-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb5a5ce9e98a6926f92804273ca0ac0f85866663f033bec33c7b7b8c1096abde
|
|
| MD5 |
48636ba4b3f5cbdac7a58314f625a92b
|
|
| BLAKE2b-256 |
a8f08ef92c1fc06de98175db43915c30c9b56e0b6012411303f79e8a9eadb268
|