Introduction
GridPulse is the electricity price API for developers and AI agents. Query live electricity prices, carbon intensity, generation mix, gas storage, weather forecasts, and advanced analytics for 41 bidding zones across Europe, Great Britain, the United States, and Australia — plus monthly carbon intensity for 70+ countries worldwide.
Base URL: https://api.gridpulse.network
OpenAPI spec: https://api.gridpulse.network/openapi.json
All responses are JSON. All timestamps are UTC ISO 8601. Prices are in the local market currency (EUR for EU/GB, USD for US, AUD for Australia).
Beginners Guide
Sub-section 1: Your first API call
Basic tier requires no API key. Just make a GET request:
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=DE"Response:
{
"zone": "DE",
"currency": "EUR",
"unit": "MWh",
"resolution": "hour",
"data_quality": "full",
"prices": [
{
"timestamp": "2026-05-16T18:00:00.000Z",
"price_eur_mwh": 129.75
}
],
"source": "gridpulse",
"updated_at": "2026-05-16T18:04:12.000Z"
}Explain every field:
- zone — the bidding zone code you requested
- currency — EUR for EU zones, USD for US zones, AUD for Australian zones
- unit — always MWh (megawatt-hour)
- resolution — how often this price updates: "hour" for EU, "30min" for GB, "5min" for US and AU
- data_quality — "full" means complete data, "partial" means some fields may be missing
- prices — array of price points, usually just the latest one for /current
- timestamp — UTC time this price applies to
- price_eur_mwh — price in EUR per MWh (null for non-EUR zones)
- source — always "gridpulse"
- updated_at — when this data was last refreshed
Sub-section 2: Understanding zones
A bidding zone is a geographic area where electricity prices are the same because the grid can move power freely within it. Different zones have different prices based on local generation, demand, and grid constraints.
Get all supported zones:
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/zones"The fastest way to explore multiple zones at once is the compare endpoint. Instead of making separate calls, pass up to 10 zones and get a ranked response in one request. For example, to see all major EU prices ranked cheapest first:
"text-sky-400 font-semibold">curl 'https://api.gridpulse.network/v1/compare/prices?zones=DE,FR,NO,SE,DK,AT,NL,BE,ES'Major zones by region:
| Region | Currency | Example zones |
|---|---|---|
| Europe | EUR | DE, FR, GB, NO, SE, DK, ES, AT, NL, BE, IT, PL, CH, FI + 12 more |
| United States | USD | CAISO, ERCOT, NYISO, PJM, SPP, MISO, ISONE |
| Australia | AUD | AU-NSW, AU-QLD, AU-VIC, AU-SA, AU-TAS |
| Canada | USD | CA-ON, CA-AB |
US zone example:
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=CAISO"{
"zone": "CAISO",
"currency": "USD",
"unit": "MWh",
"resolution": "5min",
"prices": [{ "timestamp": "2026-05-16T18:05:00.000Z", "price_usd_mwh": 38.90 }],
"source": "gridpulse"
}Australian zone example:
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=AU-NSW"{
"zone": "AU-NSW",
"currency": "AUD",
"unit": "MWh",
"resolution": "5min",
"prices": [{ "timestamp": "2026-05-16T08:05:00.000Z", "price_aud_mwh": 66.53 }],
"source": "gridpulse"
}Sub-section 3: Carbon intensity
Carbon intensity measures how much CO₂ is emitted per kilowatt-hour of electricity generated (gCO₂/kWh). Lower is greener. A coal-heavy grid might be 600+ gCO₂/kWh. A wind-heavy grid might be under 100.
"text-slate-500"># Real-time carbon intensity for Germany
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/current?zone=DE"{
"zone": "DE",
"timestamp": "2026-05-16T18:00:00.000Z",
"intensity_gco2_kwh": 310,
"source": "gridpulse",
"updated_at": "2026-05-16T18:02:00.000Z"
}Global carbon coverage (70+ countries):
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/global?country=JP"{
"country": "JP",
"timestamp": "2025-11-01T00:00:00.000Z",
"intensity_gco2_kwh": 452.74,
"source": "gridpulse"
}Green score (0–100 cleanliness score):
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/green/score?zone=DE"{
"zone": "DE",
"score": 19,
"renewables_pct": 0,
"carbon_intensity_gco2_kwh": 310,
"formula": "(renewables_pct * 0.6) + ((1 - intensity/600) * 100 * 0.4) rounded"
}A score of 0 means very dirty grid. 100 means perfectly clean. Use this for at-a-glance grid health.
Sub-section 4: Gas storage
Natural gas storage levels directly affect electricity prices in Europe. When storage is low, gas becomes expensive, and since gas plants set the marginal price, electricity prices rise.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-storage?country=DE"{
"country": "DE",
"gas_day": "2026-05-14T19:30:00.000Z",
"storage": {
"filling_pct": 28.05,
"stored_gwh": 69504,
"capacity_gwh": 247748,
"vs_5yr_seasonal_avg_pct": -21.3,
"status": "low",
"trend": "injecting"
},
"electricity_implication": "Critical storage levels — significant gas-for-power price risk"
}Field explanations:
- filling_pct — what percentage of total capacity is currently filled
- stored_gwh — actual energy stored in gigawatt-hours
- vs_5yr_seasonal_avg_pct — how current levels compare to the 5-year seasonal average. Negative means below average — a price risk signal
- status — "low", "medium", or "high"
- trend — "injecting" (filling up) or "withdrawing" (using gas)
- electricity_implication — human-readable risk signal for electricity prices
Sub-section 5: Upgrading to Pro
Pro unlocks price history, generation mix, webhooks, and more. Get your API key at rapidapi.com/devtee000/api/gridpulse-energy.
Pass your key via header:
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/history?zone=DE&from=2025-01-01&to=2025-01-31" \
-H "X-API-Key: your_api_key_here"Or via Bearer token:
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/history?zone=DE&from=2025-01-01&to=2025-01-31" \
-H "Authorization: Bearer your_api_key_here"Sub-section 6: Code examples in 3 languages
JavaScript:
// Basic — no API key needed
"text-violet-400">const response = "text-violet-400">await fetch(
'https://api.gridpulse.network/v1/prices/current?zone=DE'
);
"text-violet-400">const data = "text-violet-400">await response.json();
console.log(`DE price: ${data.prices[0].price_eur_mwh} EUR/MWh`);
// Pro — with API key
"text-violet-400">const responseHistory = "text-violet-400">await fetch(
'https://api.gridpulse.network/v1/prices/history?zone=DE&"text-violet-400">from=2025-01-01&to=2025-01-31',
{ headers: { 'X-API-Key': 'your_api_key_here' } }
);
"text-violet-400">const history = "text-violet-400">await responseHistory.json();
// Carbon intensity
"text-violet-400">const carbon = "text-violet-400">await fetch(
'https://api.gridpulse.network/v1/carbon/current?zone=GB'
).then(r => r.json());
console.log(`GB carbon: ${carbon.intensity_gco2_kwh} gCO₂/kWh`);Python:
import requests
BASE = 'https://api.gridpulse.network'
# Basic — no API key needed
r = requests.get(f'{BASE}/v1/prices/current', params={'zone': 'DE'})
data = r.json()
print(f"DE price: {data['prices'][0]['price_eur_mwh']} EUR/MWh")
# Pro — with API key
headers = {'X-API-Key': 'your_api_key_here'}
r = requests.get(
f'{BASE}/v1/prices/history',
params={'zone': 'DE', 'from': '2025-01-01', 'to': '2025-01-31'},
headers=headers
)
history = r.json()
# Gas storage
r = requests.get(f'{BASE}/v1/fuels/gas-storage', params={'country': 'DE'})
storage = r.json()
print(f"DE gas storage: {storage['storage']['filling_pct']}%")cURL:
"text-slate-500"># Current price
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=DE"
"text-slate-500">
# Carbon intensity
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/current?zone=GB"
"text-slate-500">
# Gas storage
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-storage?country=DE"
"text-slate-500">
# Price history (Pro)
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/history?zone=DE&from=2025-01-01&to=2025-01-31" \
-H "X-API-Key: your_key"
"text-slate-500">
# Generation mix (Pro)
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/generation/current?zone=DE" \
-H "X-API-Key: your_key"
"text-slate-500">
# Volatility analytics (Ultra)
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/volatility?zone=DE&days=30" \
-H "X-API-Key: your_key"Authentication
Start here
Get your API key →
https://rapidapi.com/devtee000/api/gridpulse-energyBasic tier is free — no key needed for 500 requests per month. Subscribe on RapidAPI for Pro, Ultra, or Mega quotas.
| Plan | Price | Requests/month | Req/sec | Overage |
|---|---|---|---|---|
| Basic | Free | 500 | 1 | None |
| Pro | $29/mo | 10,000 | 10 | $0.003/req |
| Ultra | $99/mo | 60,000 | 25 | $0.0017/req |
| Mega | $299/mo | 250,000 | 50 | $0.0012/req |
Send your RapidAPI subscription key as X-API-Key or Bearer token once you've subscribed via the link above.
Basic tier — no API key needed. Just make requests. Anonymous requests are automatically treated as Basic.
Pro/Ultra/Mega — pass your key in every request:
"text-slate-500"># Option 1 — X-API-Key header (recommended)
-H "X-API-Key: your_key_here"
"text-slate-500">
# Option 2 — Bearer token
-H "Authorization: Bearer your_key_here"When your key is missing or invalid:
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key."
}
}When your plan is too low:
{
"error": {
"code": "PLAN_REQUIRED",
"message": "This endpoint requires the Pro plan or higher. See /v1/plans for details."
}
}Rate Limits & Plans
When you exceed your monthly quota:
{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Monthly request limit reached. Upgrade your plan or wait until next month."
}
}When you exceed your per-second rate limit you receive HTTP 429. Back off for 1 second and retry.
Best practices:
- Cache responses — electricity prices update every 5–30 minutes, don't poll faster than that
- Use updated_at to check if data has changed before processing
- Implement exponential backoff on 429 errors
- For Basic tier users, spread requests across the month — 500/month = ~16/day
Endpoints — Prices
GET /v1/prices/current
Tier: Basic | Returns the latest available spot price for any zone.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | Bidding zone code e.g. DE, CAISO, AU-NSW |
| include | string | No | Pass "carbon" to include carbon intensity in response |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=DE"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=DE&include=carbon"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=CAISO"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/current?zone=AU-NSW"Response fields:
- zone — zone code
- currency — EUR / USD / AUD
- unit — always MWh
- resolution — update frequency: hour / 30min / 5min
- prices[].timestamp — UTC timestamp
- prices[].price_eur_mwh — price in EUR (EU/GB zones)
- prices[].price_usd_mwh — price in USD (US zones)
- prices[].price_aud_mwh — price in AUD (AU zones)
- source — data channel
- updated_at — last refresh time
Possible errors: NO_DATA (no recent data for zone), INVALID_ZONE (zone code not recognised)
GET /v1/prices/day-ahead
Tier: Basic | Returns next 24–48 hours of day-ahead auction prices.
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | EU or GB zones only |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/day-ahead?zone=DE"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/day-ahead?zone=GB"Returns an array of hourly (EU) or 30-minute (GB) price points for the next 24–48 hours. Day-ahead prices are published once per day around 13:00 CET for EU zones.
GET /v1/prices/gb-market
Returns the latest GB day-ahead auction price alongside the real-time system buy and sell prices from the Elexon balancing mechanism. The spread between these two prices is one of the most watched signals in the GB electricity market — battery storage operators use it to decide when to charge and discharge, and flexible demand managers use it to shift load.
Basic tier — no API key required. Updates every 30 minutes.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/gb-market"Response:
{
"zone": "GB",
"settlement_period": 22,
"day_ahead_price_gbp_mwh": 98.79,
"system_sell_price_gbp_mwh": 80.02,
"system_buy_price_gbp_mwh": 80.02,
"spread_gbp_mwh": 18.77,
"imbalance_direction": "long",
"source": "gridpulse",
"updated_at": "2026-05-17T10:44:48.000Z"
}Field explanations:
- settlement_period — GB settlement period 1–48, each representing 30 minutes starting from midnight. Period 1 = 00:00–00:30, Period 48 = 23:30–00:00.
- day_ahead_price_gbp_mwh — the auction-cleared price published the day before for this half-hour slot
- system_sell_price_gbp_mwh — Elexon system sell price: what generators receive when the system has surplus energy
- system_buy_price_gbp_mwh — Elexon system buy price: what suppliers pay when the system is short of energy
- spread_gbp_mwh — absolute difference between day-ahead and system sell price. A large spread signals high real-time volatility vs the forward market.
- imbalance_direction — long means the system has a surplus (more generation than demand), short means a deficit, balanced means aligned
GET /v1/prices/history
Tier: Pro | Returns hourly price history between two dates.
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | Any supported zone |
| from | date | Yes | Start date YYYY-MM-DD |
| to | date | Yes | End date YYYY-MM-DD |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/history?zone=DE&from=2025-01-01&to=2025-01-31" \
-H "X-API-Key: your_key"Maximum date range: 365 days per request. For longer ranges make multiple requests.
GET /v1/prices/cheapest
Tier: Pro | Returns the cheapest N-hour window within the next 24 hours. Useful for scheduling EV charging, industrial processes, or any deferrable load.
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | Any supported zone |
| hours | integer | No | Number of consecutive hours needed (default 3) |
| before | time | No | Must finish before this time HH:MM |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/cheapest?zone=DE&hours=3" \
-H "X-API-Key: your_key"GET /v1/prices/consumer
Tier: Pro | Returns consumer retail electricity prices including taxes and grid fees for DE and AT. These are the prices households and businesses actually pay.
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | DE or AT only |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/prices/consumer?zone=DE" \
-H "X-API-Key: your_key"Compare Endpoints
Compare endpoints let you query multiple zones in a single API call and receive a ranked response. Instead of making separate calls for each zone, pass a comma-separated list and get back a ranked list with a summary.
All three compare endpoints are Basic tier — no API key required. Maximum 10 zones per request.
This is especially powerful for MCP and AI agents — when Claude or another AI is asked "which country has the cheapest electricity in Europe right now?" it makes one compare call instead of 25 separate price calls.
GET /v1/compare/prices
Compare current spot prices across up to 10 zones. Zones are ranked cheapest first within the same currency. Use the currency parameter to control which currency group gets ranked — zones in other currencies show their native price alongside a note.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| zones | string | Yes | — | Comma-separated zone codes, max 10 |
| currency | string | No | EUR | EUR, USD, AUD, or GBP |
"text-slate-500"># All major EU zones — cheapest first
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/compare/prices?zones=DE,FR,NO,SE,DK,AT,NL,BE,ES"
"text-slate-500">
# US zones in USD
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/compare/prices?zones=CAISO,ERCOT,NYISO&currency=USD"
"text-slate-500">
# Australian zones in AUD
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/compare/prices?zones=AU-NSW,AU-QLD,AU-VIC,AU-SA,AU-TAS&currency=AUD"Example response (EU zones):
{
"type": "prices",
"timestamp": "2026-05-17T21:45:00.000Z",
"zones": [
{ "zone": "SE", "price": 53.72, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 1 },
{ "zone": "ES", "price": 98.75, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 2 },
{ "zone": "FR", "price": 98.75, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 3 },
{ "zone": "NO", "price": 129.32, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 4 },
{ "zone": "BE", "price": 129.85, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 5 },
{ "zone": "NL", "price": 131.31, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 6 },
{ "zone": "DE", "price": 134.22, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 7 },
{ "zone": "DK", "price": 134.22, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 8 },
{ "zone": "AT", "price": 139.21, "currency": "EUR", "unit": "MWh", "source": "gridpulse", "rank": 9 }
],
"summary": {
"cheapest_zone": "SE",
"most_expensive_zone": "AT",
"spread_eur_mwh": 85.49,
"zones_compared": 9,
"note": "Spread among EUR zones only."
}
}Cross-currency note: Mixing EUR and USD zones without specifying currency returns EUR zones ranked and USD zones with rank: null showing native price. No FX conversion is applied — this is intentional to avoid misleading comparisons.
GET /v1/compare/carbon
Compare carbon intensity (gCO₂/kWh) across up to 10 zones. Zones are ranked cleanest first regardless of currency or region. Use this to find the lowest-carbon grid for scheduling energy-intensive workloads.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| zones | string | Yes | Comma-separated zone codes, max 10 |
Carbon intensity labels
| Intensity | Label |
|---|---|
| 0–100 gCO₂/kWh | very clean |
| 100–200 | clean |
| 200–300 | moderate |
| 300–450 | high |
| 450+ | very high |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/compare/carbon?zones=DE,FR,NO,GB,SE,ES"Example response:
{
"type": "carbon_intensity",
"timestamp": "2026-05-17T12:00:00.000Z",
"zones": [
{ "zone": "NO", "intensity_gco2_kwh": 54, "label": "very clean", "rank": 1 },
{ "zone": "GB", "intensity_gco2_kwh": 70, "label": "very clean", "rank": 2 },
{ "zone": "SE", "intensity_gco2_kwh": 31, "label": "very clean", "rank": 3 },
{ "zone": "DE", "intensity_gco2_kwh": 396, "label": "high", "rank": 4 },
{ "zone": "FR", "intensity_gco2_kwh": 427, "label": "high", "rank": 5 }
],
"summary": {
"cleanest_zone": "SE",
"dirtiest_zone": "FR",
"cleanest_intensity": 31,
"dirtiest_intensity": 427,
"carbon_saving_vs_dirtiest_pct": 93,
"zones_compared": 5
}
}GET /v1/compare/green
Compare the composite green score (0–100) across up to 10 zones. The green score combines renewables percentage (60% weight) and carbon intensity (40% weight) into a single number. Zones are ranked greenest first.
Formula: (renewables_pct × 0.6) + ((1 - intensity/600) × 100 × 0.4)
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| zones | string | Yes | Comma-separated zone codes, max 10 |
Green score labels
| Score | Label |
|---|---|
| 80–100 | excellent |
| 60–80 | good |
| 40–60 | moderate |
| 20–40 | below average |
| 0–20 | poor |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/compare/green?zones=DE,FR,NO,GB,CAISO"Example response:
{
"type": "green_score",
"timestamp": "2026-05-17T12:00:00.000Z",
"zones": [
{ "zone": "NO", "score": 95, "renewables_pct": 98.34, "carbon_intensity_gco2_kwh": 55, "rank": 1, "label": "excellent" },
{ "zone": "GB", "score": 70, "renewables_pct": 57.1, "carbon_intensity_gco2_kwh": 70, "rank": 2, "label": "good" },
{ "zone": "FR", "score": 70, "renewables_pct": 97.95, "carbon_intensity_gco2_kwh": 427, "rank": 3, "label": "good" },
{ "zone": "DE", "score": 67, "renewables_pct": 89.65, "carbon_intensity_gco2_kwh": 396, "rank": 4, "label": "good" },
{ "zone": "CAISO", "score": 45, "renewables_pct": 53.32, "carbon_intensity_gco2_kwh": null, "rank": 5, "label": "moderate" }
],
"summary": {
"greenest_zone": "NO",
"least_green_zone": "CAISO",
"recommendation": "Use NO for lowest carbon impact right now"
}
}Note about France: FR scores "good" despite high measured carbon intensity (427 gCO₂/kWh) because its generation mix is ~98% nuclear, which counts toward renewables percentage in the score formula. The green score reflects both dimensions — a zone can score well on renewables_pct while still having elevated measured intensity.
Endpoints — Carbon
GET /v1/carbon/current
Tier: Basic | Real-time carbon intensity in gCO₂/kWh for EU and GB zones.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/current?zone=DE"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/current?zone=GB"GET /v1/carbon/forecast
Tier: Basic (GB only) | 48-hour carbon intensity forecast.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/forecast?zone=GB"GET /v1/carbon/global
Tier: Basic | Monthly carbon intensity for 70+ countries worldwide using ISO2 country codes.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/global?country=JP"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/global?country=CN"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/global?country=IN"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/global?country=BR"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/carbon/global?country=ZA"Supported regions: Europe, Americas, Asia, Africa, Middle East, Oceania. Returns 404 if no data available for that country.
Endpoints — Generation
GET /v1/generation/current
Tier: Pro | Current electricity generation mix by fuel type.
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | EU or US zones |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/generation/current?zone=DE" \
-H "X-API-Key: your_key"Response includes:
- wind_onshore_mw, wind_offshore_mw, solar_mw, hydro_mw, nuclear_mw, gas_mw, hard_coal_mw, lignite_mw, biomass_mw, total_mw, renewables_pct
GET /v1/generation/forecast
Tier: Pro | 48-hour wind generation and demand forecast. Best supported for GB zone.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/generation/forecast?zone=GB" \
-H "X-API-Key: your_key"Endpoints — Fuels & Gas
GET /v1/fuels/gas-storage
Tier: Basic | Current natural gas storage level for any EU country.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-storage?country=DE"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-storage?country=FR"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-storage?country=IT"GET /v1/fuels/gas-storage/history
Tier: Basic | Historical daily gas storage filling percentage.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-storage/history?country=DE&from=2024-01-01&to=2024-12-31"GET /v1/fuels/lng
Tier: Basic | LNG terminal sendout and inventory for major EU import hubs.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/lng?country=ES"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/lng?country=FR"GET /v1/fuels/summary
Tier: Basic | EU-wide gas storage average and market risk signals.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/summary"GET /v1/fuels/henry-hub
Tier: Basic | Last 90 days of Henry Hub natural gas spot prices in USD/MMBtu. Henry Hub is the global gas price benchmark.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/henry-hub"GET /v1/fuels/henry-hub/history
Tier: Pro | Full Henry Hub history with date range.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/henry-hub/history?from=2024-01-01&to=2024-12-31" \
-H "X-API-Key: your_key"GET /v1/fuels/carbon-price
Tier: Basic | Last 90 days of EU ETS carbon allowance auction prices in EUR/tonne.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/carbon-price"GET /v1/fuels/retail-prices
Tier: Pro | US retail electricity prices by state in USD/kWh.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/retail-prices" \
-H "X-API-Key: your_key"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/retail-prices?state=CA" \
-H "X-API-Key: your_key"GET /v1/fuels/winter-readiness
Tier: Ultra | Winter gas supply risk score and assessment vs regulatory storage targets.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/winter-readiness?country=DE" \
-H "X-API-Key: your_key"GET /v1/fuels/gas-power-correlation
Tier: Ultra | Rolling correlation coefficient between gas prices and electricity prices.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/gas-power-correlation?country=DE&zone=DE&days=90" \
-H "X-API-Key: your_key"GET /v1/fuels/lng-dependency
Tier: Ultra | LNG import dependency score and supply risk for any EU country.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/fuels/lng-dependency?country=DE" \
-H "X-API-Key: your_key"Endpoints — Weather
GET /v1/weather/current
Tier: Basic | Current wind speed (m/s), solar radiation (W/m²), and temperature (°C) for any covered zone.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/weather/current?zone=DE"
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/weather/current?zone=CAISO"GET /v1/weather/forecast
Tier: Basic | 48-hour weather forecast for any covered zone. Useful for predicting solar and wind generation.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/weather/forecast?zone=DE"Endpoints — Analytics
All analytics endpoints require Ultra plan or higher except /analytics/hydro which requires Mega.
GET /v1/analytics/volatility
Returns price volatility metrics over a configurable window.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| zone | string | required | Any zone with historical data |
| days | integer | 30 | Window size in days |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/volatility?zone=DE&days=30" \
-H "X-API-Key: your_key"Response:
{
"zone": "DE",
"period_days": 30,
"volatility": {
"std_deviation_eur_mwh": 74.58,
"coefficient_of_variation_pct": 85.1,
"mean_price_eur_mwh": 87.64,
"max_price_eur_mwh": 266.84,
"min_price_eur_mwh": -499,
"negative_hours": 97,
"spike_hours_above_200": 5,
"volatility_rating": "high"
}
}volatility_rating can be: low / medium / high / extreme
GET /v1/analytics/negative-prices
Returns historical negative price events — hours when electricity prices went below zero. This happens when renewable generation exceeds demand.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/negative-prices?zone=DE&year=2025" \
-H "X-API-Key: your_key"GET /v1/analytics/negative-risk
Returns a real-time probability score (0–100) that prices will go negative in the next 12 hours. Critical for battery operators and flexible demand.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/negative-risk?zone=DE" \
-H "X-API-Key: your_key"GET /v1/analytics/correlation
Returns the Pearson correlation coefficient between any two zones. Use this to understand how prices in different markets move together — essential for cross-border trading strategies.
| Parameter | Type | Default | Description |
|---|---|---|---|
| zone_a | string | required | First zone |
| zone_b | string | required | Second zone |
| days | integer | 90 | Rolling window |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/correlation?zone_a=DE&zone_b=FR&days=90" \
-H "X-API-Key: your_key"GET /v1/analytics/peak-hours
Returns historical peak price patterns by hour of day and day of week. Use this to understand when prices are typically highest for grid planning and trading.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/peak-hours?zone=DE&months=12" \
-H "X-API-Key: your_key"GET /v1/analytics/grid-stress
Returns a composite grid stress indicator combining price volatility, demand patterns, and generation mix.
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/grid-stress?zone=DE" \
-H "X-API-Key: your_key"GET /v1/analytics/carbon-optimal
Finds the optimal low-carbon consumption window before a deadline. Use this for EV charging, industrial processes, data center workloads, or any deferrable energy use.
| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | Yes | Any zone with carbon data |
| hours | integer | No | Consecutive hours needed (default 3) |
| before | datetime | Yes | Must complete before this UTC datetime |
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/carbon-optimal?zone=GB&hours=3&before=2026-05-17T06:00:00Z" \
-H "X-API-Key: your_key"GET /v1/analytics/hydro
Tier: Mega | Reservoir levels vs seasonal median and generation outlook for hydro-heavy zones. Essential for Nordic price forecasting.
Supported zones: NO, CH, AT, SE, FI
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/analytics/hydro?zone=NO" \
-H "X-API-Key: your_key"Endpoints — Webhooks
Webhooks send an HTTP POST to your URL when a price or carbon threshold is crossed. Requires Pro plan.
POST /v1/webhooks — Create a webhook
"text-sky-400 font-semibold">curl -X "text-amber-200">POST ""text-emerald-400">https://api.gridpulse.network/v1/webhooks" \
-H "X-API-Key: your_key" \
-H "Content-Type: application/json" \
-d '{
"zone": "DE",
"trigger_type": "price_above",
"threshold": 200,
"callback_url": "https://your-app.com/webhook"
}'trigger_type options:
- price_above — fires when price exceeds threshold (EUR/MWh)
- price_below — fires when price drops below threshold
- carbon_above — fires when carbon intensity exceeds threshold (gCO₂/kWh)
- carbon_below — fires when carbon intensity drops below threshold
When triggered, GridPulse sends a POST to your callback_url with:
{
"zone": "DE",
"trigger_type": "price_above",
"threshold": 200,
"current_value": 234.5,
"timestamp": "2026-05-16T18:00:00.000Z"
}Securing your webhook: Pass a secret field when creating the webhook. GridPulse will include it in every POST so you can verify requests came from us.
GET /v1/webhooks — List your webhooks
"text-sky-400 font-semibold">curl ""text-emerald-400">https://api.gridpulse.network/v1/webhooks" \
-H "X-API-Key: your_key"DELETE /v1/webhooks/:id — Delete a webhook
"text-sky-400 font-semibold">curl -X "text-amber-200">DELETE ""text-emerald-400">https://api.gridpulse.network/v1/webhooks/your_webhook_id" \
-H "X-API-Key: your_key"Basic tier is free — no API key needed for 500 requests/month. For higher limits, get your API key on RapidAPI →
Overview
GridPulse is MCP-native. The Model Context Protocol (MCP) lets AI agents query your API directly in natural language—Claude, Cursor, VS Code, and Claude Code can consume the same MCP server. The hosted server exposes 16 tools that mirror the REST surface (prices, carbon, green scores, gas storage, weather, multi-zone compare, scheduling helpers, and zone discovery).
Tools (16 total)
get_current_price— Latest spot price for any zone (EUR/MWh)get_day_ahead_prices— Full hourly day-ahead price curve for a zoneget_cheapest_window— Find cheapest N contiguous hours before a deadline (Pro)get_carbon_intensity— Real-time carbon intensity in gCO₂/kWh for any zoneget_green_score— Single 0–100 green score combining renewables and carbonget_price_history— Historical prices between two dates (Pro)get_supported_zones— List all 41+ supported zone codes with country namesget_optimal_schedule— Multi-zone ranking by price, carbon, or balanced scorecompare_prices— Compare prices across up to 10 zones, ranked cheapest firstcompare_carbon— Compare carbon intensity across up to 10 zones, cleanest firstcompare_green— Compare green scores across up to 10 zones, greenest firstget_gas_storage— EU country gas storage level, trend, and price risk signalget_global_carbon— Monthly carbon intensity for 70+ countries worldwideget_gb_market— GB day-ahead vs system price spread and imbalance directionget_weather— Wind speed, solar radiation, temperature for any zoneget_weather(forecast) — 48-hour weather forecast for any zone (forecast=true)
Example prompts → tools
- “What is the current electricity price in Germany?”
→ get_current_price(zone="DE") - “Which European country has the cheapest electricity right now?”
→ compare_prices(zones="DE,FR,NO,SE,DK,AT,NL,BE,ES") - “Find the cheapest 4-hour window to charge my EV in Norway before 7am”
→ get_cheapest_window(zone="NO", hours=4, before="07:00") - “Compare the carbon intensity of Germany, France, and Norway”
→ compare_carbon(zones="DE,FR,NO") - “Find the greenest grid in Europe for my batch job tonight”
→ compare_green(zones="DE,FR,NO,SE,GB,ES") - “What is Germany's gas storage level and what does it mean for prices?”
→ get_gas_storage(country="DE") - “What is Japan's carbon intensity?”
→ get_global_carbon(country="JP") - “What's the GB electricity market doing — is the system long or short?”
→ get_gb_market() - “How windy is it in Germany right now?”
→ get_weather(zone="DE") - “Schedule my workload across DE, FR, and NO — find the cheapest and greenest window before midnight”
→ get_optimal_schedule(zones=["DE","FR","NO"], hours=2, deadline_utc="2026-05-18T23:00:00Z", optimise_for="balanced")
MCP endpoint
"text-emerald-400">https://api.gridpulse.network/mcpClaude Desktop
Add to your Claude Desktop config file (for example ~ /Library/Application Support/Claude/claude_desktop_config.json on macOS). Paid tiers require an API key from RapidAPI (GridPulse Energy). Once connected, Claude sees all 16 GridPulse tools in the MCP tool list.
{
"mcpServers": {
"gridpulse": {
"url": "https://api.gridpulse.network/mcp",
"headers": {
"X-API-Key": "your_api_key_here"
}
}
}
}Once connected, GridPulse exposes 16 tools to your AI assistant covering prices, carbon, green scores, gas storage, weather, and multi-zone comparison. Basic tier tools work without an API key — just omit the headers block. Need Pro or Ultra? Grab a key from RapidAPI →
Restart Claude Desktop. GridPulse appears in connected tools.
Cursor
Add GridPulse under .cursor/mcp.json. Upgrade tiers via your RapidAPI subscription →.
{
"mcpServers": {
"gridpulse": {
"url": "https://api.gridpulse.network/mcp",
"headers": {
"X-API-Key": "your_api_key_here"
}
}
}
}VS Code
Install the MCP extension for VS Code, then define a server pointing at https://api.gridpulse.network/mcp with header X-API-Key (from RapidAPI) when not using anonymous Basic. The same 16 tools are available when the session is connected.
Claude Code
"text-sky-400 font-semibold">claude mcp add gridpulse \
--url "text-emerald-400">https://api.gridpulse.network/mcp \
--header "X-API-Key: your_api_key_here"Basic tier MCP
Omit the headers entirely when you only need Basic-tier tools — you still receive the full MCP tool list (16 tools); operations that require Pro or Ultra return a plan message when your session is on Basic. Higher tiers: subscribe on RapidAPI →.
EV Charging Optimizer
Find the cheapest time to charge your EV overnight:
import requests
BASE = 'https://api.gridpulse.network'
def find_cheapest_charging_window(zone, hours_needed, charge_by_hour):
"""Find cheapest N hours to charge EV before a given hour"""
r = requests.get(
f'{BASE}/v1/prices/cheapest',
params={
'zone': zone,
'hours': hours_needed,
'before': f'{charge_by_hour:02d}:00',
},
headers={'X-API-Key': 'your_key'}
)
window = r.json()
return window
# Find cheapest 4-hour window to charge before 7am in Germany
window = find_cheapest_charging_window('DE', 4, 7)
print(f"Start charging at: {window['optimal_start']}")
print(f"Average price: {window['avg_price_eur_mwh']} EUR/MWh")Carbon-Aware Scheduler
Run energy-intensive compute jobs during the cleanest grid hours:
import requests
BASE = 'https://api.gridpulse.network'
def should_run_job_now(zone, carbon_threshold=150):
"""Returns True if grid is clean enough to run the job"""
r = requests.get(f'{BASE}/v1/carbon/current', params={'zone': zone})
data = r.json()
current_intensity = data['intensity_gco2_kwh']
return current_intensity < carbon_threshold, current_intensity
should_run, intensity = should_run_job_now('GB')
if should_run:
print(f"Grid is clean ({intensity} gCO₂/kWh) — running job now")
else:
print(f"Grid is dirty ({intensity} gCO₂/kWh) — deferring job")
r = requests.get(
f'{BASE}/v1/analytics/carbon-optimal',
params={'zone': 'GB', 'hours': 2, 'before': '2026-05-17T06:00:00Z'},
headers={'X-API-Key': 'your_key'},
)
optimal = r.json()
print(f"Best window: {optimal['optimal_start']}")Price Alert System
Get notified when German electricity prices spike above 200 EUR/MWh:
"text-sky-400 font-semibold">curl -X "text-amber-200">POST ""text-emerald-400">https://api.gridpulse.network/v1/webhooks" \
-H "X-API-Key: your_key" \
-H "Content-Type: application/json" \
-d '{
"zone": "DE",
"trigger_type": "price_above",
"threshold": 200,
"callback_url": "https://your-app.com/price-alert",
"secret": "your_webhook_secret"
}'Your endpoint receives:
{
"zone": "DE",
"trigger_type": "price_above",
"threshold": 200,
"current_value": 234.5,
"timestamp": "2026-05-16T18:00:00.000Z"
}Scope 2 Tracker
Calculate the carbon footprint of your electricity consumption:
import requests
BASE = 'https://api.gridpulse.network'
def calculate_scope2_emissions(zone, kwh_consumed):
"""Calculate CO₂ emissions for electricity consumption"""
r = requests.get(f'{BASE}/v1/carbon/current', params={'zone': zone})
data = r.json()
intensity = data['intensity_gco2_kwh'] # gCO2 per kWh
emissions_kg = (intensity * kwh_consumed) / 1000
return {
'kwh_consumed': kwh_consumed,
'carbon_intensity': intensity,
'emissions_kg_co2': round(emissions_kg, 2),
'emissions_tonnes_co2': round(emissions_kg / 1000, 4),
}
# Data center workload using 10,000 kWh in Germany
result = calculate_scope2_emissions('DE', 10000)
print(f"Emissions: {result['emissions_kg_co2']} kg CO₂")
print(f"= {result['emissions_tonnes_co2']} tonnes CO₂")Best Practices
Caching
Electricity prices update every 5–30 minutes depending on region. Cache responses for at least:
- EU prices: 15 minutes
- GB prices: 5 minutes
- US/AU prices: 5 minutes
- Gas storage: 24 hours (updates daily)
- Carbon global: 24 hours (updates monthly)
Use the updated_at field to check if data has actually changed.
Handling NO_DATA
Some zones may temporarily have no data. Always handle NO_DATA gracefully:
"text-violet-400">const data = "text-violet-400">await fetchPrice('IT');
"text-violet-400">if (data.error?.code === 'NO_DATA') {
// Use cached data or show last known price
"text-violet-400">return cachedPrice;
}Polling best practices
- Don't poll faster than the resolution of the data
- Use webhooks instead of polling for price alerts
- Spread Basic tier requests across the day
Error handling
Always check the HTTP status code:
- 200 — success
- 400 — bad request (check parameters)
- 401 — invalid API key
- 402 — plan too low for this endpoint
- 404 — zone or country not found
- 429 — rate limited (back off and retry)
- 500 — server error (retry after 30 seconds)
Error Reference
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
| NO_DATA | 503 | No data available for this zone yet | Try again shortly or use another zone |
| PLAN_REQUIRED | 402 | Your plan is too low | Upgrade at rapidapi.com/devtee000/api/gridpulse-energy |
| UNAUTHORIZED | 401 | Missing or invalid API key | Check X-API-Key header |
| QUOTA_EXCEEDED | 429 | Monthly request limit reached | Wait for reset or upgrade plan |
| RATE_LIMITED | 429 | Too many requests per second | Back off 1 second and retry |
| INVALID_ZONE | 400 | Zone code not recognised | Check GET /v1/zones for valid codes |
| INVALID_DATE | 400 | Date format incorrect | Use YYYY-MM-DD format |
| NOT_FOUND | 404 | Resource not found | Check endpoint path input |
| INSUFFICIENT_DATA | 422 | Not enough historical data | Try wider range or mature zone |
FAQ
Q: Do I need an API key to get started?
No. Basic tier is completely free and requires no API key. Just make requests to any Basic endpoint and you'll get live data immediately.
Q: Why is my zone returning NO_DATA?
Some zones don't have live data yet. IT (Italy) for example has carbon and generation data but not wholesale prices. Check our zone coverage documentation above.
Q: How often does the data update?
EU prices: every 15–30 minutes. GB prices: every 30 minutes. US and Australian prices: every 5 minutes. Gas storage: daily. Carbon global: monthly.
Q: Can I use GridPulse in a commercial product?
Yes. Pro, Ultra, and Mega plans are all licensed for commercial use. See the Terms of Service for details.
Q: What is the difference between price_eur_mwh, price_usd_mwh, and price_aud_mwh?
Each zone uses its local market currency. EU zones return price_eur_mwh. US zones return price_usd_mwh. Australian zones return price_aud_mwh. The others will be null.
Q: Why do some analytics endpoints return no data?
Analytics require sufficient historical data. If a zone was recently added or you're querying a very short time window, you may get INSUFFICIENT_DATA. Try expanding the date range or using a more established zone like DE or FR.
Q: How do I get notified when prices spike?
Use the webhooks endpoint. Create a webhook with trigger_type: "price_above" and your threshold. GridPulse will POST to your URL when the threshold is crossed.
Q: Is there a status page?
Check our API health at any time: GET https://api.gridpulse.network/.
Changelog
v1.0.0 — May 2026
- Initial public release.
- 41 bidding zones across EU, GB, US, Australia, Canada.
- 48 REST endpoints across prices (including GB market + multi-zone compare), carbon, generation, fuels, weather, analytics, and webhooks.
- MCP support for AI assistants.
- Global carbon intensity spanning 70+ countries.
- Pricing ladders: Basic, Pro, Ultra, Mega.