Quickstart
From nothing to a list of live outages in about five minutes.
-
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.
-
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_. -
Put it in your environment. Keep it out of your code and out of any URL.
export AOT_API_KEY="aot_live_…" -
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
GET /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_moresays whether there is another page, andnext_cursoris what you pass ascursorto 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:
statusis our normalised lifecycle;status_detailis the network's own words. See Statuses.customers_affectedis the outage's size;customers_off_nowis the live figure, and only whileactive.- A field the network did not publish is
null. AusNet publishes no cause, so an AusNet fault hascause.category: null. location.approximateistruefor 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
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}`);