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 (uv)
uv sync --group dev
Useful commands:
uv run python
uv lock
Quickstart
from polaris_data import PolarisClient
with PolarisClient(api_key="polaris_key_your_key") as client:
local_files = client.download_snapshots(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-02T00:00:00Z",
)
print(local_files[0].path)
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.
Supported input time types
Methods that take from_ and to accept:
- ISO 8601 strings (
"2024-01-01T00:00:00Z") datetime.datetimedatetime.date- Unix epoch microseconds (
int/float)
Methods
Open endpoints:
health()catalog(exchange=None, asset=None)list_snapshots(exchange=..., asset=..., from_=..., to=..., limit=1000)list_local_snapshots(exchange=None, asset=None, date=None)iter_local_events(exchange=..., asset=..., from_=None, to=None)
Authenticated endpoints:
download_snapshots(exchange=..., asset=..., from_=..., to=..., force=False)replay(exchange=..., asset=..., from_=..., to=..., standard=True)(snapshot-first iterator over standardized events or/raw)trades(exchange=..., asset=..., from_=..., to=..., limit=1000)(collects all pages)events(exchange=..., asset=..., from_=..., to=..., limit=1000)(snapshot-first list for standardized events)raw(exchange=..., asset=..., from_=..., to=..., limit=1000)(prefersformat=file, falls back to paginated JSON)ohlcv(exchange=..., asset=..., from_=..., to=..., interval=..., format=None)
For event/data endpoints, standard=True is the default. Pass standard=False when you explicitly need raw schema payloads.
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 events, replay(...) and events(...) 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:
client.download_snapshots(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-03T00:00:00Z",
)
for row in client.replay(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-01T01:00:00Z",
):
print(row)
For notebook and local analysis workflows, use the local helpers directly:
from polaris_data import PolarisClient
with PolarisClient() as client:
local_entries = client.list_local_snapshots(exchange="binance", asset="BTC-USDT")
print(local_entries[0].path)
rows = list(
client.iter_local_events(
exchange="binance",
asset="BTC-USDT",
from_="2024-01-01T00:00:00Z",
to="2024-01-01T01:00:00Z",
)
)
print(len(rows))
If the requested standardized range cannot be satisfied from daily snapshots, the SDK falls back to the legacy /events?format=file flow.
Legacy replay cache
replay_cache_enabled and replay_cache_dir are kept for legacy replay behavior, including standard=False raw replays and standardized fallback-to-/events cases.
The default legacy replay cache path is:
<dataset_root>/cache/replay
Use replay_cache_enabled=False to disable caching, or replay_cache_dir=... to set a custom path.
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.5.1.tar.gz.
File metadata
- Download URL: polaris_data-0.5.1.tar.gz
- Upload date:
- Size: 55.2 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 |
fa08f13df324ac1072b1179ea88d7f4151ea133e6ca36a22d0efd4a2cc2182b3
|
|
| MD5 |
e67b3c9b6ea655b69e37de272d23e28b
|
|
| BLAKE2b-256 |
e66d895fb2125f6020ad2746e6fd92577f2f2b705d19c152bc8bcbaf07be0aa4
|
File details
Details for the file polaris_data-0.5.1-py3-none-any.whl.
File metadata
- Download URL: polaris_data-0.5.1-py3-none-any.whl
- Upload date:
- Size: 17.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 |
3842244f2d4b51816bcac1bc05ae1bf56042ccbea5cbeb37fd22d6598ad15436
|
|
| MD5 |
12de50e830ab45a30b9ca619f87417f7
|
|
| BLAKE2b-256 |
b8b2afd0c7f0747d777ffa61116a75fcf5204d8f73b5c5bf2dfe66ffaa0807b8
|