Western Power Outage Areas Feature Service

Live outage data for the South West Interconnected System, served as an Esri ArcGIS Online hosted feature service (layer 0, "Outage_Areas") that backs the public Western Power outage tracker at westernpower.com.au/outages/. Western Power does not document or advertise this as an API, but the service answers anonymous unauthenticated requests (verified HTTP 200 on 2026-07-27), is self-describing via the standard ArcGIS REST `?f=json` metadata convention, and supports the Query capability with a 2,000-record page size. Each outage polygon carries OUTAGETYPE, INCIDENTREF, ENARNUMBER, OUTAGESTARTTIME, ESTIMATEDRESTORATIONTIME, PLANNEDOUTAGE, NOCUSTOMERSIMPACTED, TIMEADDED, AFFECTED_AREA and AFFECTED_AREA_NOCUSTOMERS. No API key, token or registration is required; equally, no support, SLA, terms of use or deprecation policy is published for it.

OpenAPI Specification

western-power-arcgis-outage-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Western Power Outage Areas Feature Service (ArcGIS REST)
  version: '12'
  description: >-
    Esri ArcGIS Online hosted feature service (`WP_Outage_Prod`, layer 0
    `Outage_Areas`) that serves the outage polygons behind the public Western
    Power outage tracker. The service answers anonymous requests, is
    self-describing through the standard ArcGIS REST `?f=json` metadata
    convention, and advertises only the `Query` capability. This description was
    DERIVED BY API EVANGELIST from the service metadata harvested verbatim to
    `arcgis/wp-outage-featureserver.json` and `arcgis/wp-outage-layer0-outage-areas.json`
    on 2026-07-27; the parameter set is the Esri ArcGIS REST Query interface, and
    the response fields are the layer's own declared field list. Western Power
    publishes no documentation, terms of use, SLA or deprecation policy for it.
  x-apievangelist-provenance:
    method: derived
    derived_by: API Evangelist
    derived_from:
      - arcgis/wp-outage-featureserver.json
      - arcgis/wp-outage-layer0-outage-areas.json
      - arcgis/wp-outage-sample-query-response.json
    probe_date: '2026-07-27'
    provider_published: false
  x-service-capabilities: Query
  x-max-record-count: 2000
servers:
  - url: https://services2.arcgis.com/tBLxde4cxSlNUxsM/ArcGIS/rest/services/WP_Outage_Prod/FeatureServer
    description: ArcGIS Online hosted feature service (anonymous)
tags:
  - name: Metadata
  - name: Query
