openapi: 3.2.0 info: title: FranklinWH System Settings API version: '1.0' summary: Partner API for the FranklinWH (Franklin Whole Home) residential energy storage platform. description: 'Machine-readable rendering of the FranklinWH partner API as published by FranklinWH''s own API portal at https://api.franklinwh.com/ (portal title `FWH-API-Service`, author `FWH`, version 1.0). The portal ships its complete operation catalogue - paths, HTTP methods, parameter names, locations, types, requirement flags and value notes - as a static, publicly retrievable JavaScript module; this OpenAPI document is a faithful format conversion of that catalogue. Nothing has been added that the portal does not publish. Response payload schemas are NOT published by the portal, so only the observed response envelope is modelled here. The API covers site and device inventory, telemetry and energy data, warnings and backup events, time-of-use profiles, smart-circuit and grid-event control, aPower battery start/stop, device grouping and an operation audit log, plus a Sunrun-specific namespace (`/api-sunrun/`). Authentication: POST /api-common/tokenizer with a `cp` / `ck` credential pair returns a token that is sent on every other operation in the `Authorization` header. Base URL: the only base URL FranklinWH publishes publicly is the free test environment, https://test-api.franklinwh.com. The production base URL is issued to authorised partners during onboarding and is not published.' contact: name: FranklinWH Support email: service@franklinwh.com url: https://www.franklinwh.com/support/contact/ x-provenance: method: derived source: https://api.franklinwh.com/js/apiList-eQeWKe2I.js source_portal: https://api.franklinwh.com/ derived: '2026-08-16' note: Converted from the FranklinWH API portal's own published operation catalogue. Operations, parameters and request examples are verbatim from that catalogue; no operation, parameter or schema was invented. servers: - url: https://test-api.franklinwh.com description: Free test environment - the only base URL FranklinWH publishes publicly (portal `host` / `basePath`). security: - AuthorizationToken: [] tags: - name: System Settings description: Time-of-use profiles, aPower switch control and smart-circuit settings. paths: /api-common/setTouProfile: post: tags: - System Settings summary: Set TOU Profile operationId: setTouProfile description: Set energy TOU profile requestBody: required: true content: application/json: schema: type: object properties: deviceId: type: string description: Device id touId: type: integer description: TOU profile ID season: type: array items: type: object description: TOU profile season required: - deviceId - touId - season example: deviceId: 10080008B00A22150090 touId: 10688 season: - month: 5,6,7,8,9,10 dayType: 1 time: - startTime: 00:00 endTime: 08:00 waveType: 0 schedule: 8 - startTime: 08:00 endTime: '21:00' waveType: 1 schedule: 2 - startTime: '21:00' endTime: 08:00 waveType: 2 schedule: 1 - month: 5,6,7,8,9,10 dayType: 1 time: - startTime: 00:00 endTime: 08:00 waveType: 0 schedule: 8 - startTime: 08:00 endTime: '21:00' waveType: 1 schedule: 2 - startTime: '21:00' endTime: 08:00 waveType: 2 schedule: 1 responses: '200': description: Envelope response. Non-zero `code` values (401 wrong token, 403 missing token or token param) are returned inside the envelope with HTTP 200. content: application/json: schema: $ref: '#/components/schemas/ApiEnvelope' '404': description: Unknown path. content: application/json: schema: $ref: '#/components/schemas/NotFoundError' /api-common/queryTouProfile: get: tags: - System Settings summary: Query TOU Profile operationId: queryTouProfile description: Query energy TOU profile parameters: - name: deviceId in: query required: true schema: type: string description: Device id responses: '200': description: Envelope response. Non-zero `code` values (401 wrong token, 403 missing token or token param) are returned inside the envelope with HTTP 200. content: application/json: schema: $ref: '#/components/schemas/ApiEnvelope' '404': description: Unknown path. content: application/json: schema: $ref: '#/components/schemas/NotFoundError' /api-common/setSwitchParam: post: tags: - System Settings summary: Set aPower Switch operationId: setSwitchParam description: Set aPower Switch requestBody: required: true content: application/json: schema: type: object properties: deviceId: type: string description: Device id cmd: type: integer description: 'Type. 1 : Start up, 2 : Shut down' required: - deviceId - cmd responses: '200': description: Envelope response. Non-zero `code` values (401 wrong token, 403 missing token or token param) are returned inside the envelope with HTTP 200. content: application/json: schema: $ref: '#/components/schemas/ApiEnvelope' '404': description: Unknown path. content: application/json: schema: $ref: '#/components/schemas/NotFoundError' /api-common/queryApowerSwitchStatus: get: tags: - System Settings summary: Query aPower Switch Status operationId: queryApowerSwitchStatus description: Query aPower Switch Status parameters: - name: deviceId in: query required: true schema: type: string description: Device id responses: '200': description: Envelope response. Non-zero `code` values (401 wrong token, 403 missing token or token param) are returned inside the envelope with HTTP 200. content: application/json: schema: $ref: '#/components/schemas/ApiEnvelope' '404': description: Unknown path. content: application/json: schema: $ref: '#/components/schemas/NotFoundError' /api-common/setSmartCircuits: post: tags: - System Settings summary: Set Smart Circuits operationId: setSmartCircuits description: Set smart circuits requestBody: required: true content: application/json: schema: type: object properties: deviceId: type: string description: Device id swMerge: type: integer description: 'Circuits Merge. 0: Separated 1 : Merged If set to 1, It represents the merging of circuit 1 and circuit 2, and all the value set by sw2 will be invalid' sw1Name: type: string description: Circuit 1 naming sw1MsgType: type: integer description: 'Operation type. 1 : Manual switch 2 : Parameter settings' sw1SocLowSet: type: integer description: 'SOC threshold to shed loads on circuit 1. 0~100;0 : No limit … 100 : Turn off immediately after disconnecting from the grid' sw1Mode: type: integer description: 'Circuit 1 operation. 0 : Manually turn off 1: Manually turn on, 2 :Timing plan' sw1ProLoad: type: integer description: 'Circuit 1 status. 0: Off 1:On' sw1Freq: type: integer description: 'Cycle period of Circuit 1. 0 : Single 1: Daily 2 : Weekly 3: Monthly' sw1TimeEn: type: array items: type: integer description: 'Circuit 1 timing plan. [0, 1] 0: Disabled 1: Enabled' sw1Time: type: array items: type: string description: Circuit 1 time period. ["2021-08-06 09:00/ 2021-08-06 12:00", "2021-08-06 18:00/ 2021-08-06 20:00"] Up to 2 time periods sw2Name: type: string description: Circuit 2 naming. All parameter descriptions refer to sw1 sw2MsgType: type: integer description: Operation type. All parameter descriptions refer to sw1 sw2SocLowSet: type: integer description: SOC threshold to shed loads on circuit 2. All parameter descriptions refer to sw1 sw2Mode: type: integer description: Circuit 2 operation. All parameter descriptions refer to sw1 sw2ProLoad: type: integer description: Circuit 2 status. All parameter descriptions refer to sw1 sw2Freq: type: integer description: Cycle period of Circuit 2. All parameter descriptions refer to sw1 sw2TimeEn: type: integer description: Circuit 2 timing plan. All parameter descriptions refer to sw1 sw2Time: type: array items: type: integer description: Circuit 2 time period. All parameter descriptions refer to sw1 sw3Name: type: string description: Circuit 3 naming. All parameter descriptions refer to sw1 sw3MsgType: type: integer description: Operation type. All parameter descriptions refer to sw1 sw3SocLowSet: type: integer description: SOC threshold to shed loads on circuit 3. All parameter descriptions refer to sw1 sw3Mode: type: integer description: Circuit 3 operation. All parameter descriptions refer to sw1 sw3ProLoad: type: integer description: Circuit 3 status. All parameter descriptions refer to sw1 sw3Freq: type: integer description: Cycle period of Circuit 3. All parameter descriptions refer to sw1 sw3TimeEn: type: integer description: Circuit 3 timing plan. All parameter descriptions refer to sw1 sw3Time: type: array items: type: integer description: Circuit 3 time period. All parameter descriptions refer to sw1 required: - deviceId responses: '200': description: Envelope response. Non-zero `code` values (401 wrong token, 403 missing token or token param) are returned inside the envelope with HTTP 200. content: application/json: schema: $ref: '#/components/schemas/ApiEnvelope' '404': description: Unknown path. content: application/json: schema: $ref: '#/components/schemas/NotFoundError' /api-common/querySmartCircuitParameters: get: tags: - System Settings summary: Query Smart Circuit Parameters operationId: querySmartCircuitParameters description: Query smart circuit parameters parameters: - name: deviceId in: query required: true schema: type: string description: Device ID responses: '200': description: Envelope response. Non-zero `code` values (401 wrong token, 403 missing token or token param) are returned inside the envelope with HTTP 200. content: application/json: schema: $ref: '#/components/schemas/ApiEnvelope' '404': description: Unknown path. content: application/json: schema: $ref: '#/components/schemas/NotFoundError' components: schemas: NotFoundError: type: object description: Framework 404 body returned for unknown paths. properties: timestamp: type: string format: date-time path: type: string status: type: integer error: type: string message: type: - string - 'null' requestId: type: string examples: - timestamp: '2026-08-16T17:23:07.914+00:00' path: / status: 404 error: Not Found message: null requestId: 1748b892-1427296 ApiEnvelope: type: object description: Response envelope used by every operation. Observed live on https://test-api.franklinwh.com. properties: code: type: integer description: Result code. 401 = wrong token, 403 = missing token or token param. msg: type: string description: Human-readable result message. data: description: Operation payload. FranklinWH does not publish payload schemas; shape varies per operation. examples: - code: 401 msg: wrong token securitySchemes: AuthorizationToken: type: apiKey in: header name: Authorization description: Token returned by POST /api-common/tokenizer (exchange of a `cp` / `ck` credential pair).