Why teams use it
Integrate with any stack
Series are identified by name, values travel as JSON, timestamps follow ISO 8601 with their time zone. Any language that speaks HTTP can read and write data: ETL jobs, trading applications, BI tools, cloud functions. There is no proprietary driver to install and no SQL to write.
Read the past as it was
Every series is versioned. One extra parameter returns any series as it was known at a given date: the forecast that was on screen when a decision was made, the data a report was built on. Backtests and audits rely on what was available at the time, not on what is known today.
Every write is traced
Each change to a series creates a new version, stamped with its date and its author. Writing data that has not changed creates nothing. You always know who changed what, and when.
Secure by design
Every script and application gets its own credentials, and read-only, read-write and admin roles control what each of them can do.
See it in action
Reading a wind power forecast, published four times a day, as it was known on 3 October at 09:00:
$ curl -G https://refinery.example.com/api/series/state \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode name=power.fr.wind.forecast \
--data-urlencode from_value_date=2026-10-05T10:00Z \
--data-urlencode to_value_date=2026-10-05T13:00Z \
--data-urlencode insertion_date=2026-10-03T09:00Z
{
"2026-10-05T10:00:00+00:00": 7805.0,
"2026-10-05T11:00:00+00:00": 7667.0,
"2026-10-05T12:00:00+00:00": 7533.0,
"2026-10-05T13:00:00+00:00": 7412.0
}
Writing works the same way. When a provider republishes its data, only what actually changed is stored, and the API answers with exactly that:
$ cat prices.json
{"2026-11-10T00:00Z": 112.4, "2026-11-10T01:00Z": 104.9}
$ curl -X PATCH https://refinery.example.com/api/series/state \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode name=power.fr.price.da \
--data-urlencode author=etl-bot \
--data-urlencode series@prices.json
{
"2026-11-10T00:00:00+00:00": 112.4,
"2026-11-10T01:00:00+00:00": 104.9
}
$ cat prices.json
{"2026-11-10T00:00Z": 112.4, "2026-11-10T01:00Z": 106.2}
$ curl -X PATCH https://refinery.example.com/api/series/state \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode name=power.fr.price.da \
--data-urlencode author=etl-bot \
--data-urlencode series@prices.json
{
"2026-11-10T01:00:00+00:00": 106.2
}
What you can do with it
- Read and write series, alone or in batches.
- Browse the revisions of any series and see who made them.
- Rebuild forecasts as they were known a given time ahead, for backtesting.
- Search the catalog by name or metadata.
- Register and evaluate formulas on the server.
- Work with groups of series, such as scenarios or weather ensembles.
The same operations are available from the Python API, as pandas objects. The complete reference is in the API documentation.