Ontario Energy Board Records API

Search and retrieve records (filings, decisions, orders, licences, correspondence) in the OEB case record.

Operations 3

GET /Record Search the OEB regulatory document record #
GET /Record/{uri} Retrieve a single record by Content Manager URI #
GET /Record/{uri}/File/document Download the document filed under a record #

Documentation

📖
Documentation
https://www.oeb.ca/open-data
📖
GettingStarted
https://www.oeb.ca/sites/default/files/Open-Data-Guide-XML-Excel-20221215.pdf
📖
Documentation
https://www.oeb.ca/sites/default/files/OEBltr-Transition-to-Open-Data-20220929.pdf
📖
Documentation
https://www.oeb.ca/sites/default/files/OEB-Letter-Open-Data-2.0-20231006.pdf
📖
Documentation
https://www.oeb.ca/sites/default/files/OEB-letter-open-data-20240827.pdf
📖
Documentation
https://www.oeb.ca/open-data/applications-oeb
📖
Documentation
https://www.oeb.ca/open-data/current-electricity-rates-residential-rate-class
📖
Documentation
https://www.oeb.ca/open-data/current-electricity-rates-general-service-50-kw-rate-class
📖
Documentation
https://www.oeb.ca/open-data/current-natural-gas-rates-residential-rate-classes
📖
Documentation
https://www.oeb.ca/open-data/electricity-and-natural-gas-distributors-service-areas
📖
Documentation
https://www.oeb.ca/open-data/electricity-distributor-performance-scorecard
📖
Documentation
https://www.oeb.ca/open-data/electricity-distributor-complaints-received-oeb
📖
Documentation
https://www.oeb.ca/open-data/electricity-distribution-rates-databases
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2142-system-reliability
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2141-reporting-service
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-214210-major-event-response
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2119-billing-accuracy
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2116-low-income-energy
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-212-market-monitoring
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2151-labour
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2152-capital
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2153-supply-and-delivery
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2154-demand-and-revenue
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2155-utility
📖
Documentation
https://www.oeb.ca/open-data/electricity-reporting-record-keeping-requirements-rrr-section-2156-regulated-return
📖
Documentation
https://www.oeb.ca/open-data/licensed-market-participants
📖
Documentation
https://www.oeb.ca/open-data/historical-regulated-price-plan-electricity-rates
📖
Documentation
https://www.oeb.ca/open-data/intervenor-cost-awards
📖
Documentation
https://www.oeb.ca/ontarios-energy-sector/open-data?page=1
📖
Documentation
https://www.oeb.ca/rds
📖
Documentation
https://www.oeb.ca/ontarios-energy-sector/list-licensed-companies
📖
Authentication
https://raw.githubusercontent.com/api-evangelist/ontario-energy-board/refs/heads/main/authentication/ontario-energy-board-authentication.yml

Specifications

Schemas & Data

Other Resources

