Sensibo Schedules API

Recurring day-and-time AC state schedules.

OpenAPI Specification

sensibo-schedules-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Sensibo AC States Schedules API
  description: The Sensibo API gives developers full control over Sensibo smart AC controllers and air quality monitors ("pods") - Sensibo Sky, Air, Air Pro, and Elements. Over REST you can list the devices on an account, read the latest temperature, humidity, and air quality measurements, pull up to seven days of historical measurements, get and set the air conditioner state (power, mode, target temperature, fan, swing), configure the Climate React smart-mode automation, and manage schedules and timers. Authentication is a per-account API key passed as the `apiKey` query parameter, generated at https://home.sensibo.com/me/api. OAuth2 is available for commercial integrations (contact support@sensibo.com). Schedules and timers are exposed by Sensibo as a legacy ("v1") surface but are served under the same home.sensibo.com host. This document is grounded in Sensibo's published OpenAPI (sensibo.openapi.yaml) and support documentation; request and response schemas are modeled representatively.
  version: 2.0.0
  contact:
    name: Sensibo Support
    url: https://support.sensibo.com/api/
    email: support@sensibo.com
  license:
    name: Proprietary
    url: https://sensibo.com/pages/terms-of-service
servers:
- url: https://home.sensibo.com/api/v2
  description: Sensibo API v2
security:
- apiKey: []
tags:
- name: Schedules
  description: Recurring day-and-time AC state schedules.
paths:
  /pods/{device_id}/schedules:
    get:
      operationId: listSchedules
      tags:
      - Schedules
      summary: Get the scheduled items
      description: Lists the recurring schedules configured for the pod.
      parameters:
      - $ref: '#/components/parameters/DeviceId'
      responses:
        '200':
          description: The pod's schedules.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  result:
                    type: array
                    items:
                      $ref: '#/components/schemas/Schedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      operationId: createSchedule
      tags:
      - Schedules
      summary: Create a new schedule
      description: Creates a recurring schedule that applies a target AC state at a chosen time on chosen days of the week.
      parameters:
      - $ref: '#/components/parameters/DeviceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Schedule'
            example:
              targetTimeLocal: '18:30'
              recurringDays:
              - Monday
              - Tuesday
              - Wednesday
              - Thursday
              - Friday
              acState:
                'on': true
                mode: cool
                targetTemperature: 23
      responses:
        '200':
          description: The created schedule.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  result:
                    $ref: '#/components/schemas/Schedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
  /pods/{device_id}/schedules/{schedule_id}:
    get:
      operationId: getSchedule
      tags:
      - Schedules
      summary: Get a specific schedule
      description: Returns a single schedule by ID.
      parameters:
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/ScheduleId'
      responses:
        '200':
          description: The requested schedule.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  result:
                    $ref: '#/components/schemas/Schedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    put:
      operationId: toggleSchedule
      tags:
      - Schedules
      summary: Enable or disable a specific schedule
      description: Enables or disables an existing schedule.
      parameters:
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/ScheduleId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                isEnabled:
                  type: boolean
              example:
                isEnabled: false
      responses:
        '200':
          description: The updated schedule.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
    delete:
      operationId: deleteSchedule
      tags:
      - Schedules
      summary: Delete a specific schedule
      description: Deletes a schedule by ID.
      parameters:
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/ScheduleId'
      responses:
        '200':
          description: The schedule was deleted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  responses:
    Unauthorized:
      description: Missing or invalid apiKey.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: 'Too many requests. Requests are rate limited; a 429 indicates the limit was exceeded. Sending an `Accept-Encoding: gzip` header raises the effective limit.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    DeviceId:
      name: device_id
      in: path
      required: true
      description: The pod (device) identifier.
      schema:
        type: string
    ScheduleId:
      name: schedule_id
      in: path
      required: true
      description: The schedule identifier.
      schema:
        type: string
  schemas:
    AcState:
      type: object
      description: The state of the air conditioner.
      properties:
        'on':
          type: boolean
        mode:
          type: string
          description: Operating mode.
          example: cool
          enum:
          - cool
          - heat
          - fan
          - dry
          - auto
        targetTemperature:
          type: number
          example: 22
        temperatureUnit:
          type: string
          enum:
          - C
          - F
          example: C
        fanLevel:
          type: string
          example: auto
        swing:
          type: string
          example: stopped
    Schedule:
      type: object
      description: A recurring schedule that applies an AC state.
      properties:
        id:
          type: string
        isEnabled:
          type: boolean
        targetTimeLocal:
          type: string
          example: '18:30'
        recurringDays:
          type: array
          items:
            type: string
          example:
          - Monday
          - Wednesday
          - Friday
        acState:
          $ref: '#/components/schemas/AcState'
    Error:
      type: object
      properties:
        status:
          type: string
          example: failure
        reason:
          type: string
  securitySchemes:
    apiKey:
      type: apiKey
      in: query
      name: apiKey
      description: Per-account API key generated at https://home.sensibo.com/me/api and passed as the apiKey query parameter on every request.