> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nomos.energy/llms.txt
> Use this file to discover all available pages before exploring further.

# Send an asset schedule

> Plan consecutive quarter hours of a steerable asset. A partner token sends `author: partner`, a Nomos token publishes `author: nomos`. The schedule replaces the sender's plan for every quarter hour from its first slot to its last, and is stored as a whole or not at all: any invalid slot rejects it, with every problem listed in `errors` by its path. While Nomos optimises the household, Nomos's plan wins wherever it has a slot, so a partner schedule is stored but only in force where Nomos planned nothing.



## OpenAPI

````yaml /openapi/openapi.gauss.json post /assets/{id}/schedule
openapi: 3.0.0
info:
  title: Nomos API
  version: 2026-09-08.gauss
servers:
  - url: https://api.nomos.energy
    description: production
security: []
tags:
  - name: Plans
  - name: Leads
  - name: Subscriptions
  - name: Customers
  - name: Households
  - name: Assets
  - name: Usage
  - name: Prices
  - name: Invoices
  - name: Smart Meter Orders
  - name: Grid Fee Reductions
  - name: Market Partners
  - name: Events
  - name: Authentication
paths:
  /assets/{id}/schedule:
    post:
      tags:
        - Assets
      summary: Send an asset schedule
      description: >-
        Plan consecutive quarter hours of a steerable asset. A partner token
        sends `author: partner`, a Nomos token publishes `author: nomos`. The
        schedule replaces the sender's plan for every quarter hour from its
        first slot to its last, and is stored as a whole or not at all: any
        invalid slot rejects it, with every problem listed in `errors` by its
        path. While Nomos optimises the household, Nomos's plan wins wherever it
        has a slot, so a partner schedule is stored but only in force where
        Nomos planned nothing.
      parameters:
        - schema:
            type: string
            example: ha_b7q2m1k8v4n0x3c9l5p2r7td
          required: true
          name: id
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAssetSchedule'
      responses:
        '200':
          description: The stored slots
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetSchedule'
        '400':
          description: >-
            The request is invalid: a field fails validation, breaks a business
            rule, or the body is not valid JSON. `errors` lists every problem
            with its field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrBadRequest'
              examples:
                Unknown field in a slot:
                  summary: Unknown field in a slot
                  value:
                    code: BAD_REQUEST
                    message: 'Unrecognized key: "power"'
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: unrecognized_keys
                        field: items.0
                        message: 'Unrecognized key: "power"'
                Unknown mode:
                  summary: Unknown mode
                  value:
                    code: BAD_REQUEST
                    message: >-
                      Invalid option: expected one of
                      "setpoint"|"self_consumption"|"local"
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: invalid_value
                        field: items.0.mode
                        message: >-
                          Invalid option: expected one of
                          "setpoint"|"self_consumption"|"local"
                Slot off the quarter-hour grid:
                  summary: Slot off the quarter-hour grid
                  value:
                    code: BAD_REQUEST
                    message: >-
                      timestamp 2026-10-07T10:05:00.000Z does not start on a
                      quarter hour
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: invalid_value
                        field: items.0.timestamp
                        message: >-
                          timestamp 2026-10-07T10:05:00.000Z does not start on a
                          quarter hour
                Slot already started:
                  summary: Slot already started
                  value:
                    code: BAD_REQUEST
                    message: timestamp 2026-10-06T10:00:00.000Z has already started
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: too_small
                        field: items.0.timestamp
                        message: timestamp 2026-10-06T10:00:00.000Z has already started
                Slot beyond the day after tomorrow:
                  summary: Slot beyond the day after tomorrow
                  value:
                    code: BAD_REQUEST
                    message: >-
                      timestamp 2026-10-09T10:00:00.000Z is not before
                      2026-10-08T22:00:00.000Z, the end of the day after
                      tomorrow in Berlin
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: too_big
                        field: items.0.timestamp
                        message: >-
                          timestamp 2026-10-09T10:00:00.000Z is not before
                          2026-10-08T22:00:00.000Z, the end of the day after
                          tomorrow in Berlin
                Two slots for one quarter hour:
                  summary: Two slots for one quarter hour
                  value:
                    code: BAD_REQUEST
                    message: >-
                      Another slot of this request starts at
                      2026-10-07T10:00:00.000Z.
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: duplicate_timestamp
                        field: items.1.timestamp
                        message: >-
                          Another slot of this request starts at
                          2026-10-07T10:00:00.000Z.
                A quarter hour left out:
                  summary: A quarter hour left out
                  value:
                    code: BAD_REQUEST
                    message: >-
                      No slot for 2026-10-07T10:15:00.000Z. A schedule covers
                      every quarter hour from its first slot to its last, with
                      local where nothing is planned.
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: slot_missing
                        field: items.1.timestamp
                        message: >-
                          No slot for 2026-10-07T10:15:00.000Z. A schedule
                          covers every quarter hour from its first slot to its
                          last, with local where nothing is planned.
                Mode the asset type doesn't take:
                  summary: Mode the asset type doesn't take
                  value:
                    code: BAD_REQUEST
                    message: an inverter takes no setpoint slot
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: mode_not_allowed
                        field: items.0.mode
                        message: an inverter takes no setpoint slot
                Field the mode doesn't take:
                  summary: Field the mode doesn't take
                  value:
                    code: BAD_REQUEST
                    message: a setpoint slot of a battery takes no max_in_kw
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: field_not_allowed
                        field: items.0.max_in_kw
                        message: a setpoint slot of a battery takes no max_in_kw
                Several problems in one slot:
                  summary: Several problems in one slot
                  value:
                    code: BAD_REQUEST
                    message: 2 problems with this schedule, nothing was stored.
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: invalid_type
                        field: items.0.power_kw
                        message: a setpoint slot needs power_kw
                      - code: invalid_value
                        field: items.0.min_soc
                        message: min_soc 0.8 is above max_soc 0.2
                Wallbox giving power back:
                  summary: Wallbox giving power back
                  value:
                    code: BAD_REQUEST
                    message: nothing flows out of a wallbox
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: invalid_direction
                        field: items.0.power_kw
                        message: nothing flows out of a wallbox
                Power above the asset's rating:
                  summary: Power above the asset's rating
                  value:
                    code: BAD_REQUEST
                    message: power_kw 7 is more than the battery's max_in_kw of 5
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: too_big
                        field: items.0.power_kw
                        message: power_kw 7 is more than the battery's max_in_kw of 5
                Expected power against the setpoint:
                  summary: Expected power against the setpoint
                  value:
                    code: BAD_REQUEST
                    message: >-
                      expected_power_kw -3 is not between 0 and the setpoint's
                      power_kw 3
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: invalid_value
                        field: items.0.expected_power_kw
                        message: >-
                          expected_power_kw -3 is not between 0 and the
                          setpoint's power_kw 3
                Asset that can't be steered:
                  summary: Asset that can't be steered
                  value:
                    code: BAD_REQUEST
                    message: Asset ha_b7q2m1k8v4n0x3c9l5p2r7td is not steerable.
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: >-
                      https://docs.nomos.energy/api-references/errors/BAD_REQUEST
                    errors:
                      - code: asset_not_steerable
                        field: id
                        message: Asset ha_b7q2m1k8v4n0x3c9l5p2r7td is not steerable.
                Body is not valid JSON:
                  $ref: '#/components/examples/400-body-is-not-valid-json'
                Unsupported version header:
                  $ref: '#/components/examples/400-unsupported-version-header'
        '401':
          description: The access token is missing, expired or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnauthorized'
              examples:
                No token:
                  $ref: '#/components/examples/401-no-token'
                Expired token:
                  $ref: '#/components/examples/401-expired-token'
                Invalid token:
                  $ref: '#/components/examples/401-invalid-token'
        '403':
          description: The access token is valid but not allowed to use this endpoint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrForbidden'
              examples:
                Role without access:
                  $ref: '#/components/examples/403-role-without-access'
                Token without scope:
                  $ref: '#/components/examples/403-token-without-scope'
                Customer token without customer:
                  $ref: '#/components/examples/403-customer-token-without-customer'
        '404':
          description: >-
            A resource in the path or the body does not exist or belongs to
            another organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrNotFound'
              examples:
                Unknown asset:
                  $ref: '#/components/examples/404-unknown-asset'
        '409':
          description: >-
            The request conflicts with the current state of a resource, for
            example a duplicate or a resource that has ended.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrConflict'
              examples:
                Asset decommissioned:
                  summary: Asset decommissioned
                  value:
                    code: CONFLICT
                    message: Asset ha_b7q2m1k8v4n0x3c9l5p2r7td is decommissioned.
                    requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
                    docs: https://docs.nomos.energy/api-references/errors/CONFLICT
                    errors:
                      - code: asset_decommissioned
                        field: id
                        message: Asset ha_b7q2m1k8v4n0x3c9l5p2r7td is decommissioned.
        '500':
          description: >-
            Something went wrong on our side. Retry later, and send us the
            `requestId` if it persists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrInternalServerError'
              examples:
                Unexpected error:
                  $ref: '#/components/examples/500-unexpected-error'
      security:
        - Bearer: []