🔗
ContentLicense
https://www.ontario.ca/page/open-government-licence-ontario
🔗
Reference
https://www.ontario.ca/page/ontarios-digital-and-data-directive-2021
🔗
Dataset
https://www.oeb.ca/_html/xml/all_open_appl_Cases_v2_reportFile.xml
🔗
Dataset
https://www.oeb.ca/_html/calculator/data/BillData.xml
🔗
Dataset
https://www.oeb.ca/_html/calculator/data/BillData_GS.xml
🔗
Dataset
https://www.oeb.ca/_html/calculator/data/GasBillData.xml
🔗
Dataset
https://www.oeb.ca/documents/opendata/open-data-electricity-map-20260429.zip
🔗
Dataset
https://www.oeb.ca/documents/opendata/open-data-naturalgas-map-20260225.zip
🔗
Dataset
https://www.oeb.ca/_html/performance/data/scorecard_data_2024.xml
🔗
Dataset
https://www.oeb.ca/_html/performance/data/complaints_data_2022.xml
🔗
Dataset
https://www.oeb.ca/documents/opendata/rrr/2.1.4.2%20System%20Reliability%20Indicators.xml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/ontario-energy-board/refs/heads/main/data-model/ontario-energy-board-data-model.yml
🔗
Dataset
https://www.oeb.ca/_html/xml/all_Licences_report_File.xml
🔗
Reference
https://www.rds.oeb.ca/CMWebDrawer/Record?q=CaseNumber=EB-2021-0183&sortBy=recRegisteredOn-&pageSize=400
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/ontario-energy-board/refs/heads/main/examples/ontario-energy-board-rds-record-search-response.json
🔗
Vocabulary
https://raw.githubusercontent.com/api-evangelist/ontario-energy-board/refs/heads/main/vocabulary/ontario-energy-board-rds-search-clauses.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/ontario-energy-board/refs/heads/main/errors/ontario-energy-board-problem-types.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ontario-energy-board-records-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ontario-energy-board-records-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: OEB Regulatory Document Search (RDS) Records API
  version: 2026-07-27
  summary: Anonymous, undocumented JSON query surface over the Ontario Energy Board's regulatory document record.
  description: 'A machine-readable description of the query surface the Ontario Energy Board''s Regulatory Document Search (RDS) actually serves at https://www.rds.oeb.ca/CMWebDrawer.


    IMPORTANT — PROVENANCE. The OEB does **not** publish this definition. The OEB publishes no API reference, no base-URI statement, no query-syntax documentation, no OpenAPI, no rate-limit policy and no terms for this interface. RDS runs on Micro Focus / OpenText Content Manager WebDrawer, and the JSON projection described here is default behaviour of that product, reached by adding `format=json` to the same parameterised `Record` URLs the OEB itself links to from www.oeb.ca (the licensed-companies list alone links hundreds of them). This document was **generated by API Evangelist from live anonymous probes on 2026-07-27** — every path, parameter, status code, media type and schema below was observed, and each operation carries an `x-evidence` block naming the exact URL probed and what came back. Nothing here is inferred from documentation, because there is none. Treat it as an accurate map of an undocumented, unsupported surface that the OEB may change or withdraw without notice — not as an offered API contract.


    Authentication: none. Every request below was made anonymously with no key, no token, no cookie and no signup.'
  contact:
    name: Ontario Energy Board
    url: https://www.oeb.ca/contact-ontario-energy-board
  license:
    name: Open Government Licence – Ontario
    url: https://www.ontario.ca/page/open-government-licence-ontario
  x-generated-by: API Evangelist enrichment pipeline
  x-generation-method: generated-from-live-probes
  x-published-by-provider: false
servers:
- url: https://www.rds.oeb.ca/CMWebDrawer
  description: Production RDS WebDrawer host (TLSv1.3, HSTS max-age 31536000; includeSubDomains; preload)
tags:
- name: Records
  description: Search and retrieve records (filings, decisions, orders, licences, correspondence) in the OEB case record.
