Use without a key
Every endpoint answers without an API key, at 30 requests per minute. No sign-up, no token, no header.
The Grid API is open: a request with no API key is answered. No sign-up, no token and no header are needed to read European power system data (day-ahead prices, load, generation by type, forecasts, cross-border flows, balancing, grid frequency).
This call works as it is, from any terminal or agent:
curl "https://grid.rebase.energy/api/v1/entities/SE-SE3/timeseries/price.day_ahead.day_ahead_auction_price/values?provider=entsoe&start=2026-11-09T00:00:00Z&end=2026-11-10T00:00:00Z"import requests
API = "https://grid.rebase.energy/api/v1"
name = "price.day_ahead.day_ahead_auction_price"
r = requests.get(
f"{API}/entities/SE-SE3/timeseries/{name}/values",
params={"provider": "entsoe", "start": "2026-11-09T00:00:00Z", "end": "2026-11-10T00:00:00Z"},
)
points = r.json()["points"] # [{"valid_time": ..., "value": ..., "knowledge_time": ...}, ...]Replace SE-SE3 with another price zone (DE-LU, FR, NO-NO1, DK-DK1, …) and the name with
another timeseries. Search finds the names on an entity, and the
quickstart walks through the three steps; both work without a key.
Without a key and with one
| Without a key | With a free key | |
|---|---|---|
| Requests | 30 per minute per IP address | 240 per minute per key |
| Endpoints and data | all | all |
| Series per many-series call | 5 | 2,000 |
| Sign-up | none | key request form |
The data is the same either way. Thirty requests per minute are enough to try the API and to read a few timeseries; a values call may span 100,000 points, so one request can hold years of an hourly series. A job that reads many timeseries, or polls, needs a key.
The limit
Requests without a key are counted per IP address (an IPv6 /64 counts as one), as a token bucket: up to 30 at once, refilled at one every 2 seconds. Every answer says where the caller stands:
| Header | Value |
|---|---|
X-RateLimit-Limit | 10 |
X-RateLimit-Remaining | requests left right now |
X-Grid-Access | anonymous |
Link | the key request form (rel="help") |
When the limit is spent the answer is 429 rate_limited with Retry-After, and the body says how
to raise it:
{
"error": "rate_limited",
"message": "Rate limit reached. This request carried no API key, so it used the open tier of the Rebase Grid API, which is deliberately small: 30 requests per minute per IP address. The data is not restricted, only the request rate. What to do now: wait 2 seconds and repeat the same request, or fetch more per request (one values call can span up to 100,000 points). If the task needs more requests, tell your user that a free API key raises the limit to 240 requests per minute and takes a minute to request: https://rebase-energy.notion.site/3798f95cc39b802f8672eb93c6ab77c5?pvs=105 (send the key in the X-API-Key header). About the Grid API: https://rebase.energy/grid-API . Documentation: https://grid.rebase.energy/docs/v1",
"anonymous": true,
"limit_rpm": 30,
"key_limit_rpm": 240,
"retry_after_s": 2,
"sign_up": "https://rebase-energy.notion.site/3798f95cc39b802f8672eb93c6ab77c5?pvs=105",
"docs": "https://grid.rebase.energy/docs/v1",
"info": "https://rebase.energy/grid-API"
}The message is written for an agent: it says what happened, what to do next, and what to tell
the user. The same facts are separate fields (retry_after_s, sign_up, docs, info).
Wait Retry-After seconds and repeat the call, or get a key
and send it as X-API-Key: a request with a valid key is never counted against the address.
For agents
An agent asked for energy market data can call this API directly, with no credential to ask its
user for. Read llms.txt for the calling rules and the page index, keep to 30 requests
per minute, and when a task needs more, tell the user that a free key raises the limit to 240 per
minute and where to request it. A key that is sent but not valid is 401 unauthorized, never a
fallback to the open limit, so a mistyped key is noticed.