Octopus Energy Public API

The Octopus Energy Public API is a free, JSON-over-HTTPS REST API exposing the company's full UK product catalog, electricity and gas tariff pricing, electricity and gas meter-point information, half-hourly smart-meter consumption data, and industry grid supply points. Customers authenticate with their own API key over HTTP Basic auth to access their meters and consumption; the products and tariffs surfaces are open and unauthenticated. The Agile Octopus and Octopus Tracker tariffs publish half-hourly and daily wholesale-linked unit rates that downstream automations consume to schedule EV charging, heat-pump heating, and battery dispatch.

Octopus Energy Public API is one of 3 APIs that Octopus Energy publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 7 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 2 JSON Schema definitions.

Tagged areas include Energy, Electricity, Gas, Tariffs, and Meter Points. The published artifact set on APIs.io includes API documentation, a getting-started guide, an OpenAPI specification, a JSON-LD context, 7 Naftiko capability specs, and 2 JSON Schemas.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

octopus-energy-public-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Octopus Energy Public API
  version: '1.0'
  description: |
    The Octopus Energy Public API is a free JSON-over-HTTPS REST API exposing the
    UK product catalog, electricity and gas tariffs, electricity and gas meter
    points, half-hourly smart-meter consumption, and industry grid supply points.

    Authentication uses HTTP Basic auth with a per-customer API key as the
    username and an empty password. Products and tariffs endpoints are open and
    do not require authentication; meter-point and consumption endpoints require
    a key for the account that owns the meter.
  contact:
    name: Octopus Energy Developer Support
    url: https://developer.octopus.energy/docs/api/
  license:
    name: Octopus Energy API Terms
    url: https://octopus.energy/policies/
servers:
- url: https://api.octopus.energy/v1
  description: Public production API
security:
- basicAuth: []
- {}
tags:
- name: Products
  description: Octopus Energy product catalog and tariff lookups.
- name: ElectricityTariffs
  description: Electricity tariff unit rates and standing charges.
- name: GasTariffs
  description: Gas tariff unit rates and standing charges.
- name: ElectricityMeterPoints
  description: Electricity meter points (MPAN) and registered meters.
- name: GasMeterPoints
  description: Gas meter points (MPRN) and registered meters.
- name: Consumption
  description: Half-hourly smart-meter consumption readings.
- name: Industry
  description: UK industry references such as grid supply points.
