Axonn Energy API
Real-time European & US energy market data, trading signals, and AI-powered monitoring — built for power traders, battery operators, and energy developers.
Base URL: https://axonnpower.com
Quick Start
Get your first API response in 30 seconds.
1. Get your API key
Sign up at axonnpower.com — your key is generated automatically on first login.
2. Make your first call
curl -H "X-API-Key: YOUR_KEY" \
https://app.axonnpower.com/v1/prices/DE
import httpx
client = httpx.Client(
base_url="https://axonnpower.com",
headers={"X-API-Key": "YOUR_KEY"},
)
# Day-ahead prices for Germany
prices = client.get("/v1/prices/DE").json()
print(f"Avg price: {prices['data']['stats']['avg']:.2f} EUR/MWh")
# Full snapshot — prices, generation, weather, signal
snapshot = client.get("/v1/snapshot/DE").json()
# Trading signal with conviction
signal = client.get("/v1/signal/DE").json()
print(f"Signal: {signal['data']['direction']} ({signal['data']['conviction']:.0%})")
const BASE = "https://axonnpower.com";
const KEY = "YOUR_KEY";
const res = await fetch(`${BASE}/v1/prices/DE`, {
headers: { "X-API-Key": KEY },
});
const { data } = await res.json();
console.log(`Avg price: ${data.stats.avg.toFixed(2)} EUR/MWh`);
3. Response format
{
"ok": true,
"country": "DE",
"source": "epex_prices",
"updated_at": "2026-03-06T10:30:00Z",
"data": {
"prices": [{ "hour": 0, "eur_mwh": 42.5 }, ...],
"stats": { "avg": 55.3, "peak": 89.1, "trough": 12.4, ... }
}
}
Authentication
Pass your API key via the X-API-Key header on every request.
X-API-Key: axn_abc123...
Alternatively, if using the web dashboard, requests use a Bearer JWT token from Supabase. Both are accepted on all /v1/* endpoints.
Public endpoints (no auth): /v1/status, /v1/health, /v1/meta, /status
Errors & Envelope
All responses follow the same envelope:
// Success
{ "ok": true, "data": { ... } }
// Error
{ "ok": false, "error": "Invalid country code" }
HTTP status codes: 200 success, 401 missing/invalid key, 403 tier limit, 404 not found, 429 rate limited, 500 server error.
Rate Limits & Tiers
| Tier | Req/min | Daily | Custom Targets | Export | Backtest |
|---|---|---|---|---|---|
| Free | 100 | 500 | 3 | - | - |
| Pro | 1,000 | 10,000 | 20 | CSV/JSON | Historical |
| Enterprise | Unlimited | 1M | Unlimited | All | All |
Rate limit headers: X-RateLimit-Remaining, X-RateLimit-Reset
Market Data
Supported EU countries: DE FR NL AT NO CH ES IT BE DK SE FI PL
| Param | Type | Description |
|---|---|---|
country | path | ISO country code (DE, FR, etc.) |
date | query | Optional. YYYY-MM-DD (default: today) |
| Param | Type | Description |
|---|---|---|
active_only | query | Boolean, default true. Filter to active outages. |
| Param | Type | Description |
|---|---|---|
days | query | History window in days (default: 30) |
US Markets
Supported ISOs: CAISO ERCOT PJM MISO NYISO ISONE SPP
| Param | Type | Description |
|---|---|---|
iso | path | CAISO, ERCOT, PJM, MISO, NYISO, ISONE, SPP |
zone | query | Optional. Settlement zone / pricing node |
// Example: GET /v1/us/snapshot/ERCOT
{
"ok": true,
"data": {
"iso": "ERCOT",
"da_lmp": { "hourly": { "0": 23.74, "1": 21.50, ... } },
"rt_lmp": { "hourly": { "0": 25.32, "1": 22.10, ... } },
"stats": { "avg": 21.45, "peak": 32.04, "trough": 10.78, "spread": 21.26 },
"load_mw": 53521.0,
"settlement_points": {
"HB_HOUSTON": { "da": { "0": 23.65, ... }, "rt": { "0": 27.38, ... } },
"HB_NORTH": { "da": { "0": 23.42, ... }, "rt": { "0": 24.25, ... } },
"HB_SOUTH": { "da": { "0": 22.58, ... }, "rt": { "0": 23.63, ... } },
"HB_WEST": { "da": { "0": 27.32, ... }, "rt": { "0": 30.53, ... } }
},
"ancillary_services": {
"reg_up": 5.50, "reg_down": 3.30, "rrs": 2.10,
"non_spin": 1.25, "ecrs": 0.80,
"timestamp": "2026-03-11 08:00:00-0500"
},
"source_url": "https://www.ercot.com",
"fetched_at": "2026-03-11T17:30:00+00:00"
}
}
ERCOT-specific fields: settlement_points — DA + RT prices per hub (Houston, North, South, West). ancillary_services — real-time MCPC for Reg Up/Down, RRS, Non-Spin, ECRS. These fields are only present for ERCOT.
Trading Signals
| Param | Type | Description |
|---|---|---|
date | query | Optional. YYYY-MM-DD |
asset_type | query | Optional. "bess" or "v2g" |
// Example response
{
"ok": true,
"data": {
"direction": "BUY",
"conviction": 0.78,
"reason": "Wide peak-off-peak spread (42 EUR) + low wind forecast",
"signals": ["spread_wide", "low_wind", "high_demand"],
"spread_eur_mwh": 42.3,
"renewable_share_pct": 38.5
}
}
| Param | Type | Description |
|---|---|---|
country | query | Country code |
asset_kw | query | Battery capacity in kW |
fcr_pct | query | FCR allocation % (default: 0.3) |
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"question": "Why did German prices spike today?"}' \
https://app.axonnpower.com/v1/ask
Monitors
Create autonomous browser agents that monitor energy filing websites, extract structured data, and alert you on changes. Includes quality scoring, punishment for bad extractions, and self-healing agent memory.
prebuilt_source for one-click setup, or provide custom url + task_description + output_schema.// Create from prebuilt
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"prebuilt_source": "ferc", "name": "FERC Filings"}' \
https://app.axonnpower.com/v1/monitors
// Create custom
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "ERCOT fuel mix",
"url": "https://www.ercot.com/gridmktinfo/dashboards",
"task_description": "Extract current fuel mix percentages",
"output_schema": {"wind_pct": "number", "solar_pct": "number", "gas_pct": "number"},
"interval_s": 300
}' \
https://app.axonnpower.com/v1/monitors
Also available: PATCH /v1/monitors/{id}, DELETE /v1/monitors/{id}, GET /v1/monitors/{id}/changes, GET /v1/monitors/{id}/health, GET /v1/monitors/{id}/export, GET /v1/monitors/{id}/memory
Alerts & Streaming
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": "prices",
"country": "DE",
"condition": "price_below",
"threshold": 0,
"channel": "webhook",
"target": "https://your-server.com/hook"
}' \
https://app.axonnpower.com/v1/alerts
const ws = new WebSocket("wss://app.axonnpower.com/v1/ws?api_key=YOUR_KEY");
ws.onopen = () => ws.send(JSON.stringify({ subscribe: ["prices:DE", "generation:FR"] }));
ws.onmessage = (e) => console.log(JSON.parse(e.data));
Agent & Scraping
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.eia.gov/electricity/", "task": "Extract latest generation stats"}' \
https://app.axonnpower.com/v1/agent/browse
Billing
Upgrade via Stripe checkout:
curl -X POST -H "X-API-Key: YOUR_KEY" \
https://app.axonnpower.com/v1/billing/checkout
Manage subscription: POST /v1/billing/portal
Data Export PAID
curl -H "X-API-Key: YOUR_KEY" \
"https://app.axonnpower.com/v1/export/prices/DE?start_date=2026-01-01&end_date=2026-03-01&format=csv"
Formats: csv, json. Add &download=true for file download.
Historical Data
GET /v1/history/prices/{country}?limit=100&offset=0
GET /v1/history/generation/{country}
GET /v1/history/weather/{country}
GET /v1/history/commodities/{name} # ttf_gas, eua_carbon
Need Help?
Interactive API explorer: /docs (Swagger UI) or /redoc (ReDoc)
Contact: founder@axonn-power.com