openapi: 3.0.3
info:
  title: BTClock API
  version: '3.0'
  description: BTClock V3 API
servers:
  - url: /api/
paths:
  /status:
    get:
      tags:
        - system
      summary: Get current status
      responses:
        '200':
          description: successful operation
  /system_status:
    get:
      tags:
        - system
      summary: Get system status
      responses:
        '200':
          description: successful operation
  /settings:
    get:
      tags:
        - system
      summary: Get current settings
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArrayOfLeds'
    post:
      tags:
        - system
      summary: Save current settings
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Settings'
      responses:
        '200':
          description: successful operation
    patch:
      tags:
        - system
      summary: Save current settings
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Settings'
      responses:
        '200':
          description: successful operation
  /action/pause:
    get:
      tags:
        - timer
      summary: Pause screen rotation
      responses:
        '200':
          description: successful operation
  /action/timer_restart:
    get:
      tags:
        - timer
      summary: Restart screen rotation
      responses:
        '200':
          description: successful operation
  /show/screen/{id}:
    get:
      tags:
        - screens
      summary: Set screen to show
      parameters:
        - in: path
          name: id
          schema:
            type: integer
            default: 1
          required: true
          description: ID of screen to show
      responses:
        '200':
          description: successful operation
  /show/text/{text}:
    get:
      tags:
        - screens
      summary: Set text to show
      parameters:
        - in: path
          name: text
          schema:
            type: string
            default: text
          required: true
          description: Text to show
      responses:
        '200':
          description: successful operation
  /show/custom:
    post:
      tags:
        - screens
      summary: Set text to show (advanced)
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomText'
      responses:
        '200':
          description: successful operation
  /full_refresh:
    get:
      tags:
        - system
      summary: Force full refresh of all displays
      responses:
        '200':
          description: successful operation
  /lights:
    get:
      tags:
        - lights
      summary: Get LEDs status
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArrayOfLeds'
  /lights/set:
    patch:
      tags:
        - lights
      summary: Set individual LEDs
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ArrayOfLedsInput'
      responses:
        '200':
          description: succesful operation
        '400':
          description: invalid colors or wrong amount of LEDs
  /lights/color/{color}:
    get:
      tags:
        - lights
      summary: Turn on LEDs with specific color
      parameters:
        - in: path
          name: color
          schema:
            type: string
            default: FFCC00
          required: true
          description: Color in RGB hex
      responses:
        '200':
          description: successful operation
  /lights/off:
    get:
      tags:
        - lights
      summary: Turn LEDs off
      responses:
        '200':
          description: successful operation
  /restart:
    get:
      tags:
        - system
      summary: Restart BTClock
      responses:
        '200':
          description: successful operation
components:
  schemas:
    RgbColorValues:
      type: object
      properties:
        red:
          type: integer
          minimum: 0
          maximum: 255
          example: 255
        green:
          type: integer
          minimum: 0
          maximum: 255
          example: 204
        blue:
          type: integer
          minimum: 0
          maximum: 255
          example: 0
    RgbColorHex:
      type: object
      properties:
        hex:
          type: string
          pattern: ^#(?:[0-9a-fA-F]{3}){1,2}$
          example: '#FFCC00'
    RgbColorValueAndHex:
      allOf:
        - $ref: '#/components/schemas/RgbColorValues'
        - $ref: '#/components/schemas/RgbColorHex'
    RgbColorValueOrHex:
      oneOf:
        - $ref: '#/components/schemas/RgbColorValues'
        - $ref: '#/components/schemas/RgbColorHex'
    ArrayOfLeds:
      type: array
      items:
        $ref: '#/components/schemas/RgbColorValueAndHex'
    ArrayOfLedsInput:
      type: array
      items:
        $ref: '#/components/schemas/RgbColorValueOrHex'
    Settings:
      type: object
      properties:
        fetchEurPrice:
          type: boolean
          description: Fetch EUR price instead of USD
        fgColor:
          type: string
          default: 16777215
          description: ePaper foreground (text) color
        bgColor:
          type: string
          default: 0
          description: ePaper background color
        ledTestOnPower:
          type: boolean
          default: true
          description: Do LED test on power-on
        ledFlashOnUpd:
          type: boolean
          default: false
          description: Flash LEDs on new block
        mdnsEnabled:
          type: boolean
          default: true
          description: Enable mDNS
        otaEnabled:
          type: boolean
          default: true
          description: Enable over-the-air updates
        stealFocus:
          type: boolean
          default: false
          description: Steal focus on new block
        mcapBigChar:
          type: boolean
          default: false
          description: Use big characters for market cap screen
        mempoolInstance:
          type: string
          default: mempool.space
          description: Mempool.space instance to connect to
        ledBrightness:
          type: integer
          default: 128
          description: Brightness of LEDs
        fullRefreshMin:
          type: integer
          default: 60
          description: Full refresh time of ePaper displays in minutes
        screen[0]:
          type: boolean
        screen[1]:
          type: boolean
        screen[2]:
          type: boolean
        screen[3]:
          type: boolean
        screen[4]:
          type: boolean
        screen[5]:
          type: boolean
        screen[6]:
          type: boolean
        tzOffset:
          type: integer
          default: 60
          description: Timezone offset in minutes
        minSecPriceUpd:
          type: integer
          default: 30
          description: Minimum time between price updates in seconds
        timePerScreen:
          type: integer
          default: 30
          description: Time between screens when rotating in minutes
        txPower:
          type: integer
          description: WiFi Tx Power
    CustomText:
      type: array
      items:
        type: string
      minItems: 7
      maxItems: 7