aurastream
One API for crypto, FX, rates, macro, positioning and alternative data, from 47 sources, in one response format.
The official Python client for AuraStream by Unbiased Alpha. Pull Binance candles and funding, ECB and BIS statistics, FRED vintages, CFTC positioning and SEC filings with the same call, and get a clean pandas DataFrame back.
pip install "aurastream[pandas]"
The package installs as aurastream and imports as aurastream_client.
Free plan: 500 calls a month, no card. Get a key →
Quickstart
from aurastream_client import AuraStream
client = AuraStream() # reads AURASTREAM_API_KEY from the environment
# Bitcoin daily candles from Binance, with no provider account needed
btc = client.get_frame("BTCUSDT", "2025-01-01", "2025-06-30", source="binance")
# Several coins' closes in one wide DataFrame
prices = client.get_panel(["BTCUSDT", "ETHUSDT", "SOLUSDT"], "2024-01-01", "2025-01-01", source="binance")
prices.pct_change().corr()
# The ECB's daily EUR/USD reference rate
eurusd = client.get_frame("ECB,EXR,1.0/D.USD.EUR.SP00.A", "2024-01-01", "2025-01-01", source="sdmx", db="ECB")
Why AuraStream
- One endpoint, one schema. Stop writing a new adapter for every vendor. Every source returns
{ticker: {timestamp: {field: value}}}. - 47 sources. Binance, Bybit, Kraken, Deribit, Hyperliquid, dYdX, FRED, US Treasury, ECB/BIS/OECD (SDMX), World Bank, CFTC, SEC EDGAR, USDA WASDE, GDELT, TSA, and more, plus brokers and vendors you already have an account with (Oanda, Alpaca, Polygon...). Full list.
- Point-in-time where it matters. FRED series come with every revision, and CFTC data is stamped by release date, so your backtests don't peek.
- Bring your own keys. For sources that need an account (Oanda, Alpaca, Polygon, FRED…), your credentials pass through per request and are never stored.
Examples
| Notebook | What it shows | Sources (no provider account needed) |
|---|---|---|
| 01 – Crypto funding & carry | Perp funding rates vs. price, annualized carry | binance |
| 02 – Rates, FX and crypto regime dashboard | Bitcoin, ether, gold token, EUR/USD, USD/JPY, euro yields, Fed rate: drawdowns, the curve, rolling correlations | binance, sdmx |
| 03 – Speculative positioning (COT) | CFTC positioning vs. price for gold and the euro | cftc, binance, sdmx |
Every notebook opens in Google Colab and runs on the free plan.
Usage
Raw JSON
data = client.timeseries(["BTCUSDT", "ETHUSDT"], "2025-01-01", "2025-01-31", "1h", source="bybit")
Source-specific parameters
Pass any extra field as a keyword argument, and it goes straight into the request body:
# Binance USD-M perpetual funding rates
funding = client.get_frame("BTCUSDT", "2025-01-01", "2025-06-30", "8h",
source="binance", instrument="futures", bars="funding")
# CFTC Traders in Financial Futures report for euro futures
cot = client.get_frame("6E", "2020-01-01", "2025-01-01", "1w", source="cftc", report="tff")
Provider credentials
Pass credentials= explicitly, or set environment variables (the same names aurastream-mcp uses):
| Source | Variables |
|---|---|
fred |
FRED_API_KEY |
oanda |
OANDA_ACCOUNT_ID, OANDA_TOKEN, OANDA_ENVIRONMENT (default practice) |
signals, nemeton |
NEMETON_API_KEY |
cpi = client.get_frame("CPIAUCSL", "2020-01-01", "2025-01-01", "1m",
source="fred", credentials={"key": "YOUR_FRED_KEY"})
Large requests
The API stops a request after about 30 seconds. Split long histories into several date ranges, and long ticker lists with batch_size:
coins = ["BTCUSDT", "ETHUSDT", "SOLUSDT", "XRPUSDT", "BNBUSDT", "DOGEUSDT", "ADAUSDT", "LINKUSDT"]
data = client.timeseries(coins, "2025-01-01", "2025-06-30", "1h", source="binance", batch_size=4)
Each batch counts as one call against your allowance.
Errors and retries
The client retries rate limiting (429 Too Many Requests) and server errors with exponential backoff, three times by default. It never retries bad requests, auth errors, an exhausted monthly allowance or a timeout (504: split the request instead):
from aurastream_client import QuotaExceededError, BadRequestError
try:
client.timeseries("XAU_USD", "2025-01-01", "2025-02-01", source="oanda")
except BadRequestError as e:
print(e.message) # e.g. missing credentials
except QuotaExceededError:
print("Monthly allowance used: upgrade at aurastream.unbiased-alpha.com")
Also available
- MCP server for Claude and ChatGPT:
pip install aurastream-mcp(repo) - OpenBB extension:
pip install openbb-aurastream(repo) - REST docs: aurastream.unbiased-alpha.com/docs
Plans
| Plan | Calls / month | Price |
|---|---|---|
| Free | 500 | $0, no card |
| API Integration | 5,000 | $30 / month |
| Nemeton (order-book data and signals) | 50,000 | $250 / month |
License
MIT © Unbiased Alpha GmbH
Metadata
Release files for aurastream 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aurastream-0.1.0.tar.gz | 730.3 kB | With provenance | Details for aurastream-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aurastream-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for aurastream-0.1.0-py3-none-any.whl |
Total release size: 741.0 kB
Release files / aurastream-0.1.0.tar.gz
| Download URL | aurastream-0.1.0.tar.gz |
|---|---|
| Size | 730.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b810131fb6a83366d85007d440e46e87fbaa4ce450666295e1660d4ba401ffad
|
|
BLAKE2b-256 checksum How to use checksums |
e6bd7b334bbce0942adb55fb09ab25105a70d80fb0ea62b08814cb27c86322be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / aurastream-0.1.0-py3-none-any.whl
| Download URL | aurastream-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09554648805b6bfd20f01ddc458502106b01e880d0f3dd0d21bb550a1b0be74e
|
|
BLAKE2b-256 checksum How to use checksums |
c761751c173ff69e78a7880836c1fe1e2a05a19d3acba99dfeefab8e90c3989e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logSecurity for aurastream 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for aurastream-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.