Nomos Usage API

The Usage API from Nomos — 3 operation(s) for usage.

OpenAPI Specification

nomos-usage-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Nomos Authentication Usage API
  version: 2026-05-27.curie
servers:
- url: https://api.nomos.energy
  description: production
tags:
- name: Usage
paths:
  /subscriptions/{id}/usage:
    get:
      tags:
      - Usage
      summary: Retrieve usage data
      description: 'Retrieve the usage data for a subscription. Usage is the electricity consumed from the grid, or fed into the grid for feed-in subscriptions. Values are positive magnitudes for both directions; the direction comes from the plan. Results depend on the meter type.


        **Smart meters**:

        Usage data becomes available from 4pm on the following day. Metering Service Providers (MSB) might share preliminary values until replaced by final values up to the 8th working day of the following month. Data is available as soon as provided by the responsible MSB. Delays or missing data may occur.


        **Analog meters**:

        Data is based on meter readings by customers and MSBs and available on a monthly level. In the absence of metering readings, Nomos creates a preliminary estimation at the end of each month. Subsequent meter readings take precedence over existing estimates and trigger invoice corrections if applicable.'
      security:
      - Bearer: []
      parameters:
      - schema:
          type: string
          example: sub_ig1f5x45789r3ax7dlfff4q4
        required: true
        name: id
        in: path
      - schema:
          type: string
          enum:
          - auto
          - 15min
          - hour
          - day
          - week
          - month
          default: auto
          example: auto
          description: The resolution of the consumption. 'auto' will choose a good resolution based on the start and end date.
        required: false
        description: The resolution of the consumption. 'auto' will choose a good resolution based on the start and end date.
        name: resolution
        in: query
      - schema:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          example: '2025-03-30'
          description: "The start date of the interval (inclusive). Defaults depend on the meter type.  \n        **Smart meters**: yesterday start of day (00:00:00) in the customers's timezone.\n        **Analog meters**: subscription start date or 12 months ago, whichever is later."
        required: false
        description: "The start date of the interval (inclusive). Defaults depend on the meter type.  \n        **Smart meters**: yesterday start of day (00:00:00) in the customers's timezone.\n        **Analog meters**: subscription start date or 12 months ago, whichever is later."
        name: start
        in: query
      - schema:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          example: '2025-03-31'
          description: "The end date of the interval (exclusive). Defaults depend on the meter type. \n        **Smart meters**: today start of day (00:00:00) in the customers's timezone.\n        **Analog meters**: latest available reading date."
        required: false
        description: "The end date of the interval (exclusive). Defaults depend on the meter type. \n        **Smart meters**: today start of day (00:00:00) in the customers's timezone.\n        **Analog meters**: latest available reading date."
        name: end
        in: query
      responses:
        '200':
          description: Retrieve the subscription usage
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    enum:
                    - usage
                  meter_type:
                    type: string
                    enum:
                    - analog
                    - smart
                    example: smart
                    description: The meter type. Smart meters record consumption data in 15min intervals, analog meter readings only get reported periodically by the metering operator or the customer.
                  resolution:
                    type: string
                    enum:
                    - 15min
                    - hour
                    - day
                    - week
                    - month
                    example: 15min
                    description: The resolution of the consumption. An optimal resolution will be chosen based on the start and end date if no `resolution` is provided in the query params.
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        start:
                          type: string
                          format: date-time
                          description: The start date of the consumption interval
                        usage:
                          type: number
                          description: Consumption in kWh in the interval
                        type:
                          type: string
                          enum:
                          - final
                          - preliminary
                          description: Preliminary values are still subject to change
                      required:
                      - start
                      - usage
                      - type
                    example:
                    - start: '2025-03-31T22:00:00.000Z'
                      usage: 0.2
                      type: final
                    - start: '2025-03-31T22:15:00.000Z'
                      usage: 0.15
                      type: final
                    - start: '2025-03-31T22:30:00.000Z'
                      usage: 0.18
                      type: final
                    - start: '2025-03-31T22:45:00.000Z'
                      usage: 0.12
                      type: final
                    - start: '2025-03-31T23:00:00.000Z'
                      usage: 0.1
                      type: final
                    - start: '2025-03-31T23:15:00.000Z'
                      usage: 0.08
                      type: final
                    - start: '2025-03-31T23:30:00.000Z'
                      usage: 0.09
                      type: final
                    - start: '2025-03-31T23:45:00.000Z'
                      usage: 0.11
                      type: final
                    - start: '2025-04-01T00:00:00.000Z'
                      usage: 0.13
                      type: final
                    - start: '2025-04-01T00:15:00.000Z'
                      usage: 0.14
                      type: final
                    - start: '2025-04-01T00:30:00.000Z'
                      usage: 0.16
                      type: final
                    - start: '2025-04-01T00:45:00.000Z'
                      usage: 0.17
                      type: final
                    - start: '2025-04-01T01:00:00.000Z'
                      usage: 0.19
                      type: final
                    - start: '2025-04-01T01:15:00.000Z'
                      usage: 0.21
                      type: final
                    - start: '2025-04-01T01:30:00.000Z'
                      usage: 0.23
                      type: final
                    - start: '2025-04-01T01:45:00.000Z'
                      usage: 0.25
                      type: final
                    - start: '2025-04-01T02:00:00.000Z'
                      usage: 0.28
                      type: final
                    - start: '2025-04-01T02:15:00.000Z'
                      usage: 0.31
                      type: final
                    - start: '2025-04-01T02:30:00.000Z'
                      usage: 0.34
                      type: final
                    - start: '2025-04-01T02:45:00.000Z'
                      usage: 0.37
                      type: final
                    - start: '2025-04-01T03:00:00.000Z'
                      usage: 0.41
                      type: final
                    - start: '2025-04-01T03:15:00.000Z'
                      usage: 0.45
                      type: final
                    - start: '2025-04-01T03:30:00.000Z'
                      usage: 0.49
                      type: final
                    - start: '2025-04-01T03:45:00.000Z'
                      usage: 0.53
                      type: final
                    - start: '2025-04-01T04:00:00.000Z'
                      usage: 0.58
                      type: final
                    - start: '2025-04-01T04:15:00.000Z'
                      usage: 0.63
                      type: final
                    - start: '2025-04-01T04:30:00.000Z'
                      usage: 0.68
                      type: final
                    - start: '2025-04-01T04:45:00.000Z'
                      usage: 0.73
                      type: final
                    - start: '2025-04-01T05:00:00.000Z'
                      usage: 0.79
                      type: final
                    - start: '2025-04-01T05:15:00.000Z'
                      usage: 0.85
                      type: final
                    - start: '2025-04-01T05:30:00.000Z'
                      usage: 0.91
                      type: final
                    - start: '2025-04-01T05:45:00.000Z'
                      usage: 0.97
                      type: final
                    - start: '2025-04-01T06:00:00.000Z'
                      usage: 1.04
                      type: final
                    - start: '2025-04-01T06:15:00.000Z'
                      usage: 1.11
                      type: final
                    - start: '2025-04-01T06:30:00.000Z'
                      usage: 1.18
                      type: final
                    - start: '2025-04-01T06:45:00.000Z'
                      usage: 1.25
                      type: final
                    - start: '2025-04-01T07:00:00.000Z'
                      usage: 1.32
                      type: final
                    - start: '2025-04-01T07:15:00.000Z'
                      usage: 1.39
                      type: final
                    - start: '2025-04-01T07:30:00.000Z'
                      usage: 1.46
                      type: final
                    - start: '2025-04-01T07:45:00.000Z'
                      usage: 1.53
                      type: final
                    - start: '2025-04-01T08:00:00.000Z'
                      usage: 1.6
                      type: final
                    - start: '2025-04-01T08:15:00.000Z'
                      usage: 1.67
                      type: final
                    - start: '2025-04-01T08:30:00.000Z'
                      usage: 1.74
                      type: final
                    - start: '2025-04-01T08:45:00.000Z'
                      usage: 1.81
                      type: final
                    - start: '2025-04-01T09:00:00.000Z'
                      usage: 1.88
                      type: final
                    - start: '2025-04-01T09:15:00.000Z'
                      usage: 1.95
                      type: final
                    - start: '2025-04-01T09:30:00.000Z'
                      usage: 2.02
                      type: final
                    - start: '2025-04-01T09:45:00.000Z'
                      usage: 2.09
                      type: final
                    - start: '2025-04-01T10:00:00.000Z'
                      usage: 2.16
                      type: final
                    - start: '2025-04-01T10:15:00.000Z'
                      usage: 2.23
                      type: final
                    - start: '2025-04-01T10:30:00.000Z'
                      usage: 2.3
                      type: final
                    - start: '2025-04-01T10:45:00.000Z'
                      usage: 2.37
                      type: final
                    - start: '2025-04-01T11:00:00.000Z'
                      usage: 2.44
                      type: final
                    - start: '2025-04-01T11:15:00.000Z'
                      usage: 2.51
                      type: final
                    - start: '2025-04-01T11:30:00.000Z'
                      usage: 2.58
                      type: final
                    - start: '2025-04-01T11:45:00.000Z'
                      usage: 2.65
                      type: final
                    - start: '2025-04-01T12:00:00.000Z'
                      usage: 2.72
                      type: final
                    - start: '2025-04-01T12:15:00.000Z'
                      usage: 2.79
                      type: final
                    - start: '2025-04-01T12:30:00.000Z'
                      usage: 2.86
                      type: final
                    - start: '2025-04-01T12:45:00.000Z'
                      usage: 2.93
                      type: final
                    - start: '2025-04-01T13:00:00.000Z'
                      usage: 3
                      type: final
                    - start: '2025-04-01T13:15:00.000Z'
                      usage: 3.07
                      type: final
                    - start: '2025-04-01T13:30:00.000Z'
                      usage: 3.14
                      type: final
                    - start: '2025-04-01T13:45:00.000Z'
                      usage: 3.21
                      type: final
                    - start: '2025-04-01T14:00:00.000Z'
                      usage: 3.28
                      type: final
                    - start: '2025-04-01T14:15:00.000Z'
                      usage: 3.35
                      type: final
                    - start: '2025-04-01T14:30:00.000Z'
                      usage: 3.42
                      type: final
                    - start: '2025-04-01T14:45:00.000Z'
                      usage: 3.49
                      type: final
                    - start: '2025-04-01T15:00:00.000Z'
                      usage: 3.56
                      type: final
                    - start: '2025-04-01T15:15:00.000Z'
                      usage: 3.63
                      type: final
                    - start: '2025-04-01T15:30:00.000Z'
                      usage: 3.7
                      type: final
                    - start: '2025-04-01T15:45:00.000Z'
                      usage: 3.77
                      type: final
                    - start: '2025-04-01T16:00:00.000Z'
                      usage: 3.84
                      type: final
                    - start: '2025-04-01T16:15:00.000Z'
                      usage: 3.91
                      type: final
                    - start: '2025-04-01T16:30:00.000Z'
                      usage: 3.98
                      type: final
                    - start: '2025-04-01T16:45:00.000Z'
                      usage: 4.05
                      type: final
                    - start: '2025-04-01T17:00:00.000Z'
                      usage: 4.12
                      type: final
                    - start: '2025-04-01T17:15:00.000Z'
                      usage: 4.19
                      type: final
                    - start: '2025-04-01T17:30:00.000Z'
                      usage: 4.26
                      type: final
                    - start: '2025-04-01T17:45:00.000Z'
                      usage: 4.33
                      type: final
                    - start: '2025-04-01T18:00:00.000Z'
                      usage: 4.4
                      type: final
                    - start: '2025-04-01T18:15:00.000Z'
                      usage: 4.47
                      type: final
                    - start: '2025-04-01T18:30:00.000Z'
                      usage: 4.54
                      type: final
                    - start: '2025-04-01T18:45:00.000Z'
                      usage: 4.61
                      type: final
                    - start: '2025-04-01T19:00:00.000Z'
                      usage: 4.68
                      type: final
                    - start: '2025-04-01T19:15:00.000Z'
                      usage: 4.75
                      type: final
                    - start: '2025-04-01T19:30:00.000Z'
                      usage: 4.82
                      type: final
                    - start: '2025-04-01T19:45:00.000Z'
                      usage: 4.89
                      type: final
                    - start: '2025-04-01T20:00:00.000Z'
                      usage: 4.96
                      type: final
                    - start: '2025-04-01T20:15:00.000Z'
                      usage: 5.03
                      type: final
                    - start: '2025-04-01T20:30:00.000Z'
                      usage: 5.1
                      type: final
                    - start: '2025-04-01T20:45:00.000Z'
                      usage: 5.17
                      type: final
                    - start: '2025-04-01T21:00:00.000Z'
                      usage: 5.24
                      type: final
                    - start: '2025-04-01T21:15:00.000Z'
                      usage: 5.31
                      type: final
                    - start: '2025-04-01T21:30:00.000Z'
                      usage: 5.38
                      type: final
                    - start: '2025-04-01T21:45:00.000Z'
                      usage: 5.45
                      type: final
                    description: The consumption of the meter
                required:
                - object
                - meter_type
                - resolution
                - data
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrBadRequest'
        '401':
          description: The client must authenticate itself to get the requested response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnauthorized'
        '402':
          description: A higher pricing plan is required to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrPaymentRequired'
        '403':
          description: The client does not have the necessary permissions to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrForbidden'
        '404':
          description: The server can't find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrNotFound'
        '405':
          description: The request method is not allowed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrMethodNotAllowed'
        '409':
          description: The request could not be completed due to a conflict mainly due to unique constraints.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrConflict'
        '422':
          description: The request was well-formed but was unable to be followed due to semantic errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnprocessableEntity'
        '429':
          description: The client has sent too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrTooManyRequests'
        '500':
          description: The server has encountered a situation it doesn't know how to handle.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrInternalServerError'
  /meter-readings:
    get:
      tags:
      - Usage
      summary: List meter readings
      description: Retrieve all meter readings for the organization with cursor pagination. Customer users will only see their own. Use filter[subscription][eq]=<id> to scope to a single subscription.
      security:
      - Bearer: []
      parameters:
      - schema:
          type: string
          nullable: true
        required: false
        name: cursor
        in: query
      - schema:
          type: number
          minimum: 1
          maximum: 100
          default: 10
        required: false
        name: limit
        in: query
      - schema:
          nullable: true
          description: '**Filterable fields:**

            - `type` (string)

            - `subscription` (string)

            - `created_at` (date)


            See [Filtering Documentation](https://docs.nomos.energy/guides/filtering) for supported operators and syntax.'
          example: value
        required: false
        description: '**Filterable fields:**

          - `type` (string)

          - `subscription` (string)

          - `created_at` (date)


          See [Filtering Documentation](https://docs.nomos.energy/guides/filtering) for supported operators and syntax.'
        name: filter[field][operator]
        in: query
      responses:
        '200':
          description: Retrieve all meter readings for the organization with cursor pagination. Customer users will only see their own. Use filter[subscription][eq]=<id> to scope to a single subscription.
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    enum:
                    - list
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/MeterReading'
                  next_page:
                    type: string
                    nullable: true
                    example: eyJsYXN0X2NyZWF0ZWRfYXQiOiIyMDI1LTAxLTE1VDEwOjMwOjAwLjAwMFoiLCJsYXN0X2lkIjoic3ViX21pNGYwb2RhNng5bTdnY3N2amswb2xlMSIsImxpbWl0IjoyMH0=
                  has_more:
                    type: boolean
                    default: false
                required:
                - object
                - items
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrBadRequest'
        '401':
          description: The client must authenticate itself to get the requested response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnauthorized'
        '402':
          description: A higher pricing plan is required to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrPaymentRequired'
        '403':
          description: The client does not have the necessary permissions to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrForbidden'
        '404':
          description: The server can't find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrNotFound'
        '405':
          description: The request method is not allowed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrMethodNotAllowed'
        '409':
          description: The request could not be completed due to a conflict mainly due to unique constraints.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrConflict'
        '422':
          description: The request was well-formed but was unable to be followed due to semantic errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnprocessableEntity'
        '429':
          description: The client has sent too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrTooManyRequests'
        '500':
          description: The server has encountered a situation it doesn't know how to handle.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrInternalServerError'
    post:
      tags:
      - Usage
      summary: Create a meter reading
      description: Submit a customer-reported analog meter reading for the active meter of a subscription.
      security:
      - Bearer: []
      requestBody:
        description: Meter reading input
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/InsertMeterReading'
              - type: object
                properties:
                  subscription:
                    type: string
                    description: The subscription the meter reading belongs to
                    example: sub_rocbrf1u5e48mm0reeqoag90
                required:
                - subscription
      responses:
        '200':
          description: Meter reading accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeterReading'
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrBadRequest'
        '401':
          description: The client must authenticate itself to get the requested response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnauthorized'
        '402':
          description: A higher pricing plan is required to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrPaymentRequired'
        '403':
          description: The client does not have the necessary permissions to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrForbidden'
        '404':
          description: The server can't find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrNotFound'
        '405':
          description: The request method is not allowed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrMethodNotAllowed'
        '409':
          description: The request could not be completed due to a conflict mainly due to unique constraints.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrConflict'
        '422':
          description: The request was well-formed but was unable to be followed due to semantic errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnprocessableEntity'
        '429':
          description: The client has sent too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrTooManyRequests'
        '500':
          description: The server has encountered a situation it doesn't know how to handle.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrInternalServerError'
  /load-forecasts:
    post:
      tags:
      - Usage
      summary: Create a load forecast
      description: This endpoint is used to transmit a load forecast for a subscription. Values must be submitted by 9:00 a.m. local time on the previous day to be considered in the day-ahead auction, and at least 15 minutes before delivery to be included in continuous intraday trading. Data points must be strictly consecutive and can only be provided for full days at a time (local time of the subscription).
      security:
      - Bearer: []
      requestBody:
        description: Load forecast input
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                scope:
                  type: string
                  enum:
                  - subscription
                  description: Reference point for the load forecast
                  example: subscription
                subscription:
                  type: string
                  description: Required subscription ID when scope is 'subscription'
                  example: sub_123456789
                resolution:
                  type: string
                  enum:
                  - 15min
                  description: Time resolution of the load forecast data points
                  example: 15min
                unit:
                  type: string
                  enum:
                  - KW
                  description: Unit of measurement for the forecast values
                  example: KW
                data:
                  type: array
                  items:
                    type: object
                    properties:
                      start:
                        type: string
                        format: date-time
                        description: Timestamp of the data point
                        example: '2025-03-31T22:00:00.000Z'
                      value:
                        type: number
                        minimum: 0
                        description: Power value at this timestamp. Must not be negative.
                        example: 0.2
                    required:
                    - start
                    - value
                  description: Array of load forecast data points. Must be strictly consecutive with exactly 15-minute intervals and without overlaps or gaps and can only contain one data point per 15-minute interval.
                  example:
                  - start: '2025-03-31T22:00:00.000Z'
                    value: 0.2
                  - start: '2025-03-31T22:15:00.000Z'
                    value: 0.22
              required:
              - scope
              - subscription
              - resolution
              - unit
              - data
      responses:
        '200':
          description: Positive response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoadForecasts'
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrBadRequest'
        '401':
          description: The client must authenticate itself to get the requested response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnauthorized'
        '402':
          description: A higher pricing plan is required to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrPaymentRequired'
        '403':
          description: The client does not have the necessary permissions to access the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrForbidden'
        '404':
          description: The server can't find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrNotFound'
        '405':
          description: The request method is not allowed.
          content:
            application/json:
              schema:
      

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/nomos/refs/heads/main/openapi/nomos-usage-api-openapi.yml