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

# Submit Thermal Control Schedule

> Submit a steering schedule starting from the next quarter-hour for the 24hours thereafter. (= 96 15min intervals)
 Example: You submit at 10:07, the schedule will start at 10:15 and end at 10:00 the next day.
 You can provide a timestamp in the future to start the schedule at a later time.
 If the timestamp is exactly in a quarter hour timestamp in the future from now.
 It will start from there and not convert it to the next quarter hour.
 If you don't provide a timestamp, the schedule will start at the next quarter-hour.
 Only update the schedule if you want to change it or provide a new one.
 

 Timestamp in UTC. 

 Time format examples: 
 * 2023-10-01T00:00:00Z
 
 * 2023-10-01T00:00:00 


**NOTE**: 
 * The heat pump is not allowed to heat domestic hot water tank for more than 1 hour continuously.

 * If temperatures of the house or tank go outside the comfort bounds, we trigger a failsafe
 to heat/cool up until the comfort bounds are reached again. These comfort bounds depend on whether a schedule exists for this heat pump or not.
 For tank heating if a schedule exists, the comfort bound will be triggered around 42 degrees. If no schedule exists,
 it will be triggered around the default setpoint the user had before we started steering his heat pump. Usually
 this is around 50 degrees.

 * If the tank temperature reaches above it's max allowed temperature we forcefully stop the heating process.



## OpenAPI

````yaml /api-docs/supplier-control/openapi-thermal-control.json post /v1/device/thermal-control/schedule
openapi: 3.1.0
info:
  title: NOX Energy API - Thermal Control
  description: >
    # Thermal Control API Documentation


    This documentation shows only the endpoints available to thermal control
    users.


    ## Authentication


    1. Get your API key from [NOX Energy](mailto:support@nox.energy).

    2. Include the API key in your API calls with the header: `x-api-key:
    YOUR_API_KEY`.


    ## Access Level


    This documentation is specifically for **thermal control users** who have
    access to these endpoints.


    Base URL: [https://api.nox.energy](https://api.nox.energy)
  version: 1.0.0
servers:
  - url: https://api.nox.energy
    description: Production Server
security:
  - ApiKeyAuth: []
tags:
  - name: Asset Info
    description: API to get basic information about your assets.
  - name: Device Consumption
    description: API to get consumption data of your devices.
  - name: Thermal Control
    description: API for thermal control specific endpoints.
  - name: User Management
    description: API endpoints to manage users and their data.
paths:
  /v1/device/thermal-control/schedule:
    post:
      tags:
        - Thermal Control
      summary: Submit Thermal Control Schedule
      description: >-
        Submit a steering schedule starting from the next quarter-hour for the
        24hours thereafter. (= 96 15min intervals)
         Example: You submit at 10:07, the schedule will start at 10:15 and end at 10:00 the next day.
         You can provide a timestamp in the future to start the schedule at a later time.
         If the timestamp is exactly in a quarter hour timestamp in the future from now.
         It will start from there and not convert it to the next quarter hour.
         If you don't provide a timestamp, the schedule will start at the next quarter-hour.
         Only update the schedule if you want to change it or provide a new one.
         

         Timestamp in UTC. 

         Time format examples: 
         * 2023-10-01T00:00:00Z
         
         * 2023-10-01T00:00:00 


        **NOTE**: 
         * The heat pump is not allowed to heat domestic hot water tank for more than 1 hour continuously.

         * If temperatures of the house or tank go outside the comfort bounds, we trigger a failsafe
         to heat/cool up until the comfort bounds are reached again. These comfort bounds depend on whether a schedule exists for this heat pump or not.
         For tank heating if a schedule exists, the comfort bound will be triggered around 42 degrees. If no schedule exists,
         it will be triggered around the default setpoint the user had before we started steering his heat pump. Usually
         this is around 50 degrees.

         * If the tank temperature reaches above it's max allowed temperature we forcefully stop the heating process.
      operationId: submit_thermal_control_schedule_v1_device_thermal_control_schedule_post
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
              title: Request Body
            examples:
              schedule_example:
                summary: Sample thermal control schedule
                value:
                  device_id: HP123456
                  timestamp: '2025-08-05T10:15:00Z'
                  house_heating:
                    - true
                    - false
                    - false
                    - true
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                  house_cooling:
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                  tank:
                    - false
                    - false
                    - true
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
                    - false
      responses:
        '200':
          description: Schedule submitted successfully
          content:
            application/json:
              schema: {}
              example:
                status: success
                message: Steering schedule accepted for HP123456
                meta:
                  timestamp: '2025-01-15T10:30:00Z'
                  schedule_interval: 15min
                  schedule_duration: 96 intervals (24 hours)
                  energy_supplier: Energy Supplier A
        '400':
          description: Invalid request parameters
          content:
            application/json:
              example:
                detail: >-
                  Missing required fields: device_id, timestamp, house_heating,
                  house_cooling, tank
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API Key authentication. Enter your API key in the format: YOUR_API_KEY'

````