Franklin Whole Home System Settings API
Time-of-use profiles, aPower switch control and smart-circuit settings.
Time-of-use profiles, aPower switch control and smart-circuit settings.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/franklin-whole-home-system-settings-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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).