Quickstart

Make your first request to the CompostIQ open API in about five minutes. You don't need an account or a key.

Base URL
https://api.compostiq.win
Format
JSON, times in UTC
Rate limit
60 requests a minute per IP
1

Check the API is up

Ask for the headline numbers. If this works, everything else will too.

Terminal
$ curl https://api.compostiq.win/public/stats
Response · 200
{
  "bins": 3,
  "countries": 1,
  "methods": 3,
  "active_devices": 3,
  "readings_total": 568,
  "readings_24h": 4,
  "first_reading_at": "2026-08-18T00:00:00Z",
  "last_reading_at": "2026-10-06T20:00:00Z",
  "updated_at": "2026-10-06T20:00:00Z"
}
2

Fetch some readings

Readings come one row per bin per hour, oldest first. Filter them with query parameters; these three are the ones you'll use most.

Terminal
$ curl -G https://api.compostiq.win/research/readings \
    -d method=takakura \
    -d from=2026-08-18T00:00:00Z \
    -d limit=100
methodtakakura, bokashi or aerated_static_pile
fromEarliest hour to include, ISO 8601 in UTC
limitRows per page. Default 500, maximum 5000

Every filter is in the API reference.

3

Load them into pandas

The items array drops straight into a DataFrame.

Python
import pandas as pd
import requests

resp = requests.get(
    "https://api.compostiq.win/research/readings",
    params={"method": "takakura", "limit": 1000},
    timeout=30,
)
resp.raise_for_status()

df = pd.DataFrame(resp.json()["items"])
df["recorded_at"] = pd.to_datetime(df["recorded_at"])
print(df[["recorded_at", "temperature_c", "stage_name"]].head())
4

Page through everything

When there are more rows, the response carries a next_cursor. Send it back as cursor until it comes back null.

Python
url = "https://api.compostiq.win/research/readings"
params = {"limit": 5000}
rows = []

while True:
    page = requests.get(url, params=params, timeout=30).json()
    rows += page["items"]
    if not page["next_cursor"]:
        break
    params["cursor"] = page["next_cursor"]

Pulling the whole dataset? The bulk file below is faster and doesn't count against your rate limit.

5

Or download a file

A snapshot of the whole dataset as CSV and JSON, with the same fields as the API. For now it holds the simulated preview data.

6

Cite the data

The data is free to use with credit. The open data page has the licence and a ready-made citation.

Next steps