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

# Send a remote control command to a shower

> Waits up to 5 seconds for the shower to accept the command. Accepted means the shower will act on it, not that it already has. The data depends on the action: shower_on takes optional, nullable temperature_setpoint (°C), flow_setpoint, recirculation_mode (0-4) and flow_boost; a missing or null one is the shower's own default. change_temperature_setpoint (°C) and change_flow_setpoint take a required setpoint. shower_off and end_session take none. Setpoints must be within the shower's limits.




## OpenAPI

````yaml /spec.json post /client/showers/{id}/commands
openapi: 3.0.4
info:
  title: Orbital API
  version: 1.0.0
  description: >-
    Send your API key in the `x-api-key` header of every request. The key
    belongs to one Orbital account, and requests act as that account: they see
    and control only the devices it owns or has been given access to. A missing
    or unknown key gets `403` with `{ "message": "Forbidden" }`.
servers:
  - url: https://api.orbital-systems.com
    description: Production
  - url: https://stage-api.orbital-systems.com
    description: Staging
  - url: https://dev-api.orbital-systems.com
    description: Development
security:
  - apiKeyAuth: []
tags: []
paths:
  /client/showers/{id}/commands:
    post:
      tags:
        - Shower commands.
      summary: Send a remote control command to a shower
      description: >
        Waits up to 5 seconds for the shower to accept the command. Accepted
        means the shower will act on it, not that it already has. The data
        depends on the action: shower_on takes optional, nullable
        temperature_setpoint (°C), flow_setpoint, recirculation_mode (0-4) and
        flow_boost; a missing or null one is the shower's own default.
        change_temperature_setpoint (°C) and change_flow_setpoint take a
        required setpoint. shower_off and end_session take none. Setpoints must
        be within the shower's limits.
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
          description: The unique identifier for the shower
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/showerCommandRequest'
      responses:
        '200':
          description: The shower accepted the command
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/showerCommandResponse'
        '400':
          description: >-
            Unknown action, invalid data or a setpoint outside the device’s
            limits
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: setpoint must be between 15 and 45
                statusCode: 400
                name: InvalidParameterError
        '403':
          description: You don’t have access to control the device
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: Forbidden
                statusCode: 403
                name: ForbiddenError
        '404':
          description: Shower not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: Shower not found
                statusCode: 404
                name: NotFoundError
        '409':
          description: >-
            The device refused the command in its current state, for example
            while hibernating
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: Command not allowed in the current state
                statusCode: 409
                name: ConflictError
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: Internal server error
        '503':
          description: The device is offline
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: Shower is offline
                statusCode: 503
                name: ServiceUnavailableError
        '504':
          description: The device didn’t answer in time. It may still act on the command.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                message: Device did not respond
                statusCode: 504
                name: GatewayTimeoutError
components:
  schemas:
    showerCommandRequest:
      oneOf:
        - $ref: '#/components/schemas/showerCommandShowerOn'
        - $ref: '#/components/schemas/showerCommandShowerOff'
        - $ref: '#/components/schemas/showerCommandEndSession'
        - $ref: '#/components/schemas/showerCommandChangeTemperatureSetpoint'
        - $ref: '#/components/schemas/showerCommandChangeFlowSetpoint'
      discriminator:
        propertyName: action
        mapping:
          shower_on: '#/components/schemas/showerCommandShowerOn'
          shower_off: '#/components/schemas/showerCommandShowerOff'
          end_session: '#/components/schemas/showerCommandEndSession'
          change_temperature_setpoint: '#/components/schemas/showerCommandChangeTemperatureSetpoint'
          change_flow_setpoint: '#/components/schemas/showerCommandChangeFlowSetpoint'
    showerCommandResponse:
      type: object
      properties:
        id:
          type: string
          description: ID of the command. Returned once the device has confirmed it.
          example: 3e2d1c0b-9a8f-4e7d-8c6b-5a4f3e2d1c0b
        action:
          type: string
          description: The action sent.
          example: change_temperature_setpoint
    error:
      type: object
      description: Returned with every 4xx and 5xx response.
      required:
        - message
      properties:
        message:
          type: string
          description: What went wrong.
        name:
          type: string
          description: Kind of error. Not set on a `500`.
        statusCode:
          type: integer
          description: HTTP status code, repeated from the response. Not set on a `500`.
        code:
          type: integer
          enum:
            - 1
            - 2
          description: >-
            Set on a `403` from pairing a device someone else owns: `1` the
            owner doesn’t accept sharing requests, `2` a sharing request was
            sent to the owner.
    showerCommandShowerOn:
      type: object
      title: shower_on
      properties:
        action:
          type: string
          enum:
            - shower_on
          description: Starts a session, or resumes a paused one.
          example: shower_on
        data:
          type: object
          properties:
            temperature_setpoint:
              type: number
              nullable: true
              description: Temperature setpoint, in °C. Must be within the shower’s limits.
              example: 38
            flow_setpoint:
              type: number
              nullable: true
              description: Flow setpoint, in L/min. Must be within the shower’s limits.
              example: 8
            recirculation_mode:
              type: integer
              minimum: 0
              maximum: 4
              nullable: true
              description: >-
                Savings mode: `0` the shower’s default, `1` Legacy, `2` Earth,
                `3` Moon or `4` Mars.
              example: 2
            flow_boost:
              type: boolean
              nullable: true
              description: Whether to turn flow boost on.
              example: false
          description: >-
            Optional settings for the session. A missing or `null` value keeps
            the shower’s default.
      required:
        - action
    showerCommandShowerOff:
      type: object
      title: shower_off
      properties:
        action:
          type: string
          enum:
            - shower_off
          description: Pauses the session.
          example: shower_off
        data:
          type: object
          properties: {}
          description: Takes no arguments.
      required:
        - action
    showerCommandEndSession:
      type: object
      title: end_session
      properties:
        action:
          type: string
          enum:
            - end_session
          description: Ends the session.
          example: end_session
        data:
          type: object
          properties: {}
          description: Takes no arguments.
      required:
        - action
    showerCommandChangeTemperatureSetpoint:
      type: object
      title: change_temperature_setpoint
      properties:
        action:
          type: string
          enum:
            - change_temperature_setpoint
          description: Changes the temperature setpoint.
          example: change_temperature_setpoint
        data:
          type: object
          properties:
            setpoint:
              type: number
              description: Temperature setpoint, in °C. Must be within the shower’s limits.
              example: 39
          required:
            - setpoint
          description: The new setpoint.
      required:
        - action
        - data
    showerCommandChangeFlowSetpoint:
      type: object
      title: change_flow_setpoint
      properties:
        action:
          type: string
          enum:
            - change_flow_setpoint
          description: Changes the flow setpoint.
          example: change_flow_setpoint
        data:
          type: object
          properties:
            setpoint:
              type: number
              description: Flow setpoint, in L/min. Must be within the shower’s limits.
              example: 8
          required:
            - setpoint
          description: The new setpoint.
      required:
        - action
        - data
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Send your API key in the `x-api-key` header of every request. The key
        belongs to one Orbital account, and requests act as that account: they
        see and control only the devices it owns or has been given access to. A
        missing or unknown key gets `403` with `{ "message": "Forbidden" }`.

````

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