paths:
  /products/:
    get:
      tags: [Products]
      summary: List Products
      description: List Octopus Energy products. Filter by availability, business type, variant, and brand.
      operationId: listProducts
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      - name: is_variable
        in: query
        schema: {type: boolean}
      - name: is_green
        in: query
        schema: {type: boolean}
      - name: is_tracker
        in: query
        schema: {type: boolean}
      - name: is_prepay
        in: query
        schema: {type: boolean}
      - name: is_business
        in: query
        schema: {type: boolean}
      - name: available_at
        in: query
        description: ISO 8601 timestamp filtering products available at that moment.
        schema: {type: string, format: date-time}
      - name: brand
        in: query
        schema: {type: string}
      responses:
        '200':
          description: A paginated list of products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedProductList'
  /products/{product_code}/:
    get:
      tags: [Products]
      summary: Retrieve a Product
      description: Retrieve a single product including its electricity and gas tariffs by region.
      operationId: getProduct
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - name: tariffs_active_at
        in: query
        schema: {type: string, format: date-time}
      responses:
        '200':
          description: The requested product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductDetail'
  /products/{product_code}/electricity-tariffs/{tariff_code}/standard-unit-rates/:
    get:
      tags: [ElectricityTariffs]
      summary: List Electricity Standard Unit Rates
      description: Half-hourly or daily standard unit rates for an electricity tariff such as Agile Octopus or Octopus Tracker.
      operationId: listElectricityStandardUnitRates
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - $ref: '#/components/parameters/TariffCode'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: A paginated list of standard unit rates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedUnitRateList'
  /products/{product_code}/electricity-tariffs/{tariff_code}/standing-charges/:
    get:
      tags: [ElectricityTariffs]
      summary: List Electricity Standing Charges
      operationId: listElectricityStandingCharges
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - $ref: '#/components/parameters/TariffCode'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: A paginated list of standing charges.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedStandingChargeList'
  /products/{product_code}/electricity-tariffs/{tariff_code}/day-unit-rates/:
    get:
      tags: [ElectricityTariffs]
      summary: List Electricity Day Unit Rates
      operationId: listElectricityDayUnitRates
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - $ref: '#/components/parameters/TariffCode'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      responses:
        '200':
          description: A paginated list of day unit rates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedUnitRateList'
  /products/{product_code}/electricity-tariffs/{tariff_code}/night-unit-rates/:
    get:
      tags: [ElectricityTariffs]
      summary: List Electricity Night Unit Rates
      operationId: listElectricityNightUnitRates
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - $ref: '#/components/parameters/TariffCode'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      responses:
        '200':
          description: A paginated list of night unit rates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedUnitRateList'
  /products/{product_code}/gas-tariffs/{tariff_code}/standard-unit-rates/:
    get:
      tags: [GasTariffs]
      summary: List Gas Standard Unit Rates
      operationId: listGasStandardUnitRates
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - $ref: '#/components/parameters/TariffCode'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      responses:
        '200':
          description: A paginated list of gas standard unit rates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedUnitRateList'
  /products/{product_code}/gas-tariffs/{tariff_code}/standing-charges/:
    get:
      tags: [GasTariffs]
      summary: List Gas Standing Charges
      operationId: listGasStandingCharges
      parameters:
      - $ref: '#/components/parameters/ProductCode'
      - $ref: '#/components/parameters/TariffCode'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      responses:
        '200':
          description: A paginated list of gas standing charges.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedStandingChargeList'
  /electricity-meter-points/{mpan}/:
    get:
      tags: [ElectricityMeterPoints]
      summary: Retrieve an Electricity Meter Point
      description: Retrieve information about an electricity meter point including the GSP region and registered meters.
      operationId: getElectricityMeterPoint
      security:
      - basicAuth: []
      parameters:
      - $ref: '#/components/parameters/MPAN'
      responses:
        '200':
          description: An electricity meter point.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ElectricityMeterPoint'
  /electricity-meter-points/{mpan}/meters/{serial_number}/consumption/:
    get:
      tags: [Consumption]
      summary: List Electricity Consumption
      description: List half-hourly smart-meter electricity consumption readings for the given meter.
      operationId: listElectricityConsumption
      security:
      - basicAuth: []
      parameters:
      - $ref: '#/components/parameters/MPAN'
      - $ref: '#/components/parameters/SerialNumber'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      - name: order_by
        in: query
        schema: {type: string, enum: [period, -period]}
      - name: group_by
        in: query
        schema: {type: string, enum: [hour, day, week, month, quarter]}
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: A paginated list of consumption readings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedConsumptionList'
  /gas-meter-points/{mprn}/:
    get:
      tags: [GasMeterPoints]
      summary: Retrieve a Gas Meter Point
      operationId: getGasMeterPoint
      security:
      - basicAuth: []
      parameters:
      - $ref: '#/components/parameters/MPRN'
      responses:
        '200':
          description: A gas meter point.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GasMeterPoint'
  /gas-meter-points/{mprn}/meters/{serial_number}/consumption/:
    get:
      tags: [Consumption]
      summary: List Gas Consumption
      operationId: listGasConsumption
      security:
      - basicAuth: []
      parameters:
      - $ref: '#/components/parameters/MPRN'
      - $ref: '#/components/parameters/SerialNumber'
      - $ref: '#/components/parameters/PeriodFrom'
      - $ref: '#/components/parameters/PeriodTo'
      - name: group_by
        in: query
        schema: {type: string, enum: [hour, day, week, month, quarter]}
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: A paginated list of gas consumption readings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedConsumptionList'
  /industry/grid-supply-points/:
    get:
      tags: [Industry]
      summary: List Grid Supply Points
      description: List UK grid supply points and resolve the GSP for a postcode.
      operationId: listGridSupplyPoints
      parameters:
      - name: postcode
        in: query
        schema: {type: string}
      responses:
        '200':
          description: A list of grid supply points.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedGridSupplyPointList'
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication with the customer API key as the username and an empty password.
  parameters:
    Page:
      name: page
      in: query
      schema: {type: integer, minimum: 1}
    PageSize:
      name: page_size
      in: query
      schema: {type: integer, minimum: 1, maximum: 1500}
    ProductCode:
      name: product_code
      in: path
      required: true
      schema: {type: string}
      description: Product code, for example AGILE-24-10-01 or VAR-22-11-01.
    TariffCode:
      name: tariff_code
      in: path
      required: true
      schema: {type: string}
      description: Tariff code, for example E-1R-AGILE-24-10-01-A.
    PeriodFrom:
      name: period_from
      in: query
      schema: {type: string, format: date-time}
      description: ISO 8601 inclusive start of the period.
    PeriodTo:
      name: period_to
      in: query
      schema: {type: string, format: date-time}
      description: ISO 8601 exclusive end of the period.
    MPAN:
      name: mpan
      in: path
      required: true
      schema: {type: string}
      description: Meter Point Administration Number for electricity (13 digits).
    MPRN:
      name: mprn
      in: path
      required: true
      schema: {type: string}
      description: Meter Point Reference Number for gas.
    SerialNumber:
      name: serial_number
      in: path
      required: true
      schema: {type: string}
  schemas:
    Paginated:
      type: object
      properties:
        count: {type: integer}
        next: {type: string, nullable: true}
        previous: {type: string, nullable: true}
    Product:
      type: object
      properties:
        code: {type: string}
        direction: {type: string, enum: [IMPORT, EXPORT]}
        full_name: {type: string}
        display_name: {type: string}
        description: {type: string}
        is_variable: {type: boolean}
        is_green: {type: boolean}
        is_tracker: {type: boolean}
        is_prepay: {type: boolean}
        is_business: {type: boolean}
        is_restricted: {type: boolean}
        term: {type: integer, nullable: true}
        available_from: {type: string, format: date-time}
        available_to: {type: string, format: date-time, nullable: true}
        brand: {type: string}
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
    ProductDetail:
      allOf:
      - $ref: '#/components/schemas/Product'
      - type: object
        properties:
          tariffs_active_at: {type: string, format: date-time}
          single_register_electricity_tariffs:
            type: object
            additionalProperties:
              $ref: '#/components/schemas/TariffByPayment'
          dual_register_electricity_tariffs:
            type: object
            additionalProperties:
              $ref: '#/components/schemas/TariffByPayment'
          single_register_gas_tariffs:
            type: object
            additionalProperties:
              $ref: '#/components/schemas/TariffByPayment'
          sample_quotes:
            type: object
          sample_consumption:
            type: object
    TariffByPayment:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/Tariff'
    Tariff:
      type: object
      properties:
        code: {type: string}
        standing_charge_exc_vat: {type: number}
        standing_charge_inc_vat: {type: number}
        online_discount_exc_vat: {type: number}
        online_discount_inc_vat: {type: number}
        dual_fuel_discount_exc_vat: {type: number}
        dual_fuel_discount_inc_vat: {type: number}
        exit_fees_exc_vat: {type: number}
        exit_fees_inc_vat: {type: number}
        standard_unit_rate_exc_vat: {type: number}
        standard_unit_rate_inc_vat: {type: number}
        day_unit_rate_exc_vat: {type: number}
        day_unit_rate_inc_vat: {type: number}
        night_unit_rate_exc_vat: {type: number}
        night_unit_rate_inc_vat: {type: number}
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
    Link:
      type: object
      properties:
        href: {type: string}
        method: {type: string}
        rel: {type: string}
    UnitRate:
      type: object
      properties:
        value_exc_vat: {type: number}
        value_inc_vat: {type: number}
        valid_from: {type: string, format: date-time}
        valid_to: {type: string, format: date-time, nullable: true}
        payment_method: {type: string, nullable: true}
    StandingCharge:
      type: object
      properties:
        value_exc_vat: {type: number}
        value_inc_vat: {type: number}
        valid_from: {type: string, format: date-time}
        valid_to: {type: string, format: date-time, nullable: true}
        payment_method: {type: string, nullable: true}
    ElectricityMeterPoint:
      type: object
      properties:
        gsp: {type: string, description: Grid Supply Point group, e.g. _A through _P.}
        mpan: {type: string}
        profile_class: {type: integer}
        meters:
          type: array
          items:
            $ref: '#/components/schemas/Meter'
    GasMeterPoint:
      type: object
      properties:
        mprn: {type: string}
        consumption_standard: {type: number}
        meters:
          type: array
          items:
            $ref: '#/components/schemas/Meter'
    Meter:
      type: object
      properties:
        serial_number: {type: string}
        registers:
          type: array
          items:
            type: object
            properties:
              identifier: {type: string}
              rate: {type: string}
              is_settlement_register: {type: boolean}
    ConsumptionReading:
      type: object
      properties:
        consumption: {type: number, description: kWh consumed in the interval.}
        interval_start: {type: string, format: date-time}
        interval_end: {type: string, format: date-time}
    GridSupplyPoint:
      type: object
      properties:
        group_id: {type: string}
    PaginatedProductList:
      allOf:
      - $ref: '#/components/schemas/Paginated'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/Product'
    PaginatedUnitRateList:
      allOf:
      - $ref: '#/components/schemas/Paginated'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/UnitRate'
    PaginatedStandingChargeList:
      allOf:
      - $ref: '#/components/schemas/Paginated'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/StandingCharge'
    PaginatedConsumptionList:
      allOf:
      - $ref: '#/components/schemas/Paginated'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/ConsumptionReading'
    PaginatedGridSupplyPointList:
      allOf:
      - $ref: '#/components/schemas/Paginated'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/GridSupplyPoint'