{"openapi":"3.1.0","info":{"title":"AirPlx Device Gateway","summary":"Debug and admin HTTP API. The box protocol itself is at /docs/v1.","version":"1"},"paths":{"/api/v1/stats":{"get":{"tags":["public"],"summary":"Totals for the landing page (no device ids)","operationId":"stats_api_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Api V1 Stats Get"}}}}}}},"/api/v1/activity":{"get":{"tags":["public"],"summary":"Recent message types and directions, all boxes (no ids, no contents)","operationId":"activity_api_v1_activity_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Activity Api V1 Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices":{"get":{"tags":["admin"],"summary":"Every box seen since the last deploy","operationId":"devices_api_v1_devices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Devices Api V1 Devices Get"}}}}}}},"/api/v1/devices/{device_id}":{"get":{"tags":["admin"],"summary":"One box, with its hello and last status","operationId":"device_api_v1_devices__device_id__get","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Device Api V1 Devices  Device Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_id}/messages":{"get":{"tags":["admin"],"summary":"Recent messages both ways, decoded (newest last)","operationId":"messages_api_v1_devices__device_id__messages_get","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Messages Api V1 Devices  Device Id  Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_id}/commands":{"get":{"tags":["admin"],"summary":"Commands sent to the box and their cmd_results","operationId":"commands_api_v1_devices__device_id__commands_get","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commands Api V1 Devices  Device Id  Commands Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_id}/cmd":{"post":{"tags":["admin"],"summary":"Send a remote command (M2a §11)","operationId":"send_command_api_v1_devices__device_id__cmd_post","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Command Api V1 Devices  Device Id  Cmd Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CommandRequest":{"properties":{"name":{"type":"string","title":"Name","examples":["find_device"]},"args":{"additionalProperties":true,"type":"object","title":"Args","examples":[{}]},"timeout_ms":{"type":"integer","title":"Timeout Ms","default":30000},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id","description":"Reuse it to retry. The box returns its stored result."}},"type":"object","required":["name"],"title":"CommandRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}