paths:
  /Record:
    get:
      tags:
      - Records
      operationId: searchRecords
      summary: Search the OEB regulatory document record
      description: Runs a Content Manager record search and returns matching records. With `format=json` the response is a Content Manager `TRIMServiceAPIModel` payload; without it the same query renders an HTML results page. Results carry the OEB's own regulatory fields — CaseNumber, SIDocumentType, Applicant, EnergyType, PrimaryApplicationType, DateIssued, fDateReceived.
      parameters:
      - name: q
        in: query
        required: true
        description: Search clause. Use `<term>=<value>` for comparison or `<term>:<value>` for word/contains matching. The complete set of 303 valid terms is published live at /Help/WDSearchClauseDefJS?trimType=Record and captured in vocabulary/ontario-energy-board-rds-search-clauses.yml.
        schema:
          type: string
        examples:
          byCaseNumber:
            summary: Every document filed in one case (verified 200, 40 records)
            value: CaseNumber=EB-2021-0183
          byEnergyType:
            summary: All electricity records (verified 200, 131,171 records)
            value: EnergyType=Electricity
          byApplicationType:
            summary: All Initiatives records (verified 200, 22,160 records)
            value: PrimaryApplicationType=Initiatives
          byFreeText:
            summary: Word search across the record (verified 200, 4,276 records)
            value: anyWord:rate
      - name: format
        in: query
        required: false
        description: Response projection. `json` returns application/json; omitted returns the HTML results page.
        schema:
          type: string
          enum:
          - json
        example: json
      - name: sortBy
        in: query
        required: false
        description: 'Sort clause; a trailing `-` sorts descending. 87 of the 303 clauses are sortable (`CanSort: true` in the clause definitions). This is the parameter the OEB''s own website links use.'
        schema:
          type: string
        example: recRegisteredOn-
      - name: pageSize
        in: query
        required: false
        description: Number of records returned in this page. Values from 1 to 400 were observed in OEB-authored links.
        schema:
          type: integer
          minimum: 1
        example: 400
      - name: start
        in: query
        required: false
        description: 1-based index of the first record to return; the paging cursor for `pageSize`.
        schema:
          type: integer
          minimum: 1
        example: 2
      responses:
        '200':
          description: Search executed. NOTE — a rejected or malformed clause also returns 200 with an empty `Results` array and the reason in plain English in `SearchTitle`, not an HTTP error status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordSearchResponse'
              examples:
                caseSearch:
                  summary: Two records from case EB-2021-0183
                  externalValue: examples/ontario-energy-board-rds-record-search-response.json
                unknownClause:
                  summary: Unknown search method — HTTP 200 with the error in SearchTitle
                  externalValue: examples/ontario-energy-board-rds-error-unknown-search-method.json
            text/html:
              schema:
                type: string
                description: HTML results page returned when `format` is omitted.
      x-evidence:
        probed: '2026-07-27'
        requests:
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record?q=CaseNumber=EB-2021-0183&sortBy=recRegisteredOn-&pageSize=2&format=json
          status: 200
          content_type: application/json; charset=utf-8
          note: TotalResults 40, HasMoreItems true
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record?q=CaseNumber=EB-2021-0183&format=json&pageSize=1&start=2
          status: 200
          content_type: application/json; charset=utf-8
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record?q=EnergyType=Electricity&format=json&pageSize=1
          status: 200
          note: TotalResults 131171
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record?q=anyWord:rate&format=json&pageSize=1
          status: 200
          note: TotalResults 4276
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record?q=NotAField=zzz&format=json&pageSize=1
          status: 200
          note: Empty Results; SearchTitle "You have specified an unknown search method 'NotAField'."
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record?q=CaseNumber=EB-2021-0183&format=xml&pageSize=1
          status: 403
          content_type: application/xml
          note: XML projection is refused; only the JSON and HTML projections are open.
  /Record/{uri}:
    get:
      tags:
      - Records
      operationId: getRecord
      summary: Retrieve a single record by Content Manager URI
      description: Record detail by URI. Observed to fail for an anonymous caller — the server attempts to resolve `RecordContainer` and returns HTTP 500 carrying a `TrimException` in `ResponseStatus`. The document bytes are nevertheless reachable anonymously through the `/File/document` sub-resource below. Recorded because it was probed, not because it works.
      parameters:
      - $ref: '#/components/parameters/RecordUri'
      - name: format
        in: query
        required: false
        schema:
          type: string
          enum:
          - json
      responses:
        '500':
          description: TrimException — "Error retrieving data for property RecordContainer. Access denied."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordSearchResponse'
              examples:
                accessDenied:
                  externalValue: examples/ontario-energy-board-rds-error-500-access-denied.json
            text/html:
              schema:
                type: string
      x-evidence:
        probed: '2026-07-27'
        requests:
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record/891285?format=json
          status: 500
          content_type: application/json; charset=utf-8
          note: ResponseStatus.ErrorCode TrimException, Meta.TrimErrorCode 22760
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record/891285
          status: 500
          content_type: text/html
  /Record/{uri}/File/document:
    get:
      tags:
      - Records
      operationId: downloadRecordDocument
      summary: Download the document filed under a record
      description: Returns the underlying filed document — overwhelmingly PDF, with MSG, DOC and XLS also present in the record (`RecordExtension` on each search hit tells you which). Anonymous, no key.
      parameters:
      - $ref: '#/components/parameters/RecordUri'
      responses:
        '200':
          description: The document bytes.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '404':
          description: No such record, or the record has no electronic document. Returns the WebDrawer HTML error page, not JSON.
          content:
            text/html:
              schema:
                type: string
      x-evidence:
        probed: '2026-07-27'
        requests:
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record/891285/File/document
          status: 200
          content_type: application/pdf
          bytes: 339517
        - url: https://www.rds.oeb.ca/CMWebDrawer/Record/999999999/File/document
          status: 404
          content_type: text/html