components:
  schemas:
    UpdateAssetSchedule:
      type: object
      properties:
        resolution:
          type: string
          enum:
            - 15min
          description: The length of every slot.
          example: 15min
        items:
          type: array
          items:
            $ref: '#/components/schemas/AssetScheduleSlotInput'
          minItems: 1
          maxItems: 300
          description: >-
            Consecutive quarter hours, in any order and with none left out
            between the first and the last. They replace the sender's plan for
            that whole window, so send `local` for a quarter hour where nothing
            is planned. Quarter hours outside the window keep their plan.
      required:
        - resolution
        - items
    AssetSchedule:
      type: object
      properties:
        object:
          type: string
          enum:
            - asset_schedule
        asset:
          type: string
          example: ha_b7q2m1k8v4n0x3c9l5p2r7td
        period:
          type: object
          properties:
            start:
              type: string
              example: '2026-10-07T00:00:00.000+02:00'
              description: Inclusive start, with its UTC offset.
            end:
              type: string
              example: '2026-10-08T00:00:00.000+02:00'
              description: Exclusive end, with its UTC offset.
          required:
            - start
            - end
        resolution:
          type: string
          enum:
            - 15min
        items:
          type: array
          items:
            type: object
            properties:
              timestamp:
                type: string
                description: Start of the quarter hour in UTC.
                example: '2026-10-07T10:00:00.000Z'
              mode:
                type: string
                enum:
                  - setpoint
                  - self_consumption
                  - local
                description: >-
                  What the device does in the quarter hour. `setpoint` holds
                  `power_kw` (`battery`, `wallbox`). `self_consumption` switches
                  the device to using solar surplus and keeping the grid near
                  zero (`battery`, `wallbox`). `local` leaves the device's own
                  logic in charge, within any caps (every steerable type, and
                  the only mode for `heat_pump` and `inverter`).
                example: setpoint
              power_kw:
                type: number
                nullable: true
                description: >-
                  The power to hold in kW, positive into the asset and negative
                  out of it, at most the asset's rating. Required for
                  `setpoint`, the only mode that takes it. A `wallbox` only
                  charges.
                example: 3
              max_in_kw:
                type: number
                nullable: true
                minimum: 0
                description: >-
                  Cap on power into the asset in kW, at most its rating.
                  `battery`, `wallbox` and `heat_pump` in `self_consumption` and
                  `local`. 0 blocks charging or drawing.
                example: null
              max_out_kw:
                type: number
                nullable: true
                minimum: 0
                description: >-
                  Cap on power out of the asset in kW, at most its rating.
                  `battery` in `self_consumption` and `local`, and `inverter` in
                  `local`, where it curtails solar: 4 limits it to 4 kW, 0 stops
                  it. 0 on a battery keeps the charge.
                example: null
              min_soc:
                type: number
                nullable: true
                minimum: 0
                maximum: 1
                description: >-
                  Lowest charge level as a share from 0 to 1, not above
                  `max_soc`. `battery` in every mode.
                example: 0.1
              max_soc:
                type: number
                nullable: true
                minimum: 0
                maximum: 1
                description: >-
                  Highest charge level as a share from 0 to 1. `battery` in
                  every mode.
                example: 0.9
              expected_power_kw:
                type: number
                nullable: true
                description: >-
                  The average power the sender expects in the quarter hour in
                  kW, when it differs from what the mode implies. On a
                  `setpoint` it lies between 0 and `power_kw`, and it stays
                  within the caps. Every mode, except on an `inverter`.
                example: null
              author:
                type: string
                enum:
                  - partner
                  - nomos
                description: >-
                  Who sent the slot: `partner` through this API, or `nomos` for
                  Nomos's own plans.
                example: partner
            required:
              - timestamp
              - mode
              - power_kw
              - max_in_kw
              - max_out_kw
              - min_soc
              - max_soc
              - expected_power_kw
              - author
          description: >-
            Sorted by time. On a POST, the stored slots. On a GET, the plan in
            force: one slot per planned quarter hour. A quarter hour without one
            runs the device's own logic.
      required:
        - object
        - asset
        - period
        - resolution
        - items
    ErrBadRequest:
      type: object
      properties:
        code:
          type: string
          enum:
            - BAD_REQUEST
          description: The error code related to the status code.
          example: BAD_REQUEST
        message:
          type: string
          description: A human readable message describing the issue.
        requestId:
          type: string
          description: The request id to be used for debugging and error reporting.
          example: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs:
          type: string
          description: The docs related to the error code.
          example: https://docs.nomos.energy/api-references/errors/BAD_REQUEST
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - invalid_type
                  - too_big
                  - too_small
                  - invalid_format
                  - not_multiple_of
                  - unrecognized_keys
                  - invalid_union
                  - invalid_key
                  - invalid_element
                  - invalid_value
                  - custom
                  - unserviceable_zip
                  - ended_subscription
                  - duplicate_grid_reduction
                  - missing_smart_meter
                  - missing_module_1
                  - unsupported_product
                  - unsupported_meter_order
                  - duplicate_meter_order
                  - unsupported_meter
                  - out_of_period_meter_reading
                  - unsupported_meter_reading
                  - duplicate_meter_reading
                  - implausible_meter_reading
                  - duplicate_customer_email
                  - invalid_iban
                  - upgrade_api_version
                  - withdrawal_not_allowed
                  - invalid_termination_date
                  - subscription_not_started
                  - missing_household
                  - invalid_household_customer
                  - invalid_household_meter
                  - duplicate_consumption_subscription
                  - invalid_inverter
                  - read_only_asset
                  - duplicate_external_id
                  - asset_has_children
                  - asset_decommissioned
                  - asset_not_found
                  - mixed_households
                  - field_not_allowed
                  - invalid_direction
                  - duplicate_timestamp
                  - asset_not_steerable
                  - mode_not_allowed
                  - slot_missing
                example: invalid_type
              field:
                type: string
                example: customer.email
              message:
                type: string
                example: 'Invalid input: expected string, received undefined'
            required:
              - code
              - field
              - message
          description: >-
            Per-field breakdown of a validation or business-rule failure.
            Omitted for API versions before the structured-errors cutoff.
      required:
        - code
        - message
        - requestId
        - docs
    ErrUnauthorized:
      type: object
      properties:
        code:
          type: string
          enum:
            - UNAUTHORIZED
          description: The error code related to the status code.
          example: UNAUTHORIZED
        message:
          type: string
          description: A human readable message describing the issue.
        requestId:
          type: string
          description: The request id to be used for debugging and error reporting.
          example: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs:
          type: string
          description: The docs related to the error code.
          example: https://docs.nomos.energy/api-references/errors/UNAUTHORIZED
      required:
        - code
        - message
        - requestId
        - docs
    ErrForbidden:
      type: object
      properties:
        code:
          type: string
          enum:
            - FORBIDDEN
          description: The error code related to the status code.
          example: FORBIDDEN
        message:
          type: string
          description: A human readable message describing the issue.
        requestId:
          type: string
          description: The request id to be used for debugging and error reporting.
          example: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs:
          type: string
          description: The docs related to the error code.
          example: https://docs.nomos.energy/api-references/errors/FORBIDDEN
      required:
        - code
        - message
        - requestId
        - docs
    ErrNotFound:
      type: object
      properties:
        code:
          type: string
          enum:
            - NOT_FOUND
          description: The error code related to the status code.
          example: NOT_FOUND
        message:
          type: string
          description: A human readable message describing the issue.
        requestId:
          type: string
          description: The request id to be used for debugging and error reporting.
          example: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs:
          type: string
          description: The docs related to the error code.
          example: https://docs.nomos.energy/api-references/errors/NOT_FOUND
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - invalid_type
                  - too_big
                  - too_small
                  - invalid_format
                  - not_multiple_of
                  - unrecognized_keys
                  - invalid_union
                  - invalid_key
                  - invalid_element
                  - invalid_value
                  - custom
                  - unserviceable_zip
                  - ended_subscription
                  - duplicate_grid_reduction
                  - missing_smart_meter
                  - missing_module_1
                  - unsupported_product
                  - unsupported_meter_order
                  - duplicate_meter_order
                  - unsupported_meter
                  - out_of_period_meter_reading
                  - unsupported_meter_reading
                  - duplicate_meter_reading
                  - implausible_meter_reading
                  - duplicate_customer_email
                  - invalid_iban
                  - upgrade_api_version
                  - withdrawal_not_allowed
                  - invalid_termination_date
                  - subscription_not_started
                  - missing_household
                  - invalid_household_customer
                  - invalid_household_meter
                  - duplicate_consumption_subscription
                  - invalid_inverter
                  - read_only_asset
                  - duplicate_external_id
                  - asset_has_children
                  - asset_decommissioned
                  - asset_not_found
                  - mixed_households
                  - field_not_allowed
                  - invalid_direction
                  - duplicate_timestamp
                  - asset_not_steerable
                  - mode_not_allowed
                  - slot_missing
                example: invalid_type
              field:
                type: string
                example: customer.email
              message:
                type: string
                example: 'Invalid input: expected string, received undefined'
            required:
              - code
              - field
              - message
          description: >-
            Per-field breakdown of a validation or business-rule failure.
            Omitted for API versions before the structured-errors cutoff.
      required:
        - code
        - message
        - requestId
        - docs
    ErrConflict:
      type: object
      properties:
        code:
          type: string
          enum:
            - CONFLICT
          description: The error code related to the status code.
          example: CONFLICT
        message:
          type: string
          description: A human readable message describing the issue.
        requestId:
          type: string
          description: The request id to be used for debugging and error reporting.
          example: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs:
          type: string
          description: The docs related to the error code.
          example: https://docs.nomos.energy/api-references/errors/CONFLICT
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - invalid_type
                  - too_big
                  - too_small
                  - invalid_format
                  - not_multiple_of
                  - unrecognized_keys
                  - invalid_union
                  - invalid_key
                  - invalid_element
                  - invalid_value
                  - custom
                  - unserviceable_zip
                  - ended_subscription
                  - duplicate_grid_reduction
                  - missing_smart_meter
                  - missing_module_1
                  - unsupported_product
                  - unsupported_meter_order
                  - duplicate_meter_order
                  - unsupported_meter
                  - out_of_period_meter_reading
                  - unsupported_meter_reading
                  - duplicate_meter_reading
                  - implausible_meter_reading
                  - duplicate_customer_email
                  - invalid_iban
                  - upgrade_api_version
                  - withdrawal_not_allowed
                  - invalid_termination_date
                  - subscription_not_started
                  - missing_household
                  - invalid_household_customer
                  - invalid_household_meter
                  - duplicate_consumption_subscription
                  - invalid_inverter
                  - read_only_asset
                  - duplicate_external_id
                  - asset_has_children
                  - asset_decommissioned
                  - asset_not_found
                  - mixed_households
                  - field_not_allowed
                  - invalid_direction
                  - duplicate_timestamp
                  - asset_not_steerable
                  - mode_not_allowed
                  - slot_missing
                example: invalid_type
              field:
                type: string
                example: customer.email
              message:
                type: string
                example: 'Invalid input: expected string, received undefined'
            required:
              - code
              - field
              - message
          description: >-
            Per-field breakdown of a validation or business-rule failure.
            Omitted for API versions before the structured-errors cutoff.
      required:
        - code
        - message
        - requestId
        - docs
    ErrInternalServerError:
      type: object
      properties:
        code:
          type: string
          enum:
            - INTERNAL_SERVER_ERROR
          description: The error code related to the status code.
          example: INTERNAL_SERVER_ERROR
        message:
          type: string
          description: A human readable message describing the issue.
        requestId:
          type: string
          description: The request id to be used for debugging and error reporting.
          example: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs:
          type: string
          description: The docs related to the error code.
          example: >-
            https://docs.nomos.energy/api-references/errors/INTERNAL_SERVER_ERROR
      required:
        - code
        - message
        - requestId
        - docs
    AssetScheduleSlotInput:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
          description: >-
            Start of the quarter hour in UTC, on a 15-minute boundary. It must
            not have started yet and must lie before the end of the day after
            tomorrow in Berlin.
          example: '2026-10-07T10:00:00.000Z'
        mode:
          type: string
          enum:
            - setpoint
            - self_consumption
            - local
          description: >-
            What the device does in the quarter hour. `setpoint` holds
            `power_kw` (`battery`, `wallbox`). `self_consumption` switches the
            device to using solar surplus and keeping the grid near zero
            (`battery`, `wallbox`). `local` leaves the device's own logic in
            charge, within any caps (every steerable type, and the only mode for
            `heat_pump` and `inverter`).
          example: setpoint
        power_kw:
          type: number
          nullable: true
          description: >-
            The power to hold in kW, positive into the asset and negative out of
            it, at most the asset's rating. Required for `setpoint`, the only
            mode that takes it. A `wallbox` only charges.
          example: 3
        max_in_kw:
          type: number
          nullable: true
          minimum: 0
          description: >-
            Cap on power into the asset in kW, at most its rating. `battery`,
            `wallbox` and `heat_pump` in `self_consumption` and `local`. 0
            blocks charging or drawing.
          example: null
        max_out_kw:
          type: number
          nullable: true
          minimum: 0
          description: >-
            Cap on power out of the asset in kW, at most its rating. `battery`
            in `self_consumption` and `local`, and `inverter` in `local`, where
            it curtails solar: 4 limits it to 4 kW, 0 stops it. 0 on a battery
            keeps the charge.
          example: null
        min_soc:
          type: number
          nullable: true
          minimum: 0
          maximum: 1
          description: >-
            Lowest charge level as a share from 0 to 1, not above `max_soc`.
            `battery` in every mode.
          example: 0.1
        max_soc:
          type: number
          nullable: true
          minimum: 0
          maximum: 1
          description: >-
            Highest charge level as a share from 0 to 1. `battery` in every
            mode.
          example: 0.9
        expected_power_kw:
          type: number
          nullable: true
          description: >-
            The average power the sender expects in the quarter hour in kW, when
            it differs from what the mode implies. On a `setpoint` it lies
            between 0 and `power_kw`, and it stays within the caps. Every mode,
            except on an `inverter`.
          example: null
      required:
        - timestamp
        - mode
      additionalProperties: false
  examples:
    400-body-is-not-valid-json:
      summary: Body is not valid JSON
      value:
        code: BAD_REQUEST
        message: Malformed JSON in request body
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/BAD_REQUEST
    400-unsupported-version-header:
      summary: Unsupported version header
      value:
        code: BAD_REQUEST
        message: Version header 2026-01-01.foo is invalid.
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/BAD_REQUEST
    401-no-token:
      summary: No token
      value:
        code: UNAUTHORIZED
        message: No authorization header provided.
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/UNAUTHORIZED
    401-expired-token:
      summary: Expired token
      value:
        code: UNAUTHORIZED
        message: Token expired
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/UNAUTHORIZED
    401-invalid-token:
      summary: Invalid token
      value:
        code: UNAUTHORIZED
        message: Invalid or malformed token
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/UNAUTHORIZED
    403-role-without-access:
      summary: Role without access
      value:
        code: FORBIDDEN
        message: Forbidden to access this route.
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/FORBIDDEN
    403-token-without-scope:
      summary: Token without scope
      value:
        code: FORBIDDEN
        message: 'Insufficient scope: write:* required.'
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/FORBIDDEN
    403-customer-token-without-customer:
      summary: Customer token without customer
      value:
        code: FORBIDDEN
        message: Customer not found.
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/FORBIDDEN
    404-unknown-asset:
      summary: Unknown asset
      value:
        code: NOT_FOUND
        message: Asset not found
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/NOT_FOUND
    500-unexpected-error:
      summary: Unexpected error
      value:
        code: INTERNAL_SERVER_ERROR
        message: Internal Server Error
        requestId: 37a04f8f-e791-491c-81e1-86cd304649bb
        docs: https://docs.nomos.energy/api-references/errors/INTERNAL_SERVER_ERROR
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.