paths:
  /:
    get:
      tags: [Metadata]
      operationId: getFeatureServerMetadata
      summary: Get feature service metadata
      description: Self-describing service document listing layers, extents, capabilities and formats.
      parameters:
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Service metadata.
          content:
            application/json:
              schema:
                type: object
  /0:
    get:
      tags: [Metadata]
      operationId: getOutageAreasLayerMetadata
      summary: Get layer 0 (Outage_Areas) metadata
      description: >-
        Layer document with the full field list, indexes, query capabilities,
        `maxRecordCount` (2000) and the 120-second `cacheMaxAge`.
      parameters:
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Layer metadata.
          content:
            application/json:
              schema:
                type: object
  /0/query:
    get:
      tags: [Query]
      operationId: queryOutageAreas
      summary: Query outage area polygons
      description: >-
        Standard ArcGIS REST query against layer 0. Supports SQL `where` clauses,
        attribute selection, spatial filters, ordering, statistics and pagination
        (`resultOffset` + `resultRecordCount`, `advancedQueryCapabilities.supportsPagination`
        is true). Page size is capped at 2000 features (32000 with
        `returnGeometry=false`). Output formats are JSON, geoJSON and PBF.
      parameters:
        - name: where
          in: query
          description: SQL-92 where clause. Use `1=1` to select all.
          schema:
            type: string
            default: '1=1'
        - name: outFields
          in: query
          description: Comma-separated field list, or `*`.
          schema:
            type: string
            default: '*'
        - name: returnGeometry
          in: query
          schema:
            type: boolean
            default: true
        - name: geometry
          in: query
          description: Spatial filter geometry (Esri JSON or comma-separated envelope).
          schema:
            type: string
        - name: geometryType
          in: query
          schema:
            type: string
            enum:
              - esriGeometryPoint
              - esriGeometryPolyline
              - esriGeometryPolygon
              - esriGeometryEnvelope
        - name: spatialRel
          in: query
          description: >-
            Spatial relationship. The layer advertises esriSpatialRelIntersects,
            Contains, Crosses, EnvelopeIntersects, IndexIntersects, Overlaps,
            Touches, Within, Disjoint and Relation.
          schema:
            type: string
            default: esriSpatialRelIntersects
        - name: inSR
          in: query
          schema:
            type: string
        - name: outSR
          in: query
          description: Output spatial reference. The layer's native SR is 102100/3857.
          schema:
            type: string
        - name: orderByFields
          in: query
          schema:
            type: string
        - name: returnCountOnly
          in: query
          schema:
            type: boolean
            default: false
        - name: resultOffset
          in: query
          description: Pagination offset.
          schema:
            type: integer
        - name: resultRecordCount
          in: query
          description: Page size, capped at 2000 (32000 when returnGeometry=false).
          schema:
            type: integer
            maximum: 2000
        - name: f
          in: query
          description: Response format. `supportedQueryFormats` is "JSON, geoJSON, PBF".
          schema:
            type: string
            enum: [json, pjson, geojson, pbf]
            default: json
      responses:
        '200':
          description: >-
            Query result. ArcGIS returns HTTP 200 for errors too — check for an
            `error` object in the body.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/FeatureSet'
                  - $ref: '#/components/schemas/ArcGISError'
components:
  parameters:
    Format:
      name: f
      in: query
      description: Response format.
      schema:
        type: string
        enum: [json, pjson, html]
        default: html
  schemas:
    FeatureSet:
      type: object
      properties:
        objectIdFieldName:
          type: string
        globalIdFieldName:
          type: string
        geometryType:
          type: string
        spatialReference:
          type: object
        fields:
          type: array
          items:
            type: object
        exceededTransferLimit:
          type: boolean
        features:
          type: array
          items:
            type: object
            properties:
              attributes:
                $ref: '#/components/schemas/OutageAreaAttributes'
              geometry:
                type: object
    OutageAreaAttributes:
      type: object
      description: Field list declared verbatim by layer 0 (Outage_Areas).
      properties:
        OBJECTID:
          type: integer
          description: esriFieldTypeOID, system maintained primary key.
        OUTAGETYPE:
          type: [string, 'null']
          maxLength: 50
        INCIDENTREF:
          type: [string, 'null']
          maxLength: 50
        ENARNUMBER:
          type: [string, 'null']
          maxLength: 50
        OUTAGESTARTTIME:
          type: [string, 'null']
          maxLength: 50
        ESTIMATEDRESTORATIONTIME:
          type: [string, 'null']
          maxLength: 50
        PLANNEDOUTAGE:
          type: [string, 'null']
          maxLength: 50
        NOCUSTOMERSIMPACTED:
          type: [integer, 'null']
        TIMEADDED:
          type: [integer, 'null']
          description: esriFieldTypeDate, epoch milliseconds, UTC time reference.
        AFFECTED_AREA:
          type: [string, 'null']
          maxLength: 2000
        AFFECTED_AREA_NOCUSTOMERS:
          type: [string, 'null']
          maxLength: 1200
        Tags:
          type: [string, 'null']
          maxLength: 4000
        SHAPE__Area:
          type: [number, 'null']
        SHAPE__Length:
          type: [number, 'null']
    ArcGISError:
      type: object
      description: Esri error envelope, returned with HTTP 200.
      properties:
        error:
          type: object
          properties:
            code:
              type: integer
            message:
              type: string
            details:
              type: array
              items:
                type: string