components:
  schemas:
    RecordFields:
      type: object
      description: The OEB's own user-defined regulatory fields. Which fields appear depends on the record; the set below was returned by every observed search hit.
      properties:
        CaseNumber:
          allOf:
          - $ref: '#/components/schemas/TrimStringProperty'
          description: OEB case number, e.g. EB-2021-0183.
        SIDocumentType:
          allOf:
          - $ref: '#/components/schemas/TrimStringProperty'
          description: Document type, e.g. "Decision and Order on Cost Awards", "Correspondence".
        Applicant:
          $ref: '#/components/schemas/LocationRef'
        EnergyType:
          allOf:
          - $ref: '#/components/schemas/TrimStringProperty'
          description: Electricity or Natural Gas.
        PrimaryApplicationType:
          allOf:
          - $ref: '#/components/schemas/TrimStringProperty'
          description: e.g. Initiatives, Rates, Licensing.
        DateIssued:
          $ref: '#/components/schemas/TrimDateTime'
        fDateReceived:
          allOf:
          - $ref: '#/components/schemas/TrimDateTime'
          description: Date received by the OEB.
    RecordSearchResponse:
      type: object
      description: Content Manager ServiceAPIModel search payload, as observed on 2026-07-27.
      properties:
        Results:
          type: array
          items:
            $ref: '#/components/schemas/Record'
        PropertiesAndFields:
          type: object
          description: Empty object in every observed response.
        TotalResults:
          type: integer
          description: Total records matching the clause, irrespective of pageSize.
        CountStringEx:
          type: string
          description: Human-readable count, e.g. "40 records".
        MinimumCount:
          type: integer
        Count:
          type: integer
        HasMoreItems:
          type: boolean
        SearchTitle:
          type: string
          description: Human-readable description of the executed search — and, when the clause is invalid, the plain-English error message. Read this even on HTTP 200.
        HitHighlightString:
          type: string
        TrimType:
          type: string
          example: Record
        ResponseStatus:
          $ref: '#/components/schemas/ResponseStatus'
      required:
      - Results
      - TotalResults
      - TrimType
      - ResponseStatus
    TrimStringProperty:
      type: object
      properties:
        __type:
          type: string
          example: HP.HPTRIM.ServiceModel.TrimStringProperty, TRIMServiceAPIModel
        Value:
          type: string
      required:
      - Value
    ResponseStatus:
      type: object
      description: Empty object on success. On failure it carries the Content Manager exception — this is the error envelope, and it is NOT RFC 9457 problem+json.
      properties:
        ErrorCode:
          type: string
          example: TrimException
        Message:
          type: string
          example: Error retrieving data for property RecordContainer. Access denied.
        Errors:
          type: array
          items:
            type: object
        Meta:
          type: object
          properties:
            TrimErrorCode:
              type: string
              example: '22760'
    TrimDateTime:
      type: object
      description: 'Content Manager date. `IsClear: true` with DateTime 0001-01-01T00:00:00.0000000Z means the date is unset — treat it as null, not as the year 1.'
      properties:
        __type:
          type: string
          example: HP.HPTRIM.ServiceModel.TrimDateTime, TRIMServiceAPIModel
        IsClear:
          type: boolean
        IsTimeClear:
          type: boolean
        DateTime:
          type: string
          format: date-time
        StringValue:
          type: string
          description: Localised rendering, e.g. "2025-03-04 at 5:06 PM".
    LocationRef:
      type: object
      description: Reference to a Content Manager Location (a party — applicant, intervenor, the OEB itself).
      properties:
        __type:
          type: string
          example: HP.HPTRIM.ServiceModel.LocationRef, TRIMServiceAPIModel
        LocationFormattedName:
          $ref: '#/components/schemas/TrimStringProperty'
        TrimType:
          type: string
          example: Location
        Uri:
          type: integer
    Record:
      type: object
      description: One record — a filing, decision, order, licence or piece of correspondence.
      properties:
        Uri:
          type: integer
          description: Opaque record identifier; the key for /Record/{uri}/File/document.
        TrimType:
          type: string
          example: Record
        RecordTitle:
          $ref: '#/components/schemas/TrimStringProperty'
        RecordExtension:
          $ref: '#/components/schemas/TrimStringProperty'
        RecordDateModified:
          $ref: '#/components/schemas/TrimDateTime'
        Fields:
          $ref: '#/components/schemas/RecordFields'
      required:
      - Uri
      - TrimType
  parameters:
    RecordUri:
      name: uri
      in: path
      required: true
      description: Content Manager record URI, an opaque integer returned as `Uri` on every search hit.
      schema:
        type: integer
      example: 891285
externalDocs:
  description: OEB Regulatory Document Search (human entry point)
  url: https://www.oeb.ca/rds