GridPulse

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:

RegionCurrencyExample zones
EuropeEURDE, FR, GB, NO, SE, DK, ES, AT, NL, BE, IT, PL, CH, FI + 12 more
United StatesUSDCAISO, ERCOT, NYISO, PJM, SPP, MISO, ISONE
AustraliaAUDAU-NSW, AU-QLD, AU-VIC, AU-SA, AU-TAS
CanadaUSDCA-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-energy

Basic tier is free — no key needed for 500 requests per month. Subscribe on RapidAPI for Pro, Ultra, or Mega quotas.

PlanPriceRequests/monthReq/secOverage
BasicFree5001None
Pro$29/mo10,00010$0.003/req
Ultra$99/mo60,00025$0.0017/req
Mega$299/mo250,00050$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

ParameterTypeRequiredDescription
zonestringYesBidding zone code e.g. DE, CAISO, AU-NSW
includestringNoPass "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.

ParameterTypeRequiredDescription
zonestringYesEU 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.

ParameterTypeRequiredDescription
zonestringYesAny supported zone
fromdateYesStart date YYYY-MM-DD
todateYesEnd 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.

ParameterTypeRequiredDescription
zonestringYesAny supported zone
hoursintegerNoNumber of consecutive hours needed (default 3)
beforetimeNoMust 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.

ParameterTypeRequiredDescription
zonestringYesDE 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

ParameterTypeRequiredDefaultDescription
zonesstringYesComma-separated zone codes, max 10
currencystringNoEUREUR, 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

ParameterTypeRequiredDescription
zonesstringYesComma-separated zone codes, max 10

Carbon intensity labels

IntensityLabel
0–100 gCO₂/kWhvery clean
100–200clean
200–300moderate
300–450high
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

ParameterTypeRequiredDescription
zonesstringYesComma-separated zone codes, max 10

Green score labels

ScoreLabel
80–100excellent
60–80good
40–60moderate
20–40below average
0–20poor
"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.

ParameterTypeRequiredDescription
zonestringYesEU 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

ParameterTypeDefaultDescription
zonestringrequiredAny zone with historical data
daysinteger30Window 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.

ParameterTypeDefaultDescription
zone_astringrequiredFirst zone
zone_bstringrequiredSecond zone
daysinteger90Rolling 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.

ParameterTypeRequiredDescription
zonestringYesAny zone with carbon data
hoursintegerNoConsecutive hours needed (default 3)
beforedatetimeYesMust 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 zone
  • get_cheapest_window — Find cheapest N contiguous hours before a deadline (Pro)
  • get_carbon_intensity — Real-time carbon intensity in gCO₂/kWh for any zone
  • get_green_score — Single 0–100 green score combining renewables and carbon
  • get_price_history — Historical prices between two dates (Pro)
  • get_supported_zones — List all 41+ supported zone codes with country names
  • get_optimal_schedule — Multi-zone ranking by price, carbon, or balanced score
  • compare_prices — Compare prices across up to 10 zones, ranked cheapest first
  • compare_carbon — Compare carbon intensity across up to 10 zones, cleanest first
  • compare_green — Compare green scores across up to 10 zones, greenest first
  • get_gas_storage — EU country gas storage level, trend, and price risk signal
  • get_global_carbon — Monthly carbon intensity for 70+ countries worldwide
  • get_gb_market — GB day-ahead vs system price spread and imbalance direction
  • get_weather — Wind speed, solar radiation, temperature for any zone
  • get_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/mcp

Claude 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

CodeHTTPMeaningFix
NO_DATA503No data available for this zone yetTry again shortly or use another zone
PLAN_REQUIRED402Your plan is too lowUpgrade at rapidapi.com/devtee000/api/gridpulse-energy
UNAUTHORIZED401Missing or invalid API keyCheck X-API-Key header
QUOTA_EXCEEDED429Monthly request limit reachedWait for reset or upgrade plan
RATE_LIMITED429Too many requests per secondBack off 1 second and retry
INVALID_ZONE400Zone code not recognisedCheck GET /v1/zones for valid codes
INVALID_DATE400Date format incorrectUse YYYY-MM-DD format
NOT_FOUND404Resource not foundCheck endpoint path input
INSUFFICIENT_DATA422Not enough historical dataTry 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.