openapi: 3.2.0 info: title: AEMC Energy Rules Search API version: '2026-07-27' description: 'Machine-readable description of the undocumented JSON API that serves the Australian Energy Market Commission''s Energy Rules application at https://energy-rules.aemc.gov.au. It exposes the consolidated, versioned text of the National Electricity Rules (NER), National Gas Rules (NGR) and National Energy Retail Rules (NERR) — the rule versions and their PDF/DOCX artefacts, the table of contents, every chapter/part/division/rule/clause node, the full-text search index and the complete defined-terms glossary. AEMC publishes NO OpenAPI, no developer portal and no API documentation for this surface. This document is DERIVED, not harvested. Every path below is a literal route string taken from AEMC''s own shipped production JavaScript bundle (https://de4oj9etm9d7w.cloudfront.net/b8470902-3d28-4902-8883-2c59d10e7818/js/app.js), and each one was probed live and anonymously on 2026-07-27 with the observed HTTP status recorded in `x-evidence`. Response schemas are derived ONLY from responses actually observed on those probes — no field, parameter or status code is invented. ACCESS: entirely anonymous. No API key, no OAuth, no cookie and no CSRF token was required for any read endpoint probed; responses carry `x-ratelimit-limit: 1000` and `x-ratelimit-remaining`, served through AWS API Gateway (`apigw-requestid`) in front of a Laravel application (Laravel API Resource `data`/`links`/`meta` envelope, Laravel-style pagination). NOT MODELLED: the production bundle also contains an administrative, token-gated approval route of the form `/api/v1/{type}/{version}/approve/{token}` used by the editorial preview workflow. It is a state-changing endpoint, it was deliberately NOT probed, and it is deliberately not modelled here. The `previewToken` query parameter that several read endpoints accept belongs to the same editorial preview workflow and is not usable anonymously. STATUS: this is an undocumented internal API of a public website, not a product AEMC offers or supports. There is no published terms-of-use, rate-limit policy, SLA, versioning policy or contact for it. Treat it as subject to change without notice, and report inaccuracies rather than treating this document as an authoritative contract.' contact: name: AEMC url: https://www.aemc.gov.au/contact-us x-provenance: generated: '2026-07-27' method: derived sources: - https://de4oj9etm9d7w.cloudfront.net/b8470902-3d28-4902-8883-2c59d10e7818/js/app.js - live anonymous HTTP probes 2026-07-27 note: Not published by AEMC. Derived by API Evangelist from AEMC's own production client bundle plus live anonymous probes of every route. servers: - url: https://energy-rules.aemc.gov.au/api/v1 description: Production tags: - name: Search description: Full-text search within a single rule version. paths: /rules/{versionId}/search: get: operationId: searchRuleVersion summary: Full-text search within a rule version description: Searches the text of one rule version and returns matching content nodes with a `search_content` snippet, the parent node, the children and the version block. Paginated with a Laravel `meta` envelope. Verified live 2026-07-27 — `query=smart meter` against NER v251 returned matches including "Transitional Arrangements for Ministerial Smart Meter Roll Out Determinations". tags: - Search parameters: - $ref: '#/components/parameters/VersionId' - name: query in: query required: true schema: type: string - name: chapter in: query required: false description: Restrict to one chapter. The client omits this parameter for "All Chapters". schema: type: string - name: page in: query required: false schema: type: integer minimum: 1 default: 1 - name: perPage in: query required: false schema: type: integer minimum: 1 default: 30 - name: previewToken in: query required: false schema: type: string responses: '200': description: Paginated search results. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/SearchResult' meta: $ref: '#/components/schemas/PaginationMeta' '404': $ref: '#/components/responses/NotFound' x-evidence: probed: '2026-07-27' requests: - url: https://energy-rules.aemc.gov.au/api/v1/rules/803/search?query=smart%20meter&page=1&perPage=3 status: 200 bytes: 2171 components: schemas: PaginationMeta: type: object properties: current_page: type: integer from: type: - integer - 'null' to: type: - integer - 'null' last_page: type: integer per_page: type: integer total: type: integer path: type: string format: uri first_page_url: type: - string - 'null' format: uri last_page_url: type: - string - 'null' format: uri next_page_url: type: - string - 'null' format: uri prev_page_url: type: - string - 'null' format: uri links: type: array items: type: object properties: url: type: - string - 'null' format: uri label: type: string active: type: boolean SearchResult: type: object properties: id: type: integer parent_id: type: - integer - 'null' title: type: string description: type: - string - 'null' index: type: string chapter: type: string content: type: - string - 'null' content_type: type: string metadata: type: - object - 'null' search_index: type: integer search_content: type: string description: Matched text snippet. type: type: string links: type: object properties: self: type: string format: uri parent: type: - string - 'null' format: uri parent: type: - object - 'null' children: type: array items: type: object version: type: object properties: version_id: type: integer version: type: integer approved: type: integer current: type: integer archived: type: integer type: type: string start_date: type: - string - 'null' end_date: type: - string - 'null' Error: type: object description: Error envelope observed on 404 responses. Not RFC 9457 problem+json. properties: message: type: string examples: - Not found responses: NotFound: description: No such rule version, content node or term. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: VersionId: name: versionId in: path required: true description: The rule version **id** (the `id` field of a rule version object, e.g. 803 for NER v251) — NOT the human-facing version number. Passing the version number returns HTTP 404. schema: type: integer examples: - 803