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:

Request header
Authorization: Bearer oc_live_<your key>

Plants

GET/api/v1/plants
A paginated list of plants.
GET/api/v1/plants/:id
A single plant.
Response · GET /api/v1/plants
{
  "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 than false/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:

Request
curl https://outagecalendar.com/api/v1/outages?plant_id=42 \
  -H "Authorization: Bearer oc_live_<your key>"
Response
{
  "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 response
{ "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.