Skip to content

GET /api/debug/settings/

Retrieve the state of both persistent settings banks, regardless of the source of the current runtime settings.

Auth: Bearer (powerUser).

Diagnostic mode is not required. In diagnostic mode, implicit powerUser access allows the banks to be inspected without a Bearer token.


{
"runtimeSource": "builtIn",
"bootBank": 2,
"banks": [
{
"bank": 1,
"valid": false
},
{
"bank": 2,
"valid": true,
"sequence": 15,
"isDefault": true,
"savedAt": "2026-09-18T10:05:00Z",
"dataLength": 512,
"dataCrc32": "87654321",
"headerCrc32": "10fedcba"
}
]
}
FieldTypeDescription
runtimeSourcestringSource of the current runtime settings: builtIn, bank1, or bank2
bootBanknumber | nullBank selected during a normal boot: 1, 2, or null if both banks are invalid
banksarrayState of the two physical settings banks
banks[].banknumberBank number: 1 or 2
banks[].validbooleanResult of full validation of the header, firmware version, length, and data CRC
banks[].sequencenumberRecord sequence number; present only for a valid bank
banks[].isDefaultbooleanWhether the payload matches the effective factory settings; present only for a valid bank
banks[].savedAtstring | nullSave time in ISO 8601 UTC; present only for a valid bank
banks[].dataLengthnumberPayload length; present only for a valid bank
banks[].dataCrc32stringPayload CRC32 as eight hex characters; present only for a valid bank
banks[].headerCrc32stringHeader CRC32 as eight hex characters; present only for a valid bank

runtimeSource and bootBank may differ. For example, in diagnostic mode the runtime uses builtIn, while a normal boot selects the latest valid flash bank.

If both banks are valid, bootBank identifies the bank with the newer sequence, accounting for uint32_t wraparound. If the sequence values are equal, bank 1 is selected.

Header fields are not returned for an invalid bank because their values are not considered reliable.

The saved settings are considered factory settings if bootBank is not null and the specified bank has valid: true and isDefault: true. The other, older bank may contain custom settings and does not affect the result.