Western Power Corporate Web API

The anonymous read endpoints behind westernpower.com.au itself — site search, the news article feed and the careers vacancy feed. These are internal endpoints of the Optimizely/EPiServer corporate site, declared in the site's own JavaScript bundle and reachable without authentication (verified HTTP 200 on 2026-07-27). /api/search is backed by Optimizely Find and returns paged hits, a did-you-mean suggestion, content-type facets and — unusually — an embedded suburb outage rollup so a search box can surface outage status inline. /api/corp/vacancies and /api/corp/newsarticles serve the careers and newsroom listings. robots.txt disallows /api/, and Western Power publishes no documentation, terms of use or SLA for these endpoints. The OpenAPI below was derived by API Evangelist from live probes and from parameter names read out of the site's client bundle.

OpenAPI Specification

western-power-corporate-web-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Western Power Corporate Web API
  version: '2026.7.7.1'
  description: >-
    The anonymous read endpoints behind westernpower.com.au itself — site search,
    the news article feed and the careers vacancy feed. These are internal
    endpoints of the Optimizely/EPiServer corporate site, declared in the site's
    JavaScript bundle (`/static/assets/app.*.js`) and reachable without
    authentication. `robots.txt` disallows `/api/` to crawlers; Western Power
    publishes no documentation, terms of use or SLA for them. This description was
    DERIVED BY API EVANGELIST from live probes on 2026-07-27 and is not published
    by Western Power.
  x-apievangelist-provenance:
    method: derived
    derived_by: API Evangelist
    derived_from: >-
      live HTTP probes of https://www.westernpower.com.au/api/* plus parameter names
      read from the site's own client bundle /static/assets/app.18c3b7f4.js
    probe_date: '2026-07-27'
    provider_published: false
  contact:
    name: Western Power
    url: https://www.westernpower.com.au/contact-us/
servers:
  - url: https://www.westernpower.com.au/api
    description: Production (Cloudflare-fronted, anonymous)
tags:
  - name: Search
  - name: Content
paths:
  /search:
    get:
      tags: [Search]
      operationId: searchSite
      summary: Search westernpower.com.au
      description: >-
        Full-site search over the corporate site, backed by Optimizely Find.
        Returns paged `hits`, a `didYouMean` suggestion, facet `types`, and —
        uniquely — an embedded suburb `outage` rollup so a search box can surface
        outage status inline. Observed 3,632 total matches for an empty query.
      parameters:
        - name: query
          in: query
          description: Search term.
          schema:
            type: string
        - name: pagenumber
          in: query
          description: 1-based page index.
          schema:
            type: integer
            default: 1
        - name: pageSize
          in: query
          description: Results per page. The site's type-ahead uses 5.
          schema:
            type: integer
        - name: type
          in: query
          description: Facet/content-type filter, taken from the `types` array of a prior response.
          schema:
            type: string
        - name: includefacets
          in: query
          description: Whether to compute the `types` facet list.
          schema:
            type: boolean
        - name: includeSuburbOutage
          in: query
          description: Whether to populate the embedded `outage` rollup.
          schema:
            type: boolean
      responses:
        '200':
          description: Search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
  /corp/newsarticles:
    get:
      tags: [Content]
      operationId: listNewsArticles
      summary: List news articles
      description: >-
        Paged feed behind westernpower.com.au/news/. Returns an empty
        `newsArticles` array unless `rootPageId` scopes the query to the news
        section; `totalMatching` and `pageSize` are always returned.
      parameters:
        - name: page
          in: query
          description: 1-based page index.
          schema:
            type: integer
        - name: selectedFilters
          in: query
          description: Repeated filter values, serialised by the client with `qs`.
          schema:
            type: array
            items:
              type: string
        - name: rootPageId
          in: query
          description: Optimizely content id of the section to list under.
          schema:
            type: string
      responses:
        '200':
          description: News article page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewsArticlePage'
  /corp/vacancies:
    get:
      tags: [Content]
      operationId: listVacancies
      summary: List job vacancies
      description: >-
        Careers feed behind westernpower.com.au/about/careers/. Returns the open
        roles with location and posting date, plus the filter and sort option
        lists the careers page renders.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
        - name: selectedLocation
          in: query
          schema:
            type: array
            items:
              type: string
        - name: selectedRole
          in: query
          schema:
            type: array
            items:
              type: string
        - name: selectedSort
          in: query
          schema:
            type: string
        - name: selectedSearchText
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Vacancy page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VacancyPage'
components:
  schemas:
    SearchResults:
      type: object
      properties:
        outage:
          type: object
          description: Embedded suburb outage rollup, same shape as the outage API's suburb status.
        totalMatching:
          type: integer
        currentPage:
          type: integer
        searchTerm:
          type: [string, 'null']
        didYouMean:
          type: string
        hits:
          type: array
          items:
            $ref: '#/components/schemas/SearchHit'
        types:
          type: array
          description: Content-type facets with counts.
          items:
            type: object
    SearchHit:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
        url:
          type: string
        badge:
          type: string
        additionalInformation:
          type: string
    NewsArticlePage:
      type: object
      properties:
        newsArticles:
          type: array
          items:
            type: object
        pageSize:
          type: integer
        totalMatching:
          type: integer
        showFeaturedArticle:
          type: boolean
    VacancyPage:
      type: object
      properties:
        vacancies:
          type: array
          items:
            $ref: '#/components/schemas/Vacancy'
        pageSize:
          type: integer
        totalMatching:
          type: integer
        filterArray:
          type: array
          items:
            type: object
        sortingFilter:
          type: array
          items:
            type: object
    Vacancy:
      type: object
      properties:
        url:
          type: string
        roleName:
          type: string
        roleDescription:
          type: [string, 'null']
        location:
          type: string
        date:
          type: string
          format: date-time