Quickstart

From nothing to a list of live outages in about five minutes.

  1. Start the API plan. A key works only while its account has the plan. Add a card in Settings › Billing, then start the plan in Settings › API: the rest of this month is charged at once, pro-rated by the days left, and the plan turns on when that payment is confirmed, usually within seconds. The API plan is $49.00 AUD a month including GST, with 2,000 calls each month, then $10.00 AUD per 1,000 beyond them, a cent a call. Enterprise accounts have the API by arrangement and can skip this step. See Billing and usage.

  2. Create a key. In Settings › API, create a key and give it a name you will recognise later, such as the integration it is for. Copy it now — it is shown once. Keys start with aot_live_.

  3. Put it in your environment. Keep it out of your code and out of any URL.

    export AOT_API_KEY="aot_live_…"
  4. Make a call. What is off right now in Victoria, two at a time:

    curl -H "Authorization: Bearer $AOT_API_KEY" \
      "https://api.aussieoutagetracker.com.au/v1/outages?state=vic&status=active&limit=2"

Read the response

200GET /v1/outages?state=vic&status=active&limit=2
{
  "data": [
    {
      "id": 172487,
      "network": {
        "id": "ausnet",
        "name": "AusNet Services",
        "brand": null
      },
      "utility": "electricity",
      "state": "vic",
      "type": "planned",
      "status": "active",
      "status_detail": "SCHEDULED|In Progress",
      "cause": {
        "category": "planned_work",
        "description": null
      },
      "customers_affected": 1,
      "customers_off_now": 1,
      "starts_at": "2026-10-20T02:30:00.000Z",
      "estimated_restoration_at": "2026-10-20T05:00:00.000Z",
      "restored_at": null,
      "restored_at_basis": null,
      "duration_minutes": null,
      "first_seen_at": "2026-10-19T01:05:24.829Z",
      "last_seen_at": "2026-10-20T02:27:46.997Z",
      "updated_at": "2026-10-20T01:41:20.310Z",
      "location": {
        "kind": "point",
        "approximate": true,
        "centroid": {
          "lat": -36.327088,
          "lng": 146.389099
        },
        "localities": [
          {
            "name": "North Wangaratta",
            "postcode": "3678",
            "customers": 1
          }
        ]
      },
      "source": {
        "reference": "INCD-138623-W"
      }
    },
    {
      "id": 172234,
      "network": {
        "id": "ausnet",
        "name": "AusNet Services",
        "brand": null
      },
      "utility": "electricity",
      "state": "vic",
      "type": "planned",
      "status": "active",
      "status_detail": "SCHEDULED|In Progress",
      "cause": {
        "category": "planned_work",
        "description": null
      },
      "customers_affected": 17,
      "customers_off_now": 17,
      "starts_at": "2026-10-20T02:30:00.000Z",
      "estimated_restoration_at": "2026-10-20T04:30:00.000Z",
      "restored_at": null,
      "restored_at_basis": null,
      "duration_minutes": null,
      "first_seen_at": "2026-10-19T01:05:24.829Z",
      "last_seen_at": "2026-10-20T02:27:46.997Z",
      "updated_at": "2026-10-20T01:41:20.310Z",
      "location": {
        "kind": "point",
        "approximate": true,
        "centroid": {
          "lat": -38.184243,
          "lng": 145.94738
        },
        "localities": [
          {
            "name": "Warragul",
            "postcode": "3820",
            "customers": 17
          }
        ]
      },
      "source": {
        "reference": "INCD-220596-U"
      }
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "eyJzIjoiLXN0YXJ0IiwidiI6IjIwMjYtMTAtMjBUMDI6MzA6MDAuMDAwWiIsImkiOjE3MjIzNH0",
    "limit": 2
  },
  "meta": {
    "data_as_of": "2026-10-20T02:28:26.234Z"
  }
}

A real response, captured from the API. Arrays are shortened to two items.

Every list response has the same three parts:

  • data — the outages. Each one is the same object whichever network it came from: Outages explains it field by field.
  • pagination — has_more says whether there is another page, and next_cursor is what you pass as cursor to get it. See Pagination.
  • meta.data_as_of — when the most recent successful poll of any network finished. The networks are polled every few minutes; a stale value means the feeds are behind, not your request.

A few things worth knowing on your first read:

  • status is our normalised lifecycle; status_detail is the network's own words. See Statuses.
  • customers_affected is the outage's size; customers_off_now is the live figure, and only while active.
  • A field the network did not publish is null. AusNet publishes no cause, so an AusNet fault has cause.category: null.
  • location.approximate is true for a point. Never draw a point as the edge of an outage.

Try the other endpoints

curl -H "Authorization: Bearer $AOT_API_KEY" \
  "https://api.aussieoutagetracker.com.au/v1/outages/175137"

The detail adds the outage's geometry and the suburbs it is attributed to.

In code

list-active.mjs
const res = await fetch('https://api.aussieoutagetracker.com.au/v1/outages?state=vic&status=active', {
  headers: { Authorization: `Bearer ${process.env.AOT_API_KEY}` },
});
if (!res.ok) {
  const { error } = await res.json();
  throw new Error(`${res.status} ${error.code}: ${error.message}`);
}
const { data, meta } = await res.json();
console.log(`${data.length} outages, data as of ${meta.data_as_of}`);

Next