Scripted-download API
Pull the datasets you own - or everything, with All-Access - on a schedule, straight into your warehouse or notebook. A tiny REST surface, Bearer-key auth, and conditional downloads so a pipeline only re-fetches when a build actually changed. Included with every purchase and every subscription - no extra cost.
Authentication
Every request carries your personal API key as a Bearer token. Get or rotate it on your account page - it's tied to your account, treat it like a password.
Authorization: Bearer rs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
List your datasets
GET /api/v1/datasets - every dataset, each with a downloadable flag
(true if you own it or have an active subscription) and its span_end / build date so you can
tell when new data landed.
curl -s -H "Authorization: Bearer rs_…" https://getreadyset.app/api/v1/datasets
Download a dataset
GET /api/v1/download/<key> - the full cleaned Parquet, zipped. -J
keeps the server-suggested filename.
curl -fOJ -H "Authorization: Bearer rs_…" https://getreadyset.app/api/v1/download/european-day-ahead-prices
Don't re-download unchanged data
Downloads carry an ETag and Last-Modified. Send them back with
If-None-Match / If-Modified-Since and you get a cheap 304 Not Modified
(no body, no bandwidth, no fair-use hit) whenever the build hasn't changed - so a weekly cron only pulls the
megabytes when there's genuinely new data.
# save the validator on first pull, then revalidate on every run:
curl -sI -H "Authorization: Bearer rs_…" https://getreadyset.app/api/v1/download/european-day-ahead-prices | grep -i etag
curl -f -H "Authorization: Bearer rs_…" -H 'If-None-Match: "1720000000-4832177"' \
https://getreadyset.app/api/v1/download/european-day-ahead-prices # → 304 if unchanged
Limits
Hard numbers so you can size your retry logic:
- Download (
/api/v1/download): 300 requests/hour. - Listing (
/api/v1/datasets): 60 requests / 5 min. - Full-download volume cap: 1230 full downloads per rolling 24 h (sized to the catalogue - ~5 pulls per dataset - and grows as it does). 304 revalidations do NOT count, so a daily cron that mostly gets 304s effectively never touches this.
- Over a limit returns
429 Too Many Requests- back off and retry, or sendIf-None-Matchto revalidate for free.
These are sized for scheduled pulls, not redistribution. Need genuine high-volume access? Get in touch.
Data semantics - latest-revised, not point-in-time
Each endpoint returns the latest revised data from the upstream source. When an agency revises a past figure (Eurostat/GDP restating a prior quarter, etc.), the next build reflects the revision - we do not serve as-first-published (point-in-time) vintages. If you're backtesting, treat these as revised series and account for look-ahead bias. Need PiT snapshots for a specific series? Tell us.
Joined panels align by target period, not by publication date. In a combined panel (e.g. monthly inflation joined to monthly air passengers), each row carries every series' value for that period - but upstream agencies publish those series with different lags, so not all of a row's values were actually known on the first day of the next period. Apply appropriate per-series publication lags in your feature engineering before backtesting.
Don't own anything yet? Browse the catalogue or go All-Access for the whole thing.