API · Reference · v1
API Documentation
OutageCalendar offers a read-only JSON API exposing the same plant and outage data shown on the public site. Access requires a per-user API key. Subscribe for access.
- Base path
- /api/v1
- Format
- JSON
- Auth
- Bearer key
- Page size
- 50, max 100
Authentication
Send your key as a bearer token on every request:
Authorization: Bearer oc_live_<your key>
Plants
- GET
/api/v1/plants - A paginated list of plants.
- GET
/api/v1/plants/:id - A single plant.
{
"data": [
{
"id": 1,
"name": "Sample Nuclear Site",
"address1": "123 Main St",
"address2": "Anytown, IL 60000",
"phone": "555-123-4567",
"latitude": 34.0,
"longitude": -81.0
}
],
"meta": { "page": 1, "per_page": 50, "total_pages": 3, "total_count": 120 }
}
Outages
- GET
/api/v1/outages - Active outages, sorted by plant name. Returns one row per site/unit (no display-only collapsing to a single row per plant).
- GET
/api/v1/outages/:id - A single outage.
Filters (index only)
?upcoming=true— only outages whose window hasn't passed yet, sorted by start date. Any value other thanfalse/0/off(case-insensitive) or omitting the parameter counts as true.?plant_id=123— only outages for one plant
Example — every unit at one plant:
curl https://outagecalendar.com/api/v1/outages?plant_id=42 \
-H "Authorization: Bearer oc_live_<your key>"
{
"data": [
{
"id": 5031,
"plant_id": 42,
"plant": "Example Nuclear Plant",
"unit": 1,
"start_date": "2026-10-03",
"duration": 24
},
{
"id": 5032,
"plant_id": 42,
"plant": "Example Nuclear Plant",
"unit": 2,
"start_date": "2027-02-14",
"duration": 19
}
],
"meta": { "page": 1, "per_page": 50, "total_pages": 1, "total_count": 2 }
}
Unit 1 and unit 2 are the same plant, returned as two separate rows — the public
calendar collapses them into one line. A forecasted outage window (from the outage forecaster
built on NRC reactor power-history data) arrives in the same start_date and
duration fields as a confirmed date. Sample values are illustrative.
Pagination
?page= and ?per_page= (capped at 100, default 50) are accepted on
both index endpoints.
Errors
{ "error": { "message": "Invalid or missing API key" } }
A missing or invalid key returns 401; an unknown :id returns
404; a valid key whose subscription has lapsed returns 402.