206 lines
62 KiB
Markdown
206 lines
62 KiB
Markdown
# SimAdmin upstream API static-contract evidence matrix — `58e2204`
|
|
|
|
- **Audited commit:** `58e220411d6599609f0eeda01eb7016e9212f970`.
|
|
- **Coverage:** 100 paths / 117 operations (GET 50, POST 62, DELETE 5); IA domain/owner mapping remains frozen.
|
|
- **Independent snapshot:** repository fixture `packages/operation-registry/test/fixtures/upstream-58e2204/` contains whole upstream source and all 82 Bruno `.bru` files. `manifest.json` records commit and SHA-256 for every whole file; tests re-hash files and exact handler slices without `/tmp` or registry-derived content.
|
|
- **Exact handlers:** each `handlerRange` starts at the async function signature and ends at its brace-matched closing brace. Helper evidence, when needed, belongs in `supplementalRanges`, never in the handler digest.
|
|
- **Response evidence:** explicit Rust returns, `ApiResponse<T>` payload construction, or dynamic JSON construction are implementation evidence, not real response fixtures or an exhaustive schema. `opaque-into-response` count: **0**.
|
|
- **Bruno evidence:** 67/117 operations reference parsed Bruno evidence from 82 files. This does **not** claim that 82 files cover all 117 operations; operations without Bruno are marked route+handler(+model).
|
|
- **Sensitive fields:** every item carries snapshot-rebuildable evidence (file/range/SHA-256/symbol/model field), with explicit container model chains for array paths and exact handler slices for dynamic keys.
|
|
- **Boundary / semanticBindingReview:** structural checks prove source/model/field relationships, not semantic payload intent. Each registry operation is marked `semanticBindingReview: 'reviewed-phase-0.2'`; manual review fixes the method/path/handler/payload-symbol tuple, especially high-value response bindings.
|
|
- **Policy:** every R2 requires at least explicit confirmation; every R3 requires strong confirmation. Auth/session-sensitive operations use dedicated flow/replay protections.
|
|
- **Phase 0.3 真实响应样本 disposition:** the per-operation `responseFixtureStatus=pending-phase-0.3` value is retained as a frozen Phase 0.2 claim and is deprecated for current coverage decisions. The authoritative current value is `runtimeFixtureStatus` in `packages/operation-registry/src/acceptance-58e2204.ts`, derived from the collector selection and real fixture manifest. Static evidence is not a runtime fixture.
|
|
|
|
## Whole-file snapshot SHA-256
|
|
|
|
See `upstream-58e2204/manifest.json`; it is machine-verified on every test run and is the authoritative complete whole-file SHA list.
|
|
|
|
## All operations
|
|
|
|
| Method | Path | operationId | Domain | uiOwner | Handler | Evidence level | Content-Type | Idempotency | Risk / policy | Request contract | Response contract | Evidence digest |
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
| `GET` | `/api/device` | `getDevice` | device-system | overview | `get_device_info` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1076-1090 | ApiResponse<DeviceInfoResponse> success payload/error envelope; success/error payload evidenced by ApiResponse<DeviceInfoResponse>; exact handler backend/src/handlers.rs:1076-1090 | `7b4d3ba9a85015e5` |
|
|
| `GET` | `/api/sim` | `getSim` | sim | overview | `get_sim_info` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1126-1145 | success/error payload evidenced by ApiResponse<SimInfoResponse>; exact handler backend/src/handlers.rs:1126-1145 | `db5280e4e6d37c43` |
|
|
| `POST` | `/api/sim/details/refresh` | `postSimDetailsRefresh` | sim | overview | `refresh_sim_details_handler` | route+handler | none | non-idempotent | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1148-1164 | dynamic-json construction in exact handler backend/src/handlers.rs:1148-1164; field shape is implementation evidence only | `ab04a42ae36c3495` |
|
|
| `POST` | `/api/sim/cache` | `postSimCache` | sim | overview | `update_sim_cache_handler` | route+handler+model | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor UpdateSimCacheRequest fields [phone_number:Option<String>, sms_center:Option<String>] (models.rs:1036); exact handler backend/src/handlers.rs:1167-1213 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1167-1213 | `b2b5f366ff8b133d` |
|
|
| `GET` | `/api/network` | `getNetwork` | cellular | cellular | `get_network_info` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1218-1232 | ApiResponse<NetworkInfoResponse> success payload/error envelope; success/error payload evidenced by ApiResponse<NetworkInfoResponse>; exact handler backend/src/handlers.rs:1218-1232 | `5d02208a69b79024` |
|
|
| `GET` | `/api/cells` | `getCells` | cellular | cellular | `get_cells` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1235-1249 | success/error payload evidenced by ApiResponse<CellsResponse>; exact handler backend/src/handlers.rs:1235-1249 | `2a0eb9db873a461a` |
|
|
| `POST` | `/api/cell-monitor/start` | `postCellMonitorStart` | cellular | cellular | `start_cell_monitor_handler` | route+handler | none | conditional | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1252-1282 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1252-1282 | `c70d5916a800de22` |
|
|
| `POST` | `/api/cell-monitor/stop` | `postCellMonitorStop` | cellular | cellular | `stop_cell_monitor_handler` | route+handler | none | conditional | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1285-1312 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1285-1312 | `81303fb59efb78b8` |
|
|
| `GET` | `/api/radio-mode` | `getRadioMode` | radio-lock | cellular | `get_radio_mode_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1315-1329 | success/error payload evidenced by ApiResponse<RadioModeResponse>; exact handler backend/src/handlers.rs:1315-1329 | `caba610280c2850f` |
|
|
| `POST` | `/api/radio-mode` | `postRadioMode` | radio-lock | cellular | `set_radio_mode_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor RadioModeRequest fields [mode:RadioMode] (models.rs:351); exact handler backend/src/handlers.rs:1332-1352 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1332-1352 | `c41c6134fe1f28b0` |
|
|
| `GET` | `/api/band-lock` | `getBandLock` | radio-lock | cellular | `get_band_lock_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1355-1369 | success/error payload evidenced by ApiResponse<BandLockStatus>; exact handler backend/src/handlers.rs:1355-1369 | `6130c68b619423b3` |
|
|
| `POST` | `/api/band-lock` | `postBandLock` | radio-lock | cellular | `set_band_lock_handler` | route+handler+model+bruno | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor BandLockRequest fields [lte_fdd_bands:Vec<u32>, lte_tdd_bands:Vec<u32>, nr_fdd_bands:Vec<u32>, nr_tdd_bands:Vec<u32>] (models.rs:377); exact handler backend/src/handlers.rs:1372-1392 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1372-1392 | `04504f8b9b2d528e` |
|
|
| `GET` | `/api/network/interfaces` | `getNetworkInterfaces` | device-network | device-network | `get_network_interfaces_info` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1619-1644 | success/error payload evidenced by ApiResponse<NetworkInterfacesResponse>; exact handler backend/src/handlers.rs:1619-1644 | `a1ac88c365ed70bf` |
|
|
| `GET` | `/api/network/connection-addresses` | `getNetworkConnectionAddresses` | device-network | device-network | `get_network_connection_addresses` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1647-1666 | success/error payload evidenced by ApiResponse<ConnectionAddressesResponse>; exact handler backend/src/handlers.rs:1647-1666 | `a5f28ff95121c097` |
|
|
| `GET` | `/api/device-network/ddns/config` | `getDeviceNetworkDdnsConfig` | device-network | device-network | `get_device_ddns_config_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1669-1679 | dynamic-json construction in exact handler backend/src/handlers.rs:1669-1679; field shape is implementation evidence only | `4ec8e855d61695c9` |
|
|
| `POST` | `/api/device-network/ddns/config` | `postDeviceNetworkDdnsConfig` | device-network | device-network | `set_device_ddns_config_handler` | route+handler+model+bruno | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor crate::config::DdnsConfig fields [enabled:bool, provider:String, access_id:String, access_secret:String, interval_seconds:u64, ttl:u32, ipv4:DdnsIpConfig, ipv6:DdnsIpConfig] (config.rs:634); exact handler backend/src/handlers.rs:1682-1721 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1682-1721 | `10137722721a3ef9` |
|
|
| `GET` | `/api/device-network/ddns/status` | `getDeviceNetworkDdnsStatus` | device-network | device-network | `get_device_ddns_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1750-1757 | dynamic-json construction in exact handler backend/src/handlers.rs:1750-1757; field shape is implementation evidence only | `02494bf7928a9a23` |
|
|
| `POST` | `/api/device-network/ddns/sync` | `postDeviceNetworkDdnsSync` | device-network | device-network | `sync_device_ddns_handler` | route+handler+bruno | none | conditional | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1760-1781 | success/error payload evidenced by ApiResponse<DdnsSyncResponse>; exact handler backend/src/handlers.rs:1760-1781 | `43cf9573e2b43aaf` |
|
|
| `GET` | `/api/device-network/ddns/logs` | `getDeviceNetworkDdnsLogs` | device-network | device-network | `get_device_ddns_logs_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1784-1790 | dynamic-json construction in exact handler backend/src/handlers.rs:1784-1790; field shape is implementation evidence only | `ac80f3ada641ca13` |
|
|
| `POST` | `/api/device-network/ddns/logs/clear` | `postDeviceNetworkDdnsLogsClear` | device-network | device-network | `clear_device_ddns_logs_handler` | route+handler+bruno | none | conditional | R2 / job / confirm:explicit / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1793-1802 | dynamic-json construction in exact handler backend/src/handlers.rs:1793-1802; field shape is implementation evidence only | `8ebb7d7cfe772a4e` |
|
|
| `GET` | `/api/device-network/wlan/status` | `getDeviceNetworkWlanStatus` | device-network | device-network | `get_device_wlan_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1805-1819 | success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1805-1819 | `66741c07471de1f7` |
|
|
| `POST` | `/api/device-network/wlan/enabled` | `postDeviceNetworkWlanEnabled` | device-network | device-network | `set_device_wlan_enabled_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor WlanEnabledRequest fields [enabled:bool] (models.rs:606); exact handler backend/src/handlers.rs:1822-1841 | success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1822-1841 | `b6cc1238ca609208` |
|
|
| `POST` | `/api/device-network/wlan/scan` | `postDeviceNetworkWlanScan` | device-network | device-network | `scan_device_wlan_handler` | route+handler+bruno | none | non-idempotent | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1844-1858 | success/error payload evidenced by ApiResponse<WlanScanResponse>; exact handler backend/src/handlers.rs:1844-1858 | `de90691d7c57a4e9` |
|
|
| `GET` | `/api/device-network/wlan/profiles` | `getDeviceNetworkWlanProfiles` | device-network | device-network | `get_device_wlan_profiles_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1861-1875 | success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1861-1875 | `caadf1fc1c436c63` |
|
|
| `POST` | `/api/device-network/wlan/forget` | `postDeviceNetworkWlanForget` | device-network | device-network | `forget_device_wlan_handler` | route+handler+model+bruno | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor WlanForgetRequest fields [uuid:String, connection_id:String] (models.rs:635); exact handler backend/src/handlers.rs:1878-1897 | success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1878-1897 | `f5142f819f6da442` |
|
|
| `POST` | `/api/device-network/wlan/connect` | `postDeviceNetworkWlanConnect` | device-network | device-network | `connect_device_wlan_handler` | route+handler+model+bruno | application/json | non-idempotent | R1 / command / confirm:none / registeredOperation | body extractor WlanConnectRequest fields [ssid:String, password:String, auto_join:bool] (models.rs:611); exact handler backend/src/handlers.rs:1900-1955 | success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1900-1955 | `9c422666a3db49cd` |
|
|
| `POST` | `/api/device-network/wlan/disconnect` | `postDeviceNetworkWlanDisconnect` | device-network | device-network | `disconnect_device_wlan_handler` | route+handler+bruno | none | non-idempotent | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1958-1991 | success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1958-1991 | `719a709dc8509a35` |
|
|
| `POST` | `/api/device-network/wlan/profile` | `postDeviceNetworkWlanProfile` | device-network | device-network | `save_device_wlan_profile_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor WlanProfileRequest fields [connection_id:String, auto_join:Option<bool>, ipv4_mode:Option<String>, ipv4_address:Option<String>, ipv4_prefix:Option<u8>, ipv4_gateway:Option<String>] (models.rs:620); exact handler backend/src/handlers.rs:1994-2013 | success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1994-2013 | `b3180f55af718c04` |
|
|
| `GET` | `/api/network/signal-strength` | `getNetworkSignalStrength` | cellular | cellular | `get_signal_strength_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2016-2030 | success/error payload evidenced by ApiResponse<SignalStrengthResponse>; exact handler backend/src/handlers.rs:2016-2030 | `2c04c31da8b4160b` |
|
|
| `GET` | `/api/location/cell-info` | `getLocationCellInfo` | cellular | cellular | `get_cell_location_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1395-1409 | success/error payload evidenced by ApiResponse<CellLocationResponse>; exact handler backend/src/handlers.rs:1395-1409 | `fc748f05e03bf684` |
|
|
| `GET` | `/api/network/operators` | `getNetworkOperators` | cellular | cellular | `get_network_operators` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1412-1426 | success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1412-1426 | `d3b30db8a501b92a` |
|
|
| `GET` | `/api/network/operators/scan` | `getNetworkOperatorsScan` | cellular | cellular | `scan_network_operators` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1429-1443 | success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1429-1443 | `4a8bfbd38a943df8` |
|
|
| `POST` | `/api/network/register-manual` | `postNetworkRegisterManual` | cellular | cellular | `register_network_manual` | route+handler+model+bruno | application/json | non-idempotent | R2 / job / confirm:explicit / registeredOperation | body extractor ManualRegisterRequest fields [mccmnc:String] (models.rs:771); exact handler backend/src/handlers.rs:1446-1466 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1446-1466 | `8b78cc782499ff83` |
|
|
| `POST` | `/api/network/register-auto` | `postNetworkRegisterAuto` | cellular | cellular | `register_network_auto` | route+handler+bruno | none | non-idempotent | R2 / job / confirm:explicit / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1469-1486 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1469-1486 | `431aabcc9852603b` |
|
|
| `GET` | `/api/apn` | `getApn` | data-connection | cellular | `get_apn_list_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1489-1504 | success/error payload evidenced by ApiResponse<ApnListResponse>; exact handler backend/src/handlers.rs:1489-1504 | `798953ca7e3857d0` |
|
|
| `POST` | `/api/apn` | `postApn` | data-connection | cellular | `set_apn_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor SetApnRequest fields [context_path:String, apn:Option<String>, protocol:Option<String>, username:Option<String>, password:Option<String>, auth_method:Option<String>] (models.rs:795); exact handler backend/src/handlers.rs:1507-1571 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1507-1571 | `6edced468c5f3bcb` |
|
|
| `GET` | `/api/cell-lock` | `getCellLock` | radio-lock | cellular | `get_cell_lock_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1574-1582 | dynamic-json construction in exact handler backend/src/handlers.rs:1574-1582; field shape is implementation evidence only | `fe4b4aaedc6e5ccf` |
|
|
| `POST` | `/api/cell-lock` | `postCellLock` | radio-lock | cellular | `set_cell_lock_handler` | route+handler+model+bruno | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor CellLockRequest fields [rat:u8, enable:bool, lock_type:u8, pci:Option<u16>, arfcn:Option<u32>] (models.rs:405); exact handler backend/src/handlers.rs:1585-1603 | success/error payload evidenced by ApiResponse<CellLockResult>; exact handler backend/src/handlers.rs:1585-1603 | `29ff2739b7d0b584` |
|
|
| `POST` | `/api/cell-lock/unlock-all` | `postCellLockUnlockAll` | radio-lock | cellular | `unlock_all_cells_handler` | route+handler+bruno | none | conditional | R2 / job / confirm:explicit / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:1606-1616 | dynamic-json construction in exact handler backend/src/handlers.rs:1606-1616; field shape is implementation evidence only | `390162e5ce89c095` |
|
|
| `GET` | `/api/data` | `getData` | data-connection | cellular | `get_data_status` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2035-2062 | success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2035-2062 | `43f00a519bd67c3a` |
|
|
| `POST` | `/api/data` | `postData` | data-connection | cellular | `set_data_status` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor DataConnectionRequest fields [active:bool] (models.rs:234); exact handler backend/src/handlers.rs:2065-2131 | success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2065-2131 | `f1653cfe4442172c` |
|
|
| `GET` | `/api/roaming` | `getRoaming` | data-connection | cellular | `get_roaming_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2172-2193 | success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2172-2193 | `687ff0cdb729645a` |
|
|
| `POST` | `/api/roaming` | `postRoaming` | data-connection | cellular | `set_roaming_status_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor RoamingRequest fields [allowed:bool] (models.rs:244); exact handler backend/src/handlers.rs:2196-2247 | success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2196-2247 | `b18b5c87eb24ccc9` |
|
|
| `GET` | `/api/airplane-mode` | `getAirplaneMode` | data-connection | cellular | `get_airplane_mode_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2315-2329 | success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2315-2329 | `243c2a63fd99d45c` |
|
|
| `POST` | `/api/airplane-mode` | `postAirplaneMode` | data-connection | cellular | `set_airplane_mode_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor AirplaneModeRequest fields [enabled:bool] (models.rs:255); exact handler backend/src/handlers.rs:2250-2312 | success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2250-2312 | `5efb8a55c495ea0b` |
|
|
| `POST` | `/api/baseband/restart` | `postBasebandRestart` | data-connection | cellular | `restart_baseband_handler` | route+handler | none | non-idempotent | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2133-2159 | success/error payload evidenced by ApiResponse<BasebandRestartResponse>; exact handler backend/src/handlers.rs:2133-2159 | `ef18782a4b21d5b4` |
|
|
| `GET` | `/api/baseband/restart/status` | `getBasebandRestartStatus` | data-connection | cellular | `get_baseband_restart_status_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2161-2169 | dynamic-json construction in exact handler backend/src/handlers.rs:2161-2169; field shape is implementation evidence only | `736cc766f31d5d71` |
|
|
| `GET` | `/api/work-mode` | `getWorkMode` | workmode-esim | esim | `get_work_mode_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:352-365 | dynamic-json construction in exact handler backend/src/handlers.rs:352-365; field shape is implementation evidence only | `f2d3dca3f43326f8` |
|
|
| `POST` | `/api/work-mode` | `postWorkMode` | workmode-esim | esim | `set_work_mode_handler` | route+handler+model | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor WorkModeRequest fields [mode:WorkMode, confirm:bool] (models.rs:57); exact handler backend/src/handlers.rs:368-405 | success/error payload evidenced by ApiResponse<WorkModeResponse>; exact handler backend/src/handlers.rs:368-405 | `cf17a54e0df74a9d` |
|
|
| `GET` | `/api/esim/config` | `getEsimConfig` | workmode-esim | esim | `get_esim_config_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:456-462 | dynamic-json construction in exact handler backend/src/handlers.rs:456-462; field shape is implementation evidence only | `1be6b526e1a78451` |
|
|
| `POST` | `/api/esim/config` | `postEsimConfig` | workmode-esim | esim | `set_esim_config_handler` | route+handler+model | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor crate::config::EsimConfig fields [lpac_path:String, custom_memory_total_kb:Option<u32>] (config.rs:1660); exact handler backend/src/handlers.rs:465-482 | dynamic-json construction in exact handler backend/src/handlers.rs:465-482; field shape is implementation evidence only | `b497f06687977d9f` |
|
|
| `GET` | `/api/esim/lpac/status` | `getEsimLpacStatus` | workmode-esim | esim | `get_esim_lpac_status_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:408-416 | dynamic-json construction in exact handler backend/src/handlers.rs:408-416; field shape is implementation evidence only | `a4d5143d1f83089b` |
|
|
| `POST` | `/api/esim/lpac/repair` | `postEsimLpacRepair` | workmode-esim | esim | `repair_esim_lpac_handler` | route+handler+model | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor EsimLpacRepairRequest fields [proxy_prefix:Option<String>, asset_url:Option<String>] (models.rs:153); exact handler backend/src/handlers.rs:419-453 | dynamic-json construction in exact handler backend/src/handlers.rs:419-453; field shape is implementation evidence only | `4d88af6126732e94` |
|
|
| `GET` | `/api/esim/euicc` | `getEsimEuicc` | workmode-esim | esim | `get_esim_euicc_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | query extractor std::collections::HashMap<String, String>; exact exact handler backend/src/handlers.rs:485-521 | dynamic-json construction in exact handler backend/src/handlers.rs:485-521; field shape is implementation evidence only | `7bb950b7fe21268d` |
|
|
| `GET` | `/api/esim/profiles` | `getEsimProfiles` | workmode-esim | esim | `get_esim_profiles_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | query extractor std::collections::HashMap<String, String>; exact exact handler backend/src/handlers.rs:524-598 | success/error payload evidenced by ApiResponse<EsimProfilesResponse>; exact handler backend/src/handlers.rs:524-598 | `07f60eddaa9d20ff` |
|
|
| `POST` | `/api/esim/profiles` | `postEsimProfiles` | workmode-esim | esim | `download_esim_profile_handler` | route+handler+model | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor EsimDownloadRequest fields [smdp:String, matching_id:String, confirmation_code:Option<String>, imei:Option<String>] (models.rs:174); exact handler backend/src/handlers.rs:803-1071 | success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:803-1071 | `fe41273a15be55b3` |
|
|
| `POST` | `/api/esim/profiles/{iccid}/enable` | `postEsimProfilesIccidEnable` | workmode-esim | esim | `enable_esim_profile_handler` | route+handler | none | conditional | R1 / command / confirm:none / registeredOperation | path extractor String; exact handler backend/src/handlers.rs:601-726 | dynamic-json construction in exact handler backend/src/handlers.rs:601-726; field shape is implementation evidence only | `d54705546ca3bf2a` |
|
|
| `POST` | `/api/esim/profiles/{iccid}/rename` | `postEsimProfilesIccidRename` | workmode-esim | esim | `rename_esim_profile_handler` | route+handler+model | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor EsimRenameRequest fields [name:String] (models.rs:169); path extractor String; exact handler backend/src/handlers.rs:729-750 | success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:729-750 | `0d5cb68158e1e6c2` |
|
|
| `DELETE` | `/api/esim/profiles/{iccid}` | `deleteEsimProfilesIccid` | workmode-esim | esim | `delete_esim_profile_handler` | route+handler | none | idempotent | R3 / job / confirm:strong / registeredOperation | path extractor String; exact handler backend/src/handlers.rs:753-780 | dynamic-json construction in exact handler backend/src/handlers.rs:753-780; field shape is implementation evidence only | `8ad25b4826f75d27` |
|
|
| `GET` | `/api/calls` | `getCalls` | calls | calls | `get_calls_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2634-2655 | success/error payload evidenced by ApiResponse<CallListResponse>; exact handler backend/src/handlers.rs:2634-2655 | `21e77021b749876b` |
|
|
| `POST` | `/api/call/dial` | `postCallDial` | calls | calls | `dial_call_handler` | route+handler+model+bruno | application/json | non-idempotent | R1 / command / confirm:none / registeredOperation | body extractor MakeCallRequest fields [phone_number:String] (models.rs:810); exact handler backend/src/handlers.rs:2657-2689 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2657-2689 | `c440bb90bb4373b3` |
|
|
| `POST` | `/api/call/hangup` | `postCallHangup` | calls | calls | `hangup_call_handler` | route+handler+model+bruno | application/json | non-idempotent | R1 / command / confirm:none / registeredOperation | body extractor HangupCallRequest fields [path:String] (models.rs:830); exact handler backend/src/handlers.rs:2691-2725 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2691-2725 | `cffdc6b2f949af4d` |
|
|
| `POST` | `/api/call/hangup-all` | `postCallHangupAll` | calls | calls | `hangup_all_calls_handler` | route+handler+bruno | none | non-idempotent | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2727-2760 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2727-2760 | `3af8fab7bb4c0437` |
|
|
| `POST` | `/api/call/answer` | `postCallAnswer` | calls | calls | `answer_call_handler` | route+handler+model+bruno | application/json | non-idempotent | R1 / command / confirm:none / registeredOperation | body extractor HangupCallRequest fields [path:String] (models.rs:830); exact handler backend/src/handlers.rs:2762-2789 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2762-2789 | `cfcda6600d9ba27c` |
|
|
| `GET` | `/api/call/volume` | `getCallVolume` | calls | calls | `get_call_volume_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2899-2906 | success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2899-2906 | `4f96c358e70ba5b3` |
|
|
| `POST` | `/api/call/volume` | `postCallVolume` | calls | calls | `set_call_volume_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor SetCallVolumeRequest fields [speaker_volume:Option<u8>, microphone_volume:Option<u8>, muted:Option<bool>] (models.rs:856); exact handler backend/src/handlers.rs:2908-2922 | success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2908-2922 | `9f2e624358e53aaf` |
|
|
| `GET` | `/api/call/forwarding` | `getCallForwarding` | calls | calls | `get_call_forwarding_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2924-2931 | success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2924-2931 | `f7916eb4c5c484e5` |
|
|
| `POST` | `/api/call/forwarding` | `postCallForwarding` | calls | calls | `set_call_forwarding_handler` | route+handler+model+bruno | application/json | conditional | R1 / command / confirm:none / registeredOperation | body extractor SetCallForwardingRequest fields [forward_type:String, number:String, timeout:Option<u16>] (models.rs:891); exact handler backend/src/handlers.rs:2933-2943 | success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2933-2943 | `ddc8b848bccd96aa` |
|
|
| `GET` | `/api/call/settings` | `getCallSettings` | calls | calls | `get_call_settings_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2852-2866 | success/error payload evidenced by ApiResponse<CallSettingsResponse>; exact handler backend/src/handlers.rs:2852-2866 | `893ccecb6c077f7e` |
|
|
| `POST` | `/api/call/settings` | `postCallSettings` | calls | calls | `set_call_settings_handler` | route+handler+model+bruno | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor SetCallSettingRequest fields [property:String, value:String] (models.rs:875); exact handler backend/src/handlers.rs:2868-2897 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2868-2897 | `55ab650b3c53b78a` |
|
|
| `GET` | `/api/call/history` | `getCallHistory` | calls | calls | `get_call_history_handler` | route+handler+model | none | safe | R0 / query / confirm:none / registeredOperation | query extractor CallHistoryRequest fields [limit:i64, offset:i64] (models.rs:835); exact handler backend/src/handlers.rs:2791-2813 | Rust return (StatusCode, Json<ApiResponse<CallHistoryResponse>>); exact handler backend/src/handlers.rs:2791-2813 | `1def94db4c3d848e` |
|
|
| `DELETE` | `/api/call/history/{id}` | `deleteCallHistoryId` | calls | calls | `delete_call_history_handler` | route+handler+bruno | none | idempotent | R3 / job / confirm:strong / registeredOperation | path extractor i64; exact handler backend/src/handlers.rs:2815-2832 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2815-2832 | `defa60d157769310` |
|
|
| `POST` | `/api/call/history/clear` | `postCallHistoryClear` | calls | calls | `clear_call_history_handler` | route+handler+bruno | none | conditional | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2834-2850 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2834-2850 | `b0e0002012256b5d` |
|
|
| `GET` | `/api/ims/status` | `getImsStatus` | calls | calls | `get_ims_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2945-2952 | success/error payload evidenced by ApiResponse<ImsStatusResponse>; exact handler backend/src/handlers.rs:2945-2952 | `e533ac5c9e7bc694` |
|
|
| `GET` | `/api/voicemail/status` | `getVoicemailStatus` | calls | calls | `get_voicemail_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2954-2961 | success/error payload evidenced by ApiResponse<VoicemailStatusResponse>; exact handler backend/src/handlers.rs:2954-2961 | `837b8fbc971099b9` |
|
|
| `POST` | `/api/sms/send` | `postSmsSend` | messages | messages | `send_sms_handler` | route+handler+model+bruno | application/json | non-idempotent | R2 / job / confirm:explicit / registeredOperation | body extractor SendSmsRequest fields [phone_number:String, content:String] (models.rs:912); exact handler backend/src/handlers.rs:2373-2404 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2373-2404 | `6cd7eaa5e1a1f939` |
|
|
| `GET` | `/api/sms/list` | `getSmsList` | messages | messages | `get_sms_list_handler` | route+handler+model | none | safe | R0 / query / confirm:none / registeredOperation | query extractor SmsListRequest fields [limit:i64, offset:i64, direction:Option<String>] (models.rs:918); exact handler backend/src/handlers.rs:2407-2434 | Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2407-2434 | `abbc14adc02b2f5f` |
|
|
| `GET` | `/api/sms/conversation` | `getSmsConversation` | messages | messages | `get_sms_conversation_handler` | route+handler+model | none | safe | R0 / query / confirm:none / registeredOperation | query extractor SmsConversationRequest fields [phone_number:String, limit:i64] (models.rs:927); exact handler backend/src/handlers.rs:2437-2458 | Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2437-2458 | `e0747d062889fe8c` |
|
|
| `GET` | `/api/sms/stats` | `getSmsStats` | messages | messages | `get_sms_stats_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2461-2477 | Rust return (StatusCode, Json<ApiResponse<SmsStatsResponse>>); exact handler backend/src/handlers.rs:2461-2477 | `bd62f399815cb0d1` |
|
|
| `POST` | `/api/sms/batch-delete` | `postSmsBatchDelete` | messages | messages | `delete_sms_batch_handler` | route+handler+model | application/json | conditional | R3 / job / confirm:strong / registeredOperation | body extractor SmsBatchDeleteRequest fields [ids:Vec<i64>, phone_numbers:Vec<String>] (models.rs:934); exact handler backend/src/handlers.rs:2551-2578 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2551-2578 | `94c5c83487401203` |
|
|
| `DELETE` | `/api/sms/conversation/{phone_number}` | `deleteSmsConversationPhoneNumber` | messages | messages | `delete_sms_conversation_handler` | route+handler | none | idempotent | R3 / job / confirm:strong / registeredOperation | path extractor String; exact handler backend/src/handlers.rs:2528-2548 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2528-2548 | `8abd673088da8720` |
|
|
| `DELETE` | `/api/sms/message/{id}` | `deleteSmsMessageId` | messages | messages | `delete_sms_message_handler` | route+handler | none | idempotent | R3 / job / confirm:strong / registeredOperation | path extractor i64; exact handler backend/src/handlers.rs:2508-2525 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2508-2525 | `8edc9f89854b5c8d` |
|
|
| `POST` | `/api/sms/clear` | `postSmsClear` | messages | messages | `clear_sms_handler` | route+handler+bruno | none | conditional | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:2480-2505 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2480-2505 | `8c536214c43b65fc` |
|
|
| `GET` | `/api/stats` | `getStats` | device-system | overview | `get_system_stats` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3272-3288 | dynamic-json construction in exact handler backend/src/handlers.rs:3272-3288; field shape is implementation evidence only | `94834f33d10be4b6` |
|
|
| `GET` | `/api/stats/cpu` | `getStatsCpu` | device-system | overview | `get_cpu_info` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3291-3302 | success/error payload evidenced by ApiResponse<CpuInfo>; exact handler backend/src/handlers.rs:3291-3302 | `9f24be45c5c8df7a` |
|
|
| `GET` | `/api/connectivity` | `getConnectivity` | device-system | overview | `get_connectivity_check` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3305-3322 | Rust return (StatusCode, Json<ApiResponse<ConnectivityCheckResponse>>); exact handler backend/src/handlers.rs:3305-3322 | `42ba5f81f052b992` |
|
|
| `POST` | `/api/system/reboot` | `postSystemReboot` | device-system | overview | `system_reboot` | route+handler+model+bruno | application/json | non-idempotent | R3 / job / confirm:strong / registeredOperation | body extractor SystemRebootRequest fields [delay_seconds:u32] (models.rs:422); exact handler backend/src/handlers.rs:3381-3406 | dynamic-json construction in exact handler backend/src/handlers.rs:3381-3406; field shape is implementation evidence only | `362737633fd01332` |
|
|
| `POST` | `/api/service/restart` | `postServiceRestart` | device-system | overview | `restart_service_handler` | route+handler | none | non-idempotent | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3578-3601 | dynamic-json construction in exact handler backend/src/handlers.rs:3578-3601; field shape is implementation evidence only | `712a81c6cca94e0c` |
|
|
| `GET` | `/api/notifications/config` | `getNotificationsConfig` | notifications | notifications | `get_notification_config_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3641-3652 | Rust return ( StatusCode, Json<ApiResponse<crate::config::NotificationConfig>>, ); exact handler backend/src/handlers.rs:3641-3652 | `96344b8b2d1b8818` |
|
|
| `POST` | `/api/notifications/config` | `postNotificationsConfig` | notifications | notifications | `set_notification_config_handler` | route+handler+model+bruno | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor crate::config::NotificationConfig fields [version:u8, channels:Vec<NotificationChannelInstance>, rules:Vec<NotificationRule>, log_cleanup:NotificationLogCleanupConfig] (config.rs:548); exact handler backend/src/handlers.rs:3655-3672 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3655-3672 | `5fc4fbfff68050e0` |
|
|
| `POST` | `/api/notifications/test/{channel}` | `postNotificationsTestChannel` | notifications | notifications | `test_notification_channel_handler` | route+handler | none | non-idempotent | R2 / job / confirm:explicit / registeredOperation | path extractor String; exact handler backend/src/handlers.rs:3675-3704 | Rust return ( StatusCode, Json<ApiResponse<crate::models::WebhookTestResponse>>, ); exact handler backend/src/handlers.rs:3675-3704 | `df28427afab1724a` |
|
|
| `GET` | `/api/notifications/logs` | `getNotificationsLogs` | notifications | notifications | `get_notification_logs_handler` | route+handler+model | none | safe | R0 / query / confirm:none / registeredOperation | query extractor NotificationLogQuery fields [event_type:String, status:String, q:String, start_date:String, end_date:String, limit:i64, offset:i64] (handlers.rs:3607); exact handler backend/src/handlers.rs:3709-3734 | Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationLogsResponse>>, ); exact handler backend/src/handlers.rs:3709-3734 | `da933f5e679cb9e1` |
|
|
| `POST` | `/api/notifications/logs/clear` | `postNotificationsLogsClear` | notifications | notifications | `clear_notification_logs_handler` | route+handler | none | conditional | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3737-3760 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3737-3760 | `04de36a4268a3ab6` |
|
|
| `GET` | `/api/notifications/queue` | `getNotificationsQueue` | notifications | notifications | `get_notification_queue_handler` | route+handler+model | none | safe | R0 / query / confirm:none / registeredOperation | query extractor NotificationQueueQuery fields [limit:i64] (notification_queue.rs:14); exact handler backend/src/notification_queue.rs:24-41 | Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationQueueResponse>>, ); exact handler backend/src/notification_queue.rs:24-41 | `babc88061bcb3386` |
|
|
| `POST` | `/api/notifications/queue/retry-all` | `postNotificationsQueueRetryAll` | notifications | notifications | `retry_all_notification_queue_handler` | route+handler | none | non-idempotent | R2 / job / confirm:explicit / registeredOperation | none; no body/query/path extractor; exact handler backend/src/notification_queue.rs:84-100 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:84-100 | `f58e1be1cbf6a022` |
|
|
| `POST` | `/api/notifications/queue/clear` | `postNotificationsQueueClear` | notifications | notifications | `clear_notification_queue_handler` | route+handler | none | conditional | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/notification_queue.rs:103-119 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:103-119 | `2501068f6741e02e` |
|
|
| `DELETE` | `/api/notifications/queue/{id}` | `deleteNotificationsQueueId` | notifications | notifications | `delete_notification_queue_item_handler` | route+handler | none | idempotent | R3 / job / confirm:strong / registeredOperation | path extractor i64; exact handler backend/src/notification_queue.rs:64-81 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:64-81 | `6b845ad2da8f319d` |
|
|
| `POST` | `/api/notifications/queue/{id}/retry` | `postNotificationsQueueIdRetry` | notifications | notifications | `retry_notification_queue_item_handler` | route+handler | none | non-idempotent | R2 / job / confirm:explicit / registeredOperation | path extractor i64; exact handler backend/src/notification_queue.rs:44-61 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:44-61 | `068be5777b9d8f78` |
|
|
| `GET` | `/api/automation/config` | `getAutomationConfig` | automation | automation | `get_automation_config_handler` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3968-3979 | Rust return ( StatusCode, Json<ApiResponse<crate::config::AutomationConfig>>, ); exact handler backend/src/handlers.rs:3968-3979 | `eed75ffb9545cf5e` |
|
|
| `POST` | `/api/automation/config` | `postAutomationConfig` | automation | automation | `set_automation_config_handler` | route+handler+model | application/json | conditional | R2 / job / confirm:explicit / registeredOperation | body extractor crate::config::AutomationConfig fields [enabled:bool, tasks:Vec<AutomationTask>] (config.rs:1394); exact handler backend/src/handlers.rs:3982-3999 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3982-3999 | `7f324660f7624a52` |
|
|
| `GET` | `/api/automation/logs` | `getAutomationLogs` | automation | automation | `get_automation_logs_handler` | route+handler+model | none | safe | R0 / query / confirm:none / registeredOperation | query extractor AutomationLogQuery fields [task_type:String, status:String, q:String, start_date:String, end_date:String, limit:i64, offset:i64] (handlers.rs:3938); exact handler backend/src/handlers.rs:4002-4027 | Rust return ( StatusCode, Json<ApiResponse<crate::db::AutomationLogsResponse>>, ); exact handler backend/src/handlers.rs:4002-4027 | `b6cacc95a374e31a` |
|
|
| `POST` | `/api/automation/logs/clear` | `postAutomationLogsClear` | automation | automation | `clear_automation_logs_handler` | route+handler | none | conditional | R3 / job / confirm:strong / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:4030-4053 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4030-4053 | `0912300e74c831ac` |
|
|
| `POST` | `/api/automation/test/{task_id}` | `postAutomationTestTaskId` | automation | automation | `test_automation_task_handler` | route+handler | none | non-idempotent | R2 / job / confirm:explicit / registeredOperation | path extractor String; exact handler backend/src/handlers.rs:4056-4146 | Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4056-4146 | `091db790a51ab185` |
|
|
| `GET` | `/api/ota/status` | `getOtaStatus` | ota | ota | `get_ota_status_handler` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3763-3769 | dynamic-json construction in exact handler backend/src/handlers.rs:3763-3769; field shape is implementation evidence only | `89d8afa94cbad60c` |
|
|
| `POST` | `/api/ota/upload` | `postOtaUpload` | ota | ota | `upload_ota_handler` | route+handler | application/octet-stream | non-idempotent | R3 / job / confirm:strong / registeredOperation | bytes extractor axum::body::Bytes; exact exact handler backend/src/handlers.rs:3772-3792 | ApiResponse<OtaUploadResponse> success payload/error envelope; success/error payload evidenced by ApiResponse<OtaUploadResponse>; exact handler backend/src/handlers.rs:3772-3792 | `becfb7dc7e9c1355` |
|
|
| `POST` | `/api/ota/latest-release` | `postOtaLatestRelease` | ota | ota | `get_latest_ota_release_handler` | route+handler+model | application/json | non-idempotent | R1 / command / confirm:none / registeredOperation | body extractor crate::models::OtaOnlinePrepareRequest fields [proxy_prefix:Option<String>] (models.rs:986); exact handler backend/src/handlers.rs:3795-3825 | success/error payload evidenced by ApiResponse<crate::models::OtaLatestReleaseResponse>; exact handler backend/src/handlers.rs:3795-3825 | `61083109860620e5` |
|
|
| `POST` | `/api/ota/online-prepare` | `postOtaOnlinePrepare` | ota | ota | `prepare_online_ota_handler` | route+handler+model | application/json | non-idempotent | R2 / job / confirm:explicit / registeredOperation | body extractor crate::models::OtaOnlinePrepareRequest fields [proxy_prefix:Option<String>] (models.rs:986); exact handler backend/src/handlers.rs:3828-3889 | success/error payload evidenced by ApiResponse<crate::models::OtaUploadResponse>; exact handler backend/src/handlers.rs:3828-3889 | `6d70f80714b7f004` |
|
|
| `POST` | `/api/ota/apply` | `postOtaApply` | ota | ota | `apply_ota_handler` | route+handler+model+bruno | application/json | non-idempotent | R3 / job / confirm:strong / registeredOperation | body extractor crate::models::OtaApplyRequest fields [restart_now:bool] (models.rs:1030); exact handler backend/src/handlers.rs:3892-3911 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3892-3911 | `46c24f90fdb71e52` |
|
|
| `POST` | `/api/ota/cancel` | `postOtaCancel` | ota | ota | `cancel_ota_handler` | route+handler+bruno | none | conditional | R1 / command / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:3914-3931 | success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3914-3931 | `9085b81dc3f85886` |
|
|
| `POST` | `/api/auth/password` | `postAuthPassword` | instances-auth | settings-instance | `auth::change_password` | route+handler+model | application/json | conditional | R3 / job / confirm:strong / dedicatedFlow | body extractor ChangePasswordRequest fields [new_password:String] (auth.rs:59); exact handler backend/src/auth.rs:491-553 | success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:491-553 | `ec7372792586fd2a` |
|
|
| `GET` | `/api/auth/settings` | `getAuthSettings` | instances-auth | settings-instance | `auth::get_settings` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/auth.rs:555-570 | Rust return (StatusCode, Json<ApiResponse<AuthSettingsResponse>>); exact handler backend/src/auth.rs:555-570 | `035bdb5afbefdcb8` |
|
|
| `POST` | `/api/auth/settings` | `postAuthSettings` | instances-auth | settings-instance | `auth::set_settings` | route+handler+model | application/json | conditional | R2 / job / confirm:explicit / dedicatedFlow | body extractor SecurityConfig fields [password_protection_enabled:bool, password_min_length:u8, password_require_letters:bool, password_require_digits:bool, password_require_symbols:bool, session_ttl_seconds:i64, idle_timeout_seconds:i64] (config.rs:615); exact handler backend/src/auth.rs:572-640 | success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:572-640 | `10b564c9437defd5` |
|
|
| `GET` | `/api/health` | `getHealth` | instances-auth | instances-new | `health_check` | route+handler+bruno | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/handlers.rs:65-75 | dynamic-json construction in exact handler backend/src/handlers.rs:65-75; field shape is implementation evidence only | `e169391fd5f376b8` |
|
|
| `GET` | `/api/auth/status` | `getAuthStatus` | instances-auth | instances-new | `auth::status` | route+handler | none | safe | R0 / query / confirm:none / registeredOperation | none; no body/query/path extractor; exact handler backend/src/auth.rs:345-364 | Rust return (StatusCode, Json<ApiResponse<AuthStatusResponse>>); exact handler backend/src/auth.rs:345-364 | `0ee683548f9f8036` |
|
|
| `POST` | `/api/auth/setup` | `postAuthSetup` | instances-auth | instances-new | `auth::setup` | route+handler+model | application/json | conditional | R3 / job / confirm:strong / dedicatedFlow | body extractor LoginRequest fields [password:String] (auth.rs:54); exact handler backend/src/auth.rs:366-427 | success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:366-427 | `1c0c5eb2cc77326d` |
|
|
| `POST` | `/api/auth/login` | `postAuthLogin` | instances-auth | instances-new | `auth::login` | route+handler+model | application/json | conditional | R1 / command / confirm:none / dedicatedFlow | body extractor LoginRequest fields [password:String] (auth.rs:54); exact handler backend/src/auth.rs:429-489 | success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:429-489 | `defd9444410e5b12` |
|
|
| `POST` | `/api/auth/logout` | `postAuthLogout` | instances-auth | settings-instance | `auth::logout` | route+handler | none | conditional | R1 / command / confirm:none / dedicatedFlow | none body; HeaderMap carries simadmin_session cookie; exact handler backend/src/auth.rs:642-655; cookie name backend/src/auth.rs:43-43 | dynamic-json construction in exact handler backend/src/auth.rs:642-655; field shape is implementation evidence only | `1ccf5c295251b2a2` |
|
|
|
|
## Sensitive-field audit ledger
|
|
|
|
This table is generated from the registry. Each row is an exact directional redaction contract; evidence details remain machine-readable in the registry.
|
|
|
|
| Method | Path | Direction | Sensitive path | Mode | Reason |
|
|
|---|---|---|---|---|---|
|
|
| GET | `/api/sim` | response | `$.response.data.iccid` | mask | SIM/subscriber identifier |
|
|
| GET | `/api/sim` | response | `$.response.data.imsi` | mask | SIM/subscriber identifier |
|
|
| GET | `/api/sim` | response | `$.response.data.phone_numbers` | mask | SIM/subscriber identifier |
|
|
| GET | `/api/sim` | response | `$.response.data.sms_center` | mask | SIM/subscriber identifier |
|
|
| POST | `/api/sim/cache` | request | `$.body.phone_number` | mask | subscriber contact value |
|
|
| POST | `/api/sim/cache` | request | `$.body.sms_center` | mask | subscriber contact value |
|
|
| GET | `/api/device-network/ddns/config` | response | `$.response.data.access_id` | mask | identifier or address |
|
|
| GET | `/api/device-network/ddns/config` | response | `$.response.data.access_secret` | drop | secret or message content |
|
|
| POST | `/api/device-network/ddns/config` | request | `$.body.access_id` | mask | identifier or address |
|
|
| POST | `/api/device-network/ddns/config` | request | `$.body.access_secret` | drop | secret or message content |
|
|
| GET | `/api/device-network/wlan/status` | response | `$.response.data.ssid` | mask | network identifier |
|
|
| GET | `/api/device-network/wlan/status` | response | `$.response.data.ipv4_addresses` | mask | network identifier |
|
|
| GET | `/api/device-network/wlan/status` | response | `$.response.data.ipv6_addresses` | mask | network identifier |
|
|
| POST | `/api/device-network/wlan/scan` | response | `$.response.data.networks[*].ssid` | mask | network identifier |
|
|
| POST | `/api/device-network/wlan/scan` | response | `$.response.data.networks[*].bssid` | mask | network identifier |
|
|
| GET | `/api/device-network/wlan/profiles` | response | `$.response.data.profiles[*].ssid` | mask | network identifier |
|
|
| POST | `/api/device-network/wlan/connect` | request | `$.body.ssid` | mask | network identifier |
|
|
| POST | `/api/device-network/wlan/connect` | request | `$.body.password` | drop | WLAN credential |
|
|
| GET | `/api/apn` | response | `$.response.data.contexts[*].username` | drop | APN credential |
|
|
| GET | `/api/apn` | response | `$.response.data.contexts[*].password` | drop | APN credential |
|
|
| POST | `/api/apn` | request | `$.body.username` | mask | identifier or address |
|
|
| POST | `/api/apn` | request | `$.body.password` | drop | secret or message content |
|
|
| GET | `/api/esim/euicc` | response | `$.response.data.eid` | mask | eUICC identifier |
|
|
| GET | `/api/esim/profiles` | response | `$.response.data.profiles[*].iccid` | mask | eSIM identifier |
|
|
| POST | `/api/esim/profiles` | request | `$.body.matching_id` | mask | identifier or address |
|
|
| POST | `/api/esim/profiles` | request | `$.body.confirmation_code` | drop | secret or message content |
|
|
| POST | `/api/esim/profiles` | request | `$.body.imei` | mask | identifier or address |
|
|
| GET | `/api/calls` | response | `$.response.data.calls[*].phone_number` | mask | call party |
|
|
| POST | `/api/call/dial` | request | `$.body.phone_number` | mask | identifier or address |
|
|
| GET | `/api/call/forwarding` | response | `$.response.data.voice_unconditional` | mask | forwarding destination |
|
|
| GET | `/api/call/forwarding` | response | `$.response.data.voice_busy` | mask | forwarding destination |
|
|
| GET | `/api/call/forwarding` | response | `$.response.data.voice_no_reply` | mask | forwarding destination |
|
|
| GET | `/api/call/forwarding` | response | `$.response.data.voice_not_reachable` | mask | forwarding destination |
|
|
| POST | `/api/call/forwarding` | request | `$.body.number` | mask | identifier or address |
|
|
| GET | `/api/call/history` | response | `$.response.data.records[*].phone_number` | mask | call party |
|
|
| GET | `/api/voicemail/status` | response | `$.response.data.mailbox_number` | mask | voicemail number |
|
|
| POST | `/api/sms/send` | request | `$.body.phone_number` | mask | identifier or address |
|
|
| POST | `/api/sms/send` | request | `$.body.content` | drop | secret or message content |
|
|
| GET | `/api/sms/list` | response | `$.response.data.messages[*].phone_number` | mask | message correspondent |
|
|
| GET | `/api/sms/list` | response | `$.response.data.messages[*].content` | drop | message body |
|
|
| GET | `/api/sms/conversation` | query | `$.query.phone_number` | mask | message correspondent |
|
|
| GET | `/api/sms/conversation` | response | `$.response.data.messages[*].phone_number` | mask | message correspondent |
|
|
| GET | `/api/sms/conversation` | response | `$.response.data.messages[*].content` | drop | message body |
|
|
| POST | `/api/sms/batch-delete` | request | `$.body.phone_numbers[*]` | mask | identifier or address |
|
|
| DELETE | `/api/sms/conversation/{phone_number}` | path | `$.path.phone_number` | mask | identifier or address |
|
|
| GET | `/api/notifications/config` | response | `$.response.data.channels[*].config` | mask | identifier or address |
|
|
| POST | `/api/notifications/config` | request | `$.body.channels[*].config` | mask | identifier or address |
|
|
| GET | `/api/automation/config` | response | `$.response.data.tasks[*].config` | mask | identifier or address |
|
|
| POST | `/api/automation/config` | request | `$.body.tasks[*].config` | mask | identifier or address |
|
|
| POST | `/api/auth/password` | request | `$.body.new_password` | drop | secret or message content |
|
|
| POST | `/api/auth/password` | session | `$.session.set-cookie` | drop | secret or message content |
|
|
| GET | `/api/auth/settings` | session | `$.session.cookie` | drop | secret or message content |
|
|
| POST | `/api/auth/settings` | session | `$.session.cookie` | drop | secret or message content |
|
|
| GET | `/api/auth/status` | session | `$.session.cookie` | drop | secret or message content |
|
|
| POST | `/api/auth/setup` | request | `$.body.password` | drop | secret or message content |
|
|
| POST | `/api/auth/setup` | session | `$.session.set-cookie` | drop | secret or message content |
|
|
| POST | `/api/auth/login` | request | `$.body.password` | drop | secret or message content |
|
|
| POST | `/api/auth/login` | session | `$.session.set-cookie` | drop | secret or message content |
|
|
| POST | `/api/auth/logout` | session | `$.session.cookie` | drop | secret or message content |
|
|
| POST | `/api/auth/logout` | session | `$.session.set-cookie` | drop | secret or message content |
|