Request and Success Response Schemas
Use this as a contract reference. Examples below are representative success payloads from current handlers.
GET /api/status
Request: no body.
curl "http://192.168.4.1/api/status"
Success 200 (shape):
{
"cpu_load_pct": 5,
"bus_a_util_pct": 12,
"bus_b_util_pct": 12,
"bus_total_util_pct": 24,
"bus_a_ready": true,
"bus_b_ready": true,
"ingress_a_frames": 123456,
"ingress_b_frames": 123320,
"rx_queue_depth": 0,
"rx_drops_boot": 0,
"rx_drops_run": 0,
"forwarded_frames": 987654,
"passive_fast_path_frames": 876543,
"observed_decoded_frames": 55110,
"active_mutations": 2,
"staging_mutations": 0,
"dbc_loaded": true,
"dbc_message_count": 52,
"dbc_signal_count": 190,
"replay_frame_count": 0,
"replay_playing": false,
"frame_rate_fps": 240,
"observation_mode": "specific",
"decode_all": false,
"fast_path_avg_us": 250,
"active_path_avg_us": 750,
"active_mutation_items": [
{
"rule_id": 3,
"priority": 1,
"active": true,
"kind": "BIT_RANGE",
"can_id": "0x280",
"direction": "A_TO_B",
"enabled": true,
"dynamic": true,
"start_bit": 0,
"length": 8,
"little_endian": true,
"operation": "REPLACE",
"replace_value": 42,
"signal_name": "ExampleSignal"
}
],
"recent_frames": [
{
"id": "0x280",
"can_id": 640,
"dlc": 8,
"direction": "A_TO_B",
"timestamp_us": 123456789,
"data": "00 01 02 03 04 05 06 07",
"rate_hz": 100,
"total_frames": 5555,
"mutated": true,
"message_name": "ExampleMessage",
"decoded_signals": [
{
"index": 0,
"name": "ExampleSignal",
"value": 42.000,
"start_bit": 0,
"length": 8,
"little_endian": true,
"is_signed": false,
"factor": 1.0,
"offset": 0.0,
"generation": 4321,
"mutated": true
}
]
}
]
}
GET /api/frame_cache?limit=<n>
Request: optional query param limit (firmware caps this to status frame limit).
curl "http://192.168.4.1/api/frame_cache?limit=40"
Success 200:
{
"ok": true,
"count": 2,
"frames": [
{
"can_id": 640,
"direction": "A_TO_B",
"dlc": 8,
"timestamp_us": 123456789,
"rate_hz": 100,
"mutated": true,
"data": "00 01 02 03 04 05 06 07"
}
]
}
GET /api/signal_cache?indexes=0,1,2
Request: optional indexes CSV of numeric signal indexes.
curl "http://192.168.4.1/api/signal_cache?indexes=0,1,2"
Success 200:
{
"ok": true,
"count": 3,
"signals": [
{
"index": 0,
"can_id": 640,
"name": "EngineTorque",
"value": 145.2500,
"generation": 987,
"valid": true,
"subscribed": true
}
]
}
POST /api/observe
Request form fields: mode = none|specific|all, optional ids for specific.
curl -X POST "http://192.168.4.1/api/observe" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data "mode=specific&ids=0x280:A_TO_B,0x1A0:B_TO_A"
Success 200:
{ "ok": true, "mode": "specific" }