Developers

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 send If-None-Match